From fc280ae1e8e5e2b263f4bd893f9782d93fd3bf87 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 30 Sep 2017 23:55:49 +0200 Subject: [PATCH] 0001591: STL export in various units --- src/Mod/Mesh/Gui/Command.cpp | 48 ++++++++++++++++++++++++++++++++++ src/Mod/Mesh/Gui/Workbench.cpp | 5 ++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/Mod/Mesh/Gui/Command.cpp b/src/Mod/Mesh/Gui/Command.cpp index a2cb5ebc99..721029bd21 100644 --- a/src/Mod/Mesh/Gui/Command.cpp +++ b/src/Mod/Mesh/Gui/Command.cpp @@ -1651,6 +1651,53 @@ bool CmdMeshMerge::isActive(void) return getSelection().countObjectsOfType(Mesh::Feature::getClassTypeId()) >= 2; } +//-------------------------------------------------------------------------------------- + +DEF_STD_CMD_A(CmdMeshScale) + +CmdMeshScale::CmdMeshScale() + : Command("Mesh_Scale") +{ + sAppModule = "Mesh"; + sGroup = QT_TR_NOOP("Mesh"); + sMenuText = QT_TR_NOOP("Scale..."); + sToolTipText = QT_TR_NOOP("Scale selected meshes"); + sWhatsThis = "Mesh_Scale"; + sStatusTip = sToolTipText; +} + +void CmdMeshScale::activated(int) +{ + App::Document *pcDoc = App::GetApplication().getActiveDocument(); + if (!pcDoc) + return; + + bool ok; + double factor = QInputDialog::getDouble(Gui::getMainWindow(), QObject::tr("Scaling"), + QObject::tr("Enter scaling factor:"), 1, 0, DBL_MAX, 5, &ok); + if (!ok || factor == 0) + return; + + openCommand("Mesh scale"); + std::vector objs = Gui::Selection().getObjectsOfType(Mesh::Feature::getClassTypeId()); + Base::Matrix4D mat; + mat.scale(factor,factor,factor); + for (std::vector::const_iterator it = objs.begin(); it != objs.end(); ++it) { + MeshObject* mesh = static_cast(*it)->Mesh.startEditing(); + MeshCore::MeshKernel& kernel = mesh->getKernel(); + kernel.Transform(mat); + static_cast(*it)->Mesh.finishEditing(); + } + + updateActive(); + commitCommand(); +} + +bool CmdMeshScale::isActive(void) +{ + return getSelection().countObjectsOfType(Mesh::Feature::getClassTypeId()) > 0; +} + void CreateMeshCommands(void) { @@ -1689,4 +1736,5 @@ void CreateMeshCommands(void) rcCmdMgr.addCommand(new CmdMeshFromPartShape()); rcCmdMgr.addCommand(new CmdMeshSegmentation()); rcCmdMgr.addCommand(new CmdMeshMerge()); + rcCmdMgr.addCommand(new CmdMeshScale()); } diff --git a/src/Mod/Mesh/Gui/Workbench.cpp b/src/Mod/Mesh/Gui/Workbench.cpp index 36099821f7..b3fe938555 100644 --- a/src/Mod/Mesh/Gui/Workbench.cpp +++ b/src/Mod/Mesh/Gui/Workbench.cpp @@ -188,8 +188,9 @@ Gui::MenuItem* Workbench::setupMenuBar() const *mesh << "Mesh_Import" << "Mesh_Export" << "Mesh_FromPartShape" << "Separator" << analyze << "Mesh_HarmonizeNormals" << "Mesh_FlipNormals" << "Separator" << "Mesh_FillupHoles" << "Mesh_FillInteractiveHole" << "Mesh_RemoveComponents" - << "Mesh_RemoveCompByHand" << "Mesh_AddFacet" << "Mesh_Smoothing" << "Separator" - << "Mesh_BuildRegularSolid" << boolean << "Separator" << "Mesh_Merge" << "Mesh_PolySelect" << "Mesh_PolyCut" + << "Mesh_RemoveCompByHand" << "Mesh_AddFacet" << "Mesh_Smoothing" << "Mesh_Scale" + << "Separator" << "Mesh_BuildRegularSolid" << boolean << "Separator" + << "Mesh_Merge" << "Mesh_PolySelect" << "Mesh_PolyCut" << "Mesh_PolySplit" << "Mesh_PolySegm" << "Mesh_PolyTrim" << "Separator" << "Mesh_TrimByPlane" << "Mesh_SectionByPlane" << "Mesh_Segmentation" << "Mesh_VertexCurvature";