diff --git a/src/Mod/Part/Gui/CommandSimple.cpp b/src/Mod/Part/Gui/CommandSimple.cpp index 8f19f2ccfb..2dce9fb58c 100644 --- a/src/Mod/Part/Gui/CommandSimple.cpp +++ b/src/Mod/Part/Gui/CommandSimple.cpp @@ -168,6 +168,57 @@ bool CmdPartShapeFromMesh::isActive(void) Base::Type meshid = Base::Type::fromName("Mesh::Feature"); return Gui::Selection().countObjectsOfType(meshid) > 0; } +//=========================================================================== +// Part_PointsFromMesh +//=========================================================================== +DEF_STD_CMD_A(CmdPartPointsFromMesh); + +CmdPartPointsFromMesh::CmdPartPointsFromMesh() + :Command("Part_PointsFromMesh") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Create points object from mesh"); + sToolTipText = QT_TR_NOOP("Create selectable points object from selected mesh object"); + sWhatsThis = "Part_PointsFromMesh"; + sStatusTip = sToolTipText; + sPixmap = "Part_Points_from_Mesh"; +} + +void CmdPartPointsFromMesh::activated(int iMsg) +{ + Q_UNUSED(iMsg); + + Base::Type meshid = Base::Type::fromName("Mesh::Feature"); + std::vector meshes; + meshes = Gui::Selection().getObjectsOfType(meshid); + Gui::WaitCursor wc; + std::vector::iterator it; + openCommand("Points from mesh"); + for (it = meshes.begin(); it != meshes.end(); ++it) { + App::Document* doc = (*it)->getDocument(); + std::string mesh = (*it)->getNameInDocument(); + + if (!(*it)->isDerivedFrom(Base::Type::fromName("Mesh::Feature"))) + continue; + doCommand(Doc,"import Part"); + doCommand(Doc,"mesh_pts = FreeCAD.getDocument(\"%s\").getObject(\"%s\").Mesh.Points\n", + doc->getName(), + mesh.c_str()); + doCommand(Doc,"Part.show(Part.makeCompound([Part.Point(m.Vector).toShape() for m in mesh_pts]),\"%s\")\n", + (mesh+"_pts").c_str()); + doCommand(Doc,"del mesh_pts\n"); + + } + + commitCommand(); +} + +bool CmdPartPointsFromMesh::isActive(void) +{ + Base::Type meshid = Base::Type::fromName("Mesh::Feature"); + return Gui::Selection().countObjectsOfType(meshid) > 0; +} //=========================================================================== // Part_SimpleCopy @@ -420,6 +471,7 @@ void CreateSimplePartCommands(void) Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); rcCmdMgr.addCommand(new CmdPartSimpleCylinder()); rcCmdMgr.addCommand(new CmdPartShapeFromMesh()); + rcCmdMgr.addCommand(new CmdPartPointsFromMesh()); rcCmdMgr.addCommand(new CmdPartSimpleCopy()); rcCmdMgr.addCommand(new CmdPartElementCopy()); rcCmdMgr.addCommand(new CmdPartTransformedCopy()); diff --git a/src/Mod/Part/Gui/Resources/Part.qrc b/src/Mod/Part/Gui/Resources/Part.qrc index cbc770bdb7..e7379918af 100644 --- a/src/Mod/Part/Gui/Resources/Part.qrc +++ b/src/Mod/Part/Gui/Resources/Part.qrc @@ -1,5 +1,5 @@ - + icons/PartFeature.svg icons/PartFeature.xpm icons/PartFeatureImport.xpm @@ -22,7 +22,7 @@ icons/Part_Fuse.svg icons/Part_Import.svg icons/Part_Export.svg - icons/Part_BoxSelection.svg + icons/Part_BoxSelection.svg icons/Part_Loft.svg icons/Part_Mirror.svg icons/Part_MirrorPNG.png @@ -73,6 +73,7 @@ icons/Tree_Part_Prism.svg icons/Tree_Part_Wedge.svg icons/Part_Shape_from_Mesh.svg + icons/Part_Points_from_Mesh.svg icons/Part_JoinBypass.svg icons/Part_JoinConnect.svg icons/Part_JoinCutout.svg @@ -117,4 +118,4 @@ translations/Part_ar.qm translations/Part_vi.qm - + diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Points_from_Mesh.svg b/src/Mod/Part/Gui/Resources/icons/Part_Points_from_Mesh.svg new file mode 100644 index 0000000000..f72cf4a8c4 --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_Points_from_Mesh.svg @@ -0,0 +1,99 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index 5f050ca915..36dd5554e5 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -118,6 +118,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Part_Builder" << "Separator" << "Part_ShapeFromMesh" + << "Part_PointsFromMesh" << "Part_MakeSolid" << "Part_ReverseShape" << copy