diff --git a/src/Mod/Fem/Gui/Command.cpp b/src/Mod/Fem/Gui/Command.cpp index 4c10293b9..e43b7faa7 100755 --- a/src/Mod/Fem/Gui/Command.cpp +++ b/src/Mod/Fem/Gui/Command.cpp @@ -121,7 +121,7 @@ CmdFemCreateAnalysis::CmdFemCreateAnalysis() sToolTipText = QT_TR_NOOP("Create a FEM analysis"); sWhatsThis = sToolTipText; sStatusTip = sToolTipText; - sPixmap = "Fem_FemMesh"; + sPixmap = "Fem_Analysis"; } void CmdFemCreateAnalysis::activated(int iMsg) @@ -166,6 +166,70 @@ void CmdFemCreateAnalysis::activated(int iMsg) } bool CmdFemCreateAnalysis::isActive(void) +{ + return !ActiveAnalysis; +} + + + + +//===================================================================================== +DEF_STD_CMD_A(CmdFemAddPart); + +CmdFemAddPart::CmdFemAddPart() + : Command("Fem_FemAddPart") +{ + sAppModule = "Fem"; + sGroup = QT_TR_NOOP("Fem"); + sMenuText = QT_TR_NOOP("Add a part to the Analysis"); + sToolTipText = QT_TR_NOOP("Add a part to the Analysis"); + sWhatsThis = sToolTipText; + sStatusTip = sToolTipText; + sPixmap = "Fem_AddFemMesh"; +} + +void CmdFemAddPart::activated(int iMsg) +{ +#ifndef FCWithNetgen + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Your FreeCAD is build without NETGEN support. Meshing will not work....")); + return; +#endif + + std::vector selection = getSelection().getSelectionEx(); + + if (selection.size() != 1) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Select an edge, face or body. Only one body is allowed.")); + return; + } + + if (!selection[0].isObjectTypeOf(Part::Feature::getClassTypeId())){ + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong object type"), + QObject::tr("Fillet works only on parts")); + return; + } + + Part::Feature *base = static_cast(selection[0].getObject()); + + std::string AnalysisName = getUniqueObjectName("FemAnalysis"); + + std::string MeshName = getUniqueObjectName((std::string(base->getNameInDocument()) +"_Mesh").c_str()); + + + openCommand("Create FEM analysis"); + doCommand(Doc,"App.activeDocument().addObject('Fem::FemAnalysis','%s')",AnalysisName.c_str()); + doCommand(Doc,"App.activeDocument().addObject('Fem::FemMeshShapeNetgenObject','%s')",MeshName.c_str()); + doCommand(Doc,"App.activeDocument().ActiveObject.Shape = App.activeDocument().%s",base->getNameInDocument()); + doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s",AnalysisName.c_str(),MeshName.c_str()); + addModule(Gui,"FemGui"); + doCommand(Gui,"FemGui.setActiveAnalysis(App.activeDocument().%s)",AnalysisName.c_str()); + + updateActive(); + +} + +bool CmdFemAddPart::isActive(void) { if (Gui::Control().activeDialog()) return false; @@ -173,6 +237,7 @@ bool CmdFemCreateAnalysis::isActive(void) return Gui::Selection().countObjectsOfType(type) > 0; } + //===================================================================================== DEF_STD_CMD_A(CmdFemConstraintBearing); @@ -569,6 +634,7 @@ void CreateFemCommands(void) Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); rcCmdMgr.addCommand(new CmdFemCreateFromShape()); rcCmdMgr.addCommand(new CmdFemCreateAnalysis()); + rcCmdMgr.addCommand(new CmdFemAddPart()); rcCmdMgr.addCommand(new CmdFemCreateNodesSet()); rcCmdMgr.addCommand(new CmdFemDefineNodesSet()); rcCmdMgr.addCommand(new CmdFemConstraintBearing()); diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc index 76eda4df4..6061a181a 100755 --- a/src/Mod/Fem/Gui/Resources/Fem.qrc +++ b/src/Mod/Fem/Gui/Resources/Fem.qrc @@ -2,6 +2,8 @@ icons/Fem_FemMesh.svg icons/Fem_FemMesh_createnodebypoly.svg + icons/Fem_AddFemMesh.svg + icons/Fem_Analysis.svg icons/Fem_ConstraintForce.svg icons/Fem_ConstraintFixed.svg icons/Fem_ConstraintBearing.svg diff --git a/src/Mod/Fem/Gui/Resources/icons/Fem_AddFemMesh.svg b/src/Mod/Fem/Gui/Resources/icons/Fem_AddFemMesh.svg index 94f86b9c3..a42edbeb5 100644 --- a/src/Mod/Fem/Gui/Resources/icons/Fem_AddFemMesh.svg +++ b/src/Mod/Fem/Gui/Resources/icons/Fem_AddFemMesh.svg @@ -15,7 +15,7 @@ id="svg2860" sodipodi:version="0.32" inkscape:version="0.48.4 r9939" - sodipodi:docname="MachDist_FemMesh.svg" + sodipodi:docname="MachDist_AddFemMesh.svg" inkscape:output_extension="org.inkscape.output.svg.inkscape" version="1.1"> image/svg+xml + diff --git a/src/Mod/Fem/Gui/Resources/icons/Fem_Analysis.svg b/src/Mod/Fem/Gui/Resources/icons/Fem_Analysis.svg new file mode 100644 index 000000000..a6d5d1992 --- /dev/null +++ b/src/Mod/Fem/Gui/Resources/icons/Fem_Analysis.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + A + + diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp index 105cad218..5f13fd524 100755 --- a/src/Mod/Fem/Gui/Workbench.cpp +++ b/src/Mod/Fem/Gui/Workbench.cpp @@ -57,6 +57,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const fem->setCommand("FEM"); *fem << "Fem_CreateFromShape" << "Fem_CreateAnalysis" + << "Fem_FemAddPart" << "Fem_CreateNodesSet" << "Fem_ConstraintFixed" << "Fem_ConstraintForce" @@ -66,17 +67,17 @@ Gui::ToolBarItem* Workbench::setupToolBars() const return root; } -Gui::MenuItem* Workbench::setupMenuBar() const -{ - Gui::MenuItem* root = StdWorkbench::setupMenuBar(); - Gui::MenuItem* item = root->findItem("&Windows"); - Gui::MenuItem* fem = new Gui::MenuItem; - root->insertItem(item, fem); - fem->setCommand("&FEM"); - *fem << "Fem_CreateFromShape" - << "Fem_MechanicalMaterial" - << "Fem_NewMechanicalAnalysis" - << "Fem_MechanicalJobControl" +Gui::MenuItem* Workbench::setupMenuBar() const +{ + Gui::MenuItem* root = StdWorkbench::setupMenuBar(); + Gui::MenuItem* item = root->findItem("&Windows"); + Gui::MenuItem* fem = new Gui::MenuItem; + root->insertItem(item, fem); + fem->setCommand("&FEM"); + *fem << "Fem_CreateFromShape" + << "Fem_MechanicalMaterial" + << "Fem_NewMechanicalAnalysis" + << "Fem_MechanicalJobControl" << "Fem_CreateAnalysis" << "Fem_CreateNodesSet" << "Fem_ConstraintFixed" @@ -84,6 +85,6 @@ Gui::MenuItem* Workbench::setupMenuBar() const << "Fem_ConstraintBearing" << "Fem_ConstraintGear" << "Fem_ConstraintPulley"; - - return root; + + return root; }