Add ActiveAnalysis logic

This commit is contained in:
jriegel 2013-04-29 20:08:21 +02:00
parent 527a6f5562
commit 3cca1594da
4 changed files with 74 additions and 1 deletions

View File

@ -68,7 +68,7 @@ static PyObject * setActiveAnalysis(PyObject *self, PyObject *args)
return 0;
}
// get the gui document of the Assembly Item
// get the gui document of the Analysis Item
ActiveAnalysis = static_cast<Fem::FemAnalysis*>(obj);
ActiveAppDoc = ActiveAnalysis->getDocument();
ActiveGuiDoc = Gui::Application::Instance->getDocument(ActiveAppDoc);
@ -95,5 +95,9 @@ static PyObject * getActiveAnalysis(PyObject *self, PyObject *args)
/* registration table */
struct PyMethodDef FemGui_Import_methods[] = {
{"setActiveAnalysis" ,setActiveAnalysis ,METH_VARARGS,
"setActiveAnalysis(AnalysisObject) -- Set the Analysis object in work."},
{"getActiveAnalysis" ,getActiveAnalysis ,METH_VARARGS,
"getActiveAnalysis() -- Returns the Analysis object in work."},
{NULL, NULL} /* end of table marker */
};

View File

@ -54,11 +54,33 @@
#include <Mod/Fem/App/FemSetNodesObject.h>
#include <strstream>
#include <Mod/Fem/App/FemConstraint.h>
#include <Mod/Fem/App/FemAnalysis.h>
#include "Hypothesis.h"
using namespace std;
extern Fem::FemAnalysis *ActiveAnalysis;
bool getConstraintPrerequisits(Fem::FemAnalysis **Analysis)
{
if(!ActiveAnalysis || !ActiveAnalysis->getTypeId().isDerivedFrom(Fem::FemAnalysis::getClassTypeId())){
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No active Analysis"),
QObject::tr("You need to create or activate a Analysis"));
return true;
}
*Analysis = static_cast<Fem::FemAnalysis*>(ActiveAnalysis);
// return with no error
return false;
}
DEF_STD_CMD_A(CmdFemCreateFromShape);
CmdFemCreateFromShape::CmdFemCreateFromShape()
@ -130,6 +152,9 @@ void CmdFemCreateAnalysis::activated(int iMsg)
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();
}
@ -160,10 +185,16 @@ CmdFemConstraintBearing::CmdFemConstraintBearing()
void CmdFemConstraintBearing::activated(int iMsg)
{
Fem::FemAnalysis *Analysis;
if(getConstraintPrerequisits(&Analysis))
return;
std::string FeatName = getUniqueObjectName("FemConstraintBearing");
openCommand("Make FEM constraint for bearing");
doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintBearing\",\"%s\")",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str());
updateActive();
doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str());
@ -192,10 +223,16 @@ CmdFemConstraintFixed::CmdFemConstraintFixed()
void CmdFemConstraintFixed::activated(int iMsg)
{
Fem::FemAnalysis *Analysis;
if(getConstraintPrerequisits(&Analysis))
return;
std::string FeatName = getUniqueObjectName("FemConstraintFixed");
openCommand("Make FEM constraint fixed geometry");
doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintFixed\",\"%s\")",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str());
updateActive();
doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str());
@ -224,11 +261,17 @@ CmdFemConstraintForce::CmdFemConstraintForce()
void CmdFemConstraintForce::activated(int iMsg)
{
Fem::FemAnalysis *Analysis;
if(getConstraintPrerequisits(&Analysis))
return;
std::string FeatName = getUniqueObjectName("FemConstraintForce");
openCommand("Make FEM constraint force on geometry");
doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintForce\",\"%s\")",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Force = 0.0",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str());
updateActive();
doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str());
@ -257,11 +300,16 @@ CmdFemConstraintGear::CmdFemConstraintGear()
void CmdFemConstraintGear::activated(int iMsg)
{
Fem::FemAnalysis *Analysis;
if(getConstraintPrerequisits(&Analysis))
return;
std::string FeatName = getUniqueObjectName("FemConstraintGear");
openCommand("Make FEM constraint for gear");
doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintGear\",\"%s\")",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Diameter = 100.0",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str());
updateActive();
doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str());
@ -290,6 +338,11 @@ CmdFemConstraintPulley::CmdFemConstraintPulley()
void CmdFemConstraintPulley::activated(int iMsg)
{
Fem::FemAnalysis *Analysis;
if(getConstraintPrerequisits(&Analysis))
return;
std::string FeatName = getUniqueObjectName("FemConstraintPulley");
openCommand("Make FEM constraint for pulley");
@ -299,6 +352,7 @@ void CmdFemConstraintPulley::activated(int iMsg)
doCommand(Doc,"App.activeDocument().%s.CenterDistance = 500.0",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Force = 100.0",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.TensionForce = 100.0",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str());
updateActive();
doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str());
@ -318,6 +372,11 @@ DEF_STD_CMD_A(CmdFemDefineNodesSet);
void DefineNodesCallback(void * ud, SoEventCallback * n)
{
Fem::FemAnalysis *Analysis;
if(getConstraintPrerequisits(&Analysis))
return;
// show the wait cursor because this could take quite some time
Gui::WaitCursor wc;
@ -374,6 +433,7 @@ void DefineNodesCallback(void * ud, SoEventCallback * n)
Gui::Command::openCommand("Place robot");
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.addObject('Fem::FemSetNodesObject','NodeSet')");
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.ActiveObject.Nodes = %s",set.str().c_str());
Gui::Command::doCommand(Gui::Command::Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().NodeSet]",Analysis->getNameInDocument(),Analysis->getNameInDocument());
////Gui::Command::updateActive();
Gui::Command::commitCommand();

View File

@ -59,6 +59,13 @@ ViewProviderAnalysis::~ViewProviderAnalysis()
}
bool ViewProviderAnalysis::doubleClicked(void)
{
Gui::Command::assureWorkbench("FemWorkbench");
Gui::Command::addModule(Gui::Command::Gui,"FemGui");
Gui::Command::doCommand(Gui::Command::Gui,"FemGui.setActiveAnalysis(App.activeDocument().%s)",this->getObject()->getNameInDocument());
return true;
}
std::vector<App::DocumentObject*> ViewProviderAnalysis::claimChildren(void)const
{

View File

@ -50,6 +50,8 @@ public:
/// destructor.
~ViewProviderAnalysis();
virtual bool doubleClicked(void);
virtual std::vector<App::DocumentObject*> claimChildren(void)const;
//virtual std::vector<App::DocumentObject*> claimChildren3D(void)const;