From ce6809415b45d760961eddb58e7c4544b602495a Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 11 Oct 2017 22:04:07 +0200 Subject: [PATCH] inherit FemAnalysis from DocumentObjectGroup and remove Member property --- src/Mod/Fem/App/FemAnalysis.cpp | 11 +--- src/Mod/Fem/App/FemAnalysis.h | 6 +- src/Mod/Fem/App/FemVTKTools.cpp | 6 +- src/Mod/Fem/FemMeshTools.py | 4 +- src/Mod/Fem/FemResultTools.py | 2 +- src/Mod/Fem/FemTools.py | 4 +- src/Mod/Fem/FemToolsCcx.py | 4 +- src/Mod/Fem/FemToolsZ88.py | 2 +- src/Mod/Fem/Gui/Command.cpp | 52 ++++++++--------- .../Gui/TaskFemConstraintFluidBoundary.cpp | 4 +- .../Fem/Gui/TaskFemConstraintTransform.cpp | 4 +- src/Mod/Fem/Gui/ViewProviderAnalysis.cpp | 37 +++--------- src/Mod/Fem/Gui/ViewProviderAnalysis.h | 4 +- src/Mod/Fem/PyGui/FemCommands.py | 8 +-- src/Mod/Fem/PyGui/_CommandFemAnalysis.py | 2 +- .../PyGui/_CommandFemConstraintSelfWeight.py | 2 +- .../Fem/PyGui/_CommandFemElementFluid1D.py | 2 +- .../Fem/PyGui/_CommandFemElementGeometry1D.py | 2 +- .../Fem/PyGui/_CommandFemElementGeometry2D.py | 2 +- src/Mod/Fem/PyGui/_CommandFemMaterialFluid.py | 2 +- .../_CommandFemMaterialMechanicalNonlinear.py | 4 +- src/Mod/Fem/PyGui/_CommandFemMaterialSolid.py | 2 +- .../Fem/PyGui/_CommandFemMeshGmshFromShape.py | 2 +- .../PyGui/_CommandFemMeshNetgenFromShape.py | 2 +- .../Fem/PyGui/_CommandFemSolverCalculix.py | 6 +- src/Mod/Fem/PyGui/_CommandFemSolverZ88.py | 2 +- src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py | 2 +- src/Mod/Fem/PyGui/_TaskPanelFemResultShow.py | 2 +- src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py | 6 +- .../PyGui/_ViewProviderFemSolverCalculix.py | 2 +- .../Fem/PyGui/_ViewProviderFemSolverZ88.py | 2 +- src/Mod/Fem/TestFem.py | 56 +++++++++---------- src/Mod/Fem/importCcxFrdResults.py | 2 +- src/Mod/Fem/importVTKResults.py | 2 +- src/Mod/Fem/importZ88O2Results.py | 2 +- 35 files changed, 112 insertions(+), 142 deletions(-) diff --git a/src/Mod/Fem/App/FemAnalysis.cpp b/src/Mod/Fem/App/FemAnalysis.cpp index b800436135..a497144ab4 100644 --- a/src/Mod/Fem/App/FemAnalysis.cpp +++ b/src/Mod/Fem/App/FemAnalysis.cpp @@ -35,13 +35,12 @@ using namespace Fem; using namespace App; -PROPERTY_SOURCE(Fem::FemAnalysis, App::DocumentObject) +PROPERTY_SOURCE(Fem::FemAnalysis, App::DocumentObjectGroup) FemAnalysis::FemAnalysis() { Base::Uuid id; - ADD_PROPERTY_TYPE(Member,(0), "Analysis member",Prop_None,"All objects belonging to the Analysis"); ADD_PROPERTY_TYPE(Uid,(id),0,App::Prop_None,"UUID of the Analysis"); } @@ -56,16 +55,12 @@ short FemAnalysis::mustExecute(void) const PyObject *FemAnalysis::getPyObject() { - if (PythonObject.is(Py::_None())){ - // ref counter is set to 1 - PythonObject = Py::Object(new DocumentObjectPy(this),true); - } - return Py::new_reference_to(PythonObject); + return App::DocumentObjectGroup::getPyObject(); } void FemAnalysis::onChanged(const Property* prop) { - App::DocumentObject::onChanged(prop); + App::DocumentObjectGroup::onChanged(prop); } diff --git a/src/Mod/Fem/App/FemAnalysis.h b/src/Mod/Fem/App/FemAnalysis.h index 82917967d1..4df6688365 100644 --- a/src/Mod/Fem/App/FemAnalysis.h +++ b/src/Mod/Fem/App/FemAnalysis.h @@ -25,7 +25,7 @@ #define Fem_FemAnalysis_H -#include +#include #include #include @@ -34,7 +34,7 @@ namespace Fem { -class AppFemExport FemAnalysis : public App::DocumentObject +class AppFemExport FemAnalysis : public App::DocumentObjectGroup { PROPERTY_HEADER(Fem::FemAnalysis); @@ -53,8 +53,6 @@ public: virtual short mustExecute(void) const; virtual PyObject *getPyObject(void); - /// Member objects of the Analysis - App::PropertyLinkList Member; /// unique identifier of the Analysis App::PropertyUUID Uid; diff --git a/src/Mod/Fem/App/FemVTKTools.cpp b/src/Mod/Fem/App/FemVTKTools.cpp index 543b2b7e7f..df5b52cfc0 100644 --- a/src/Mod/Fem/App/FemVTKTools.cpp +++ b/src/Mod/Fem/App/FemVTKTools.cpp @@ -451,7 +451,7 @@ App::DocumentObject* getObjectByType(const Base::Type type) } if(obj->getTypeId() == FemAnalysis::getClassTypeId()) { - std::vector fem = (static_cast(obj))->Member.getValues(); + std::vector fem = (static_cast(obj))->Group.getValues(); for (std::vector::iterator it = fem.begin(); it != fem.end(); ++it) { if ((*it)->getTypeId().isDerivedFrom(type)) return static_cast(*it); // return the first of that type @@ -472,10 +472,8 @@ App::DocumentObject* createObjectByType(const Base::Type type) if(obj->getTypeId() == FemAnalysis::getClassTypeId()) { - std::vector fem = (static_cast(obj))->Member.getValues(); App::DocumentObject* newobj = pcDoc->addObject(type.getName()); - fem.push_back(newobj); // FemAnalysis is not a DocumentGroup derived class but DocumentObject - (static_cast(obj))->Member.setValues(fem); + static_cast(obj)->addObject(newobj); return newobj; } else diff --git a/src/Mod/Fem/FemMeshTools.py b/src/Mod/Fem/FemMeshTools.py index b530e69f82..3c484a6709 100644 --- a/src/Mod/Fem/FemMeshTools.py +++ b/src/Mod/Fem/FemMeshTools.py @@ -1049,7 +1049,7 @@ def get_analysis_group_elements(aAnalysis, aPart): ''' group_elements = {} # { name : [element, element, ... , element]} empty_references = [] - for m in aAnalysis.Member: + for m in aAnalysis.Group: if hasattr(m, "References"): if m.References: grp_ele = get_reference_group_elements(m, aPart) @@ -1141,7 +1141,7 @@ def get_anlysis_empty_references_group_elements(group_elements, aAnalysis, aShap material_shape_type = '' missed_material_refshapes = [] empty_reference_material = None - for m in aAnalysis.Member: + for m in aAnalysis.Group: if m.isDerivedFrom("App::MaterialObjectPython"): if hasattr(m, "References") and not m.References: if not empty_reference_material: diff --git a/src/Mod/Fem/FemResultTools.py b/src/Mod/Fem/FemResultTools.py index 64d3ffe09d..29a0005d8c 100644 --- a/src/Mod/Fem/FemResultTools.py +++ b/src/Mod/Fem/FemResultTools.py @@ -33,7 +33,7 @@ import FreeCAD ## Removes all result objects from an analysis group # @param analysis def purge_results(analysis): - for m in analysis.Member: + for m in analysis.Group: if (m.isDerivedFrom('Fem::FemResultObject')): if m.Mesh and hasattr(m.Mesh, "Proxy") and m.Mesh.Proxy.Type == "FemMeshResult": analysis.Document.removeObject(m.Mesh.Name) diff --git a/src/Mod/Fem/FemTools.py b/src/Mod/Fem/FemTools.py index 858227fb4f..fa4dd09a0c 100644 --- a/src/Mod/Fem/FemTools.py +++ b/src/Mod/Fem/FemTools.py @@ -62,7 +62,7 @@ class FemTools(QtCore.QRunnable, QtCore.QObject): ## Removes all result objects # @param self The python object self def purge_results(self): - for m in self.analysis.Member: + for m in self.analysis.Group: if (m.isDerivedFrom('Fem::FemResultObject')): if m.Mesh and hasattr(m.Mesh, "Proxy") and m.Mesh.Proxy.Type == "FemMeshResult": self.analysis.Document.removeObject(m.Mesh.Name) @@ -165,7 +165,7 @@ class FemTools(QtCore.QRunnable, QtCore.QObject): self.transform_constraints = [] found_solver_for_use = False - for m in self.analysis.Member: + for m in self.analysis.Group: if m.isDerivedFrom("Fem::FemSolverObjectPython"): # for some methods no solver is needed (purge_results) --> solver could be none # analysis has one solver and no solver was set --> use the one solver diff --git a/src/Mod/Fem/FemToolsCcx.py b/src/Mod/Fem/FemToolsCcx.py index e567d73b1a..e1cd25deab 100644 --- a/src/Mod/Fem/FemToolsCcx.py +++ b/src/Mod/Fem/FemToolsCcx.py @@ -290,7 +290,7 @@ class FemToolsCcx(FemTools.FemTools): if os.path.isfile(frd_result_file): result_name_prefix = 'CalculiX_' + self.solver.AnalysisType + '_' importCcxFrdResults.importFrd(frd_result_file, self.analysis, result_name_prefix) - for m in self.analysis.Member: + for m in self.analysis.Group: if m.isDerivedFrom("Fem::FemResultObject"): self.results_present = True break @@ -311,7 +311,7 @@ class FemToolsCcx(FemTools.FemTools): raise Exception('FEM: No .dat results found at {}!'.format(dat_result_file)) if mode_frequencies: # print(mode_frequencies) - for m in self.analysis.Member: + for m in self.analysis.Group: if m.isDerivedFrom("Fem::FemResultObject") and m.Eigenmode > 0: for mf in mode_frequencies: if m.Eigenmode == mf['eigenmode']: diff --git a/src/Mod/Fem/FemToolsZ88.py b/src/Mod/Fem/FemToolsZ88.py index fab159653b..a07c906ac4 100644 --- a/src/Mod/Fem/FemToolsZ88.py +++ b/src/Mod/Fem/FemToolsZ88.py @@ -196,7 +196,7 @@ class FemToolsZ88(FemTools.FemTools): if os.path.isfile(disp_result_file): result_name_prefix = 'Z88_' + self.solver.AnalysisType + '_' importZ88O2Results.import_z88_disp(disp_result_file, self.analysis, result_name_prefix) - for m in self.analysis.Member: + for m in self.analysis.Group: if m.isDerivedFrom("Fem::FemResultObject"): self.results_present = True else: diff --git a/src/Mod/Fem/Gui/Command.cpp b/src/Mod/Fem/Gui/Command.cpp index 53c8bfbec8..6dbd561074 100644 --- a/src/Mod/Fem/Gui/Command.cpp +++ b/src/Mod/Fem/Gui/Command.cpp @@ -147,7 +147,7 @@ void CmdFemCreateAnalysis::activated(int) 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()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",AnalysisName.c_str(),MeshName.c_str()); addModule(Gui,"FemGui"); doCommand(Gui,"FemGui.setActiveAnalysis(App.activeDocument().%s)",AnalysisName.c_str()); commitCommand(); @@ -207,7 +207,7 @@ void CmdFemAddPart::activated(int) 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()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",AnalysisName.c_str(),MeshName.c_str()); addModule(Gui,"FemGui"); doCommand(Gui,"FemGui.setActiveAnalysis(App.activeDocument().%s)",AnalysisName.c_str()); commitCommand(); @@ -256,7 +256,7 @@ void CmdFemCreateSolver::activated(int) openCommand("Create solver for FEM or CFD analysis"); doCommand(Doc,"App.activeDocument().addObject(\"Fem::FemSolverObject\",\"%s\")",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); updateActive(); doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str()); @@ -295,7 +295,7 @@ void CmdFemConstraintBearing::activated(int) 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()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -337,7 +337,7 @@ void CmdFemConstraintFixed::activated(int) openCommand("Make FEM constraint fixed geometry"); doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintFixed\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -379,7 +379,7 @@ void CmdFemConstraintPlaneRotation::activated(int) openCommand("Make FEM constraint Plane Rotation face"); doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintPlaneRotation\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -422,8 +422,8 @@ void CmdFemConstraintContact::activated(int) doCommand(Doc,"App.activeDocument().%s.Slope = 1000000.00",FeatName.c_str()); //OvG: set default not equal to 0 doCommand(Doc,"App.activeDocument().%s.Friction = 0.0",FeatName.c_str()); //OvG: set default not equal to 0 doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -467,8 +467,8 @@ void CmdFemConstraintTransform::activated(int) doCommand(Doc,"App.activeDocument().%s.Y_rot = 0.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Z_rot = 0.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -510,8 +510,8 @@ void CmdFemConstraintHeatflux::activated(int) doCommand(Doc,"App.activeDocument().%s.AmbientTemp = 300.0",FeatName.c_str()); //OvG: set default not equal to 0 doCommand(Doc,"App.activeDocument().%s.FilmCoef = 10.0",FeatName.c_str()); //OvG: set default not equal to 0 doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts @@ -554,7 +554,7 @@ void CmdFemConstraintForce::activated(int) doCommand(Doc,"App.activeDocument().%s.Force = 1.0",FeatName.c_str()); //OvG: set default not equal to 0 doCommand(Doc,"App.activeDocument().%s.Reversed = False",FeatName.c_str()); //OvG: set default to False doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -599,8 +599,8 @@ void CmdFemConstraintFluidBoundary::activated(int) doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintFluidBoundary\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 //BoundaryValue is already the default value, zero is acceptable - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -644,8 +644,8 @@ void CmdFemConstraintPressure::activated(int) doCommand(Doc,"App.activeDocument().%s.Pressure = 1000.0",FeatName.c_str()); //OvG: set default not equal to 0 doCommand(Doc,"App.activeDocument().%s.Reversed = False",FeatName.c_str()); //OvG: set default to False doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -686,7 +686,7 @@ void CmdFemConstraintGear::activated(int) 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()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -732,7 +732,7 @@ void CmdFemConstraintPulley::activated(int) 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()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)",Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -773,8 +773,8 @@ void CmdFemConstraintDisplacement::activated(int) openCommand("Make FEM constraint displacement on face"); doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintDisplacement\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts @@ -816,8 +816,8 @@ void CmdFemConstraintTemperature::activated(int) openCommand("Make FEM constraint temperature on face"); doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintTemperature\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts @@ -859,8 +859,8 @@ void CmdFemConstraintInitialTemperature::activated(int) openCommand("Make FEM constraint initial temperature on body"); doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintInitialTemperature\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 - doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", - Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); + doCommand(Doc,"App.activeDocument().%s.addObject(App.activeDocument().%s)", + Analysis->getNameInDocument(),FeatName.c_str()); doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts @@ -943,7 +943,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::doCommand(Gui::Command::Doc,"App.activeDocument().%s.addObject(App.activeDocument().NodeSet)",Analysis->getNameInDocument()); ////Gui::Command::updateActive(); Gui::Command::commitCommand(); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp b/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp index 3053a76c36..71896167d2 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintFluidBoundary.cpp @@ -188,7 +188,7 @@ TaskFemConstraintFluidBoundary::TaskFemConstraintFluidBoundary(ViewProviderFemCo Fem::FemMeshObject* pcMesh = NULL; if (pcAnalysis) { - std::vector fem = pcAnalysis->Member.getValues(); + std::vector fem = pcAnalysis->Group.getValues(); for (std::vector::iterator it = fem.begin(); it != fem.end(); ++it) { if ((*it)->getTypeId().isDerivedFrom(Fem::FemMeshObject::getClassTypeId())) pcMesh = static_cast(*it); @@ -221,7 +221,7 @@ TaskFemConstraintFluidBoundary::TaskFemConstraintFluidBoundary(ViewProviderFemCo pcSolver = NULL; // this is an private object of type Fem::FemSolverObject* if (pcAnalysis) { - std::vector fem = pcAnalysis->Member.getValues(); + std::vector fem = pcAnalysis->Group.getValues(); for (std::vector::iterator it = fem.begin(); it != fem.end(); ++it) { if ((*it)->getTypeId().isDerivedFrom(Fem::FemSolverObject::getClassTypeId())) pcSolver = static_cast(*it); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp b/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp index 808b582e1d..07a273c35f 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintTransform.cpp @@ -440,8 +440,8 @@ std::string TaskFemConstraintTransform::getSurfaceReferences(std::string showCon { return "for obj in FreeCAD.ActiveDocument.Objects:\n\ if obj.isDerivedFrom(\"Fem::FemAnalysisPython\"):\n\ - if FreeCAD.ActiveDocument."+showConstr+" in obj.Member:\n\ - members = obj.Member\n\ + if FreeCAD.ActiveDocument."+showConstr+" in obj.Group:\n\ + members = obj.Group\n\ A = []\n\ i = 0\n\ ss = []\n\ diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp index 17d24ffbf8..6b5e3ab43e 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.cpp @@ -52,7 +52,7 @@ using namespace FemGui; /* TRANSLATOR FemGui::ViewProviderFemAnalysis */ -PROPERTY_SOURCE(FemGui::ViewProviderFemAnalysis, Gui::ViewProviderDocumentObject) +PROPERTY_SOURCE(FemGui::ViewProviderFemAnalysis, Gui::ViewProviderDocumentObjectGroup) ViewProviderFemAnalysis::ViewProviderFemAnalysis() @@ -75,7 +75,7 @@ bool ViewProviderFemAnalysis::doubleClicked(void) std::vector ViewProviderFemAnalysis::claimChildren(void)const { - return static_cast(getObject())->Member.getValues(); + return Gui::ViewProviderDocumentObjectGroup::claimChildren(); } bool ViewProviderFemAnalysis::canDelete(App::DocumentObject* obj) const @@ -91,22 +91,12 @@ std::vector ViewProviderFemAnalysis::getDisplayModes(void) const void ViewProviderFemAnalysis::hide(void) { - Gui::ViewProviderDocumentObject::hide(); - std::vector temp(static_cast - (getObject())->Member.getValues()); - for (auto it : temp) { - Gui::Application::Instance->hideViewProvider(it); - } + Gui::ViewProviderDocumentObjectGroup::hide(); } void ViewProviderFemAnalysis::show(void) { - Gui::ViewProviderDocumentObject::show(); - std::vector temp(static_cast - (getObject())->Member.getValues()); - for (auto it : temp) { - Gui::Application::Instance->showViewProvider(it); - } + Gui::ViewProviderDocumentObjectGroup::show(); } void ViewProviderFemAnalysis::setupContextMenu(QMenu* menu, QObject* , const char* ) @@ -150,7 +140,7 @@ bool ViewProviderFemAnalysis::setEdit(int ModNum) return false; } else { - return Gui::ViewProviderDocumentObject::setEdit(ModNum); + return Gui::ViewProviderDocumentObjectGroup::setEdit(ModNum); } } @@ -161,7 +151,7 @@ void ViewProviderFemAnalysis::unsetEdit(int ModNum) Gui::Control().closeDialog(); } else { - Gui::ViewProviderDocumentObject::unsetEdit(ModNum); + Gui::ViewProviderDocumentObjectGroup::unsetEdit(ModNum); } } @@ -214,15 +204,7 @@ bool ViewProviderFemAnalysis::canDragObject(App::DocumentObject* obj) const void ViewProviderFemAnalysis::dragObject(App::DocumentObject* obj) { - Fem::FemAnalysis* analyze = static_cast(getObject()); - std::vector fem = analyze->Member.getValues(); - for (std::vector::iterator it = fem.begin(); it != fem.end(); ++it) { - if (*it == obj) { - fem.erase(it); - analyze->Member.setValues(fem); - break; - } - } + ViewProviderDocumentObjectGroup::dragObject(obj); } bool ViewProviderFemAnalysis::canDropObjects() const @@ -237,10 +219,7 @@ bool ViewProviderFemAnalysis::canDropObject(App::DocumentObject* obj) const void ViewProviderFemAnalysis::dropObject(App::DocumentObject* obj) { - Fem::FemAnalysis* analyze = static_cast(getObject()); - std::vector fem = analyze->Member.getValues(); - fem.push_back(obj); - analyze->Member.setValues(fem); + ViewProviderDocumentObjectGroup::dropObject(obj); } // Python feature ----------------------------------------------------------------------- diff --git a/src/Mod/Fem/Gui/ViewProviderAnalysis.h b/src/Mod/Fem/Gui/ViewProviderAnalysis.h index 3a958c7ab8..bf86f154bc 100644 --- a/src/Mod/Fem/Gui/ViewProviderAnalysis.h +++ b/src/Mod/Fem/Gui/ViewProviderAnalysis.h @@ -24,14 +24,14 @@ #ifndef FEM_ViewProviderAnalysis_H #define FEM_ViewProviderAnalysis_H -#include +#include #include #include namespace FemGui { -class FemGuiExport ViewProviderFemAnalysis : public Gui::ViewProviderDocumentObject +class FemGuiExport ViewProviderFemAnalysis : public Gui::ViewProviderDocumentObjectGroup { Q_DECLARE_TR_FUNCTIONS(FemGui::ViewProviderFemAnalysis) PROPERTY_HEADER(FemGui::ViewProviderAnalysis); diff --git a/src/Mod/Fem/PyGui/FemCommands.py b/src/Mod/Fem/PyGui/FemCommands.py index 1322851d2d..b96411d66b 100644 --- a/src/Mod/Fem/PyGui/FemCommands.py +++ b/src/Mod/Fem/PyGui/FemCommands.py @@ -78,7 +78,7 @@ class FemCommands(object): def results_present(self): results = False - analysis_members = FemGui.getActiveAnalysis().Member + analysis_members = FemGui.getActiveAnalysis().Group for o in analysis_members: if o.isDerivedFrom('Fem::FemResultObject'): results = True @@ -88,7 +88,7 @@ class FemCommands(object): result_is_in_active_analysis = False sel = FreeCADGui.Selection.getSelection() if len(sel) == 1 and sel[0].isDerivedFrom("Fem::FemResultObject"): - for o in FemGui.getActiveAnalysis().Member: + for o in FemGui.getActiveAnalysis().Group: if o == sel[0]: result_is_in_active_analysis = True break @@ -164,7 +164,7 @@ class FemCommands(object): def analysis_has_solver(self): solver = False - analysis_members = FemGui.getActiveAnalysis().Member + analysis_members = FemGui.getActiveAnalysis().Group for o in analysis_members: if o.isDerivedFrom("Fem::FemSolverObjectPython"): solver = True @@ -175,7 +175,7 @@ class FemCommands(object): def hide_meshes_show_parts_constraints(self): if FreeCAD.GuiUp: - for acnstrmesh in FemGui.getActiveAnalysis().Member: + for acnstrmesh in FemGui.getActiveAnalysis().Group: if "Constraint" in acnstrmesh.TypeId: acnstrmesh.ViewObject.Visibility = True if "Mesh" in acnstrmesh.TypeId: diff --git a/src/Mod/Fem/PyGui/_CommandFemAnalysis.py b/src/Mod/Fem/PyGui/_CommandFemAnalysis.py index c80ca1c7bf..e55469f49f 100644 --- a/src/Mod/Fem/PyGui/_CommandFemAnalysis.py +++ b/src/Mod/Fem/PyGui/_CommandFemAnalysis.py @@ -50,7 +50,7 @@ class _CommandFemAnalysis(FemCommands): FreeCADGui.doCommand("ObjectsFem.makeAnalysis(FreeCAD.ActiveDocument, 'Analysis')") FreeCADGui.doCommand("FemGui.setActiveAnalysis(FreeCAD.ActiveDocument.ActiveObject)") FreeCADGui.doCommand("ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument, 'CalculiX')") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [FreeCAD.ActiveDocument.ActiveObject]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)") FreeCADGui.addCommand('FEM_Analysis', _CommandFemAnalysis()) diff --git a/src/Mod/Fem/PyGui/_CommandFemConstraintSelfWeight.py b/src/Mod/Fem/PyGui/_CommandFemConstraintSelfWeight.py index 8f4fda1e72..3705b25f9d 100644 --- a/src/Mod/Fem/PyGui/_CommandFemConstraintSelfWeight.py +++ b/src/Mod/Fem/PyGui/_CommandFemConstraintSelfWeight.py @@ -46,7 +46,7 @@ class _CommandFemConstraintSelfWeight(FemCommands): def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create FemConstraintSelfWeight") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeConstraintSelfWeight(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeConstraintSelfWeight(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ConstraintSelfWeight', _CommandFemConstraintSelfWeight()) diff --git a/src/Mod/Fem/PyGui/_CommandFemElementFluid1D.py b/src/Mod/Fem/PyGui/_CommandFemElementFluid1D.py index b364e6fb26..00afc1bae2 100644 --- a/src/Mod/Fem/PyGui/_CommandFemElementFluid1D.py +++ b/src/Mod/Fem/PyGui/_CommandFemElementFluid1D.py @@ -47,7 +47,7 @@ class _CommandFemElementFluid1D(FemCommands): def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create FemElementFluid1D") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeElementFluid1D(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeElementFluid1D(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ElementFluid1D', _CommandFemElementFluid1D()) diff --git a/src/Mod/Fem/PyGui/_CommandFemElementGeometry1D.py b/src/Mod/Fem/PyGui/_CommandFemElementGeometry1D.py index a1f19024aa..a3042a3437 100644 --- a/src/Mod/Fem/PyGui/_CommandFemElementGeometry1D.py +++ b/src/Mod/Fem/PyGui/_CommandFemElementGeometry1D.py @@ -46,7 +46,7 @@ class _CommandFemElementGeometry1D(FemCommands): def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create FemElementGeometry1D") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeElementGeometry1D(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeElementGeometry1D(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ElementGeometry1D', _CommandFemElementGeometry1D()) diff --git a/src/Mod/Fem/PyGui/_CommandFemElementGeometry2D.py b/src/Mod/Fem/PyGui/_CommandFemElementGeometry2D.py index 3e7048001e..1b4ccfa3b6 100644 --- a/src/Mod/Fem/PyGui/_CommandFemElementGeometry2D.py +++ b/src/Mod/Fem/PyGui/_CommandFemElementGeometry2D.py @@ -46,7 +46,7 @@ class _CommandFemElementGeometry2D(FemCommands): def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create FemElementGeometry2D") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeElementGeometry2D(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeElementGeometry2D(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_ElementGeometry2D', _CommandFemElementGeometry2D()) diff --git a/src/Mod/Fem/PyGui/_CommandFemMaterialFluid.py b/src/Mod/Fem/PyGui/_CommandFemMaterialFluid.py index 97fb112773..68b1eecd5f 100644 --- a/src/Mod/Fem/PyGui/_CommandFemMaterialFluid.py +++ b/src/Mod/Fem/PyGui/_CommandFemMaterialFluid.py @@ -51,7 +51,7 @@ class _CommandFemMaterialFluid(FemCommands): FreeCAD.ActiveDocument.openTransaction("Create Fluid Material") FreeCADGui.addModule("ObjectsFem") FreeCADGui.doCommand("ObjectsFem.makeMaterialFluid(FreeCAD.ActiveDocument, 'FluidMaterial')") - FreeCADGui.doCommand("FreeCAD.ActiveDocument." + FemGui.getActiveAnalysis().Name + ".Member = FreeCAD.ActiveDocument." + FemGui.getActiveAnalysis().Name + ".Member + [App.ActiveDocument.ActiveObject]") + FreeCADGui.doCommand("FreeCAD.ActiveDocument." + FemGui.getActiveAnalysis().Name + ".addObject(App.ActiveDocument.ActiveObject)") FreeCADGui.doCommand("FreeCADGui.ActiveDocument.setEdit(FreeCAD.ActiveDocument.ActiveObject.Name)") diff --git a/src/Mod/Fem/PyGui/_CommandFemMaterialMechanicalNonlinear.py b/src/Mod/Fem/PyGui/_CommandFemMaterialMechanicalNonlinear.py index 27e8dfea08..fe34e5ef1d 100644 --- a/src/Mod/Fem/PyGui/_CommandFemMaterialMechanicalNonlinear.py +++ b/src/Mod/Fem/PyGui/_CommandFemMaterialMechanicalNonlinear.py @@ -57,7 +57,7 @@ class _CommandFemMaterialMechanicalNonlinear(FemCommands): break if allow_nonlinear_material: string_lin_mat_obj = "FreeCAD.ActiveDocument.getObject('" + lin_mat_obj.Name + "')" - command_to_run = "FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeMaterialMechanicalNonlinear(FreeCAD.ActiveDocument, " + string_lin_mat_obj + ")]" + command_to_run = "FemGui.getActiveAnalysis().addObject(ObjectsFem.makeMaterialMechanicalNonlinear(FreeCAD.ActiveDocument, " + string_lin_mat_obj + "))" FreeCAD.ActiveDocument.openTransaction("Create FemMaterialMechanicalNonlinear") FreeCADGui.addModule("ObjectsFem") FreeCADGui.doCommand(command_to_run) @@ -65,7 +65,7 @@ class _CommandFemMaterialMechanicalNonlinear(FemCommands): # nonlinear material # nonlinear geometry --> its is triggered anyway https://forum.freecadweb.org/viewtopic.php?f=18&t=23101&p=180489#p180489 solver_object = None - for m in FemGui.getActiveAnalysis().Member: + for m in FemGui.getActiveAnalysis().Group: if m.isDerivedFrom('Fem::FemSolverObjectPython'): if not solver_object: solver_object = m diff --git a/src/Mod/Fem/PyGui/_CommandFemMaterialSolid.py b/src/Mod/Fem/PyGui/_CommandFemMaterialSolid.py index 4ca9725f2c..4cafd3579e 100644 --- a/src/Mod/Fem/PyGui/_CommandFemMaterialSolid.py +++ b/src/Mod/Fem/PyGui/_CommandFemMaterialSolid.py @@ -51,7 +51,7 @@ class _CommandFemMaterialSolid(FemCommands): FreeCAD.ActiveDocument.openTransaction("Create Solid Material") FreeCADGui.addModule("ObjectsFem") FreeCADGui.doCommand("ObjectsFem.makeMaterialSolid(FreeCAD.ActiveDocument, 'SolidMaterial')") - FreeCADGui.doCommand("FreeCAD.ActiveDocument." + FemGui.getActiveAnalysis().Name + ".Member = FreeCAD.ActiveDocument." + FemGui.getActiveAnalysis().Name + ".Member + [FreeCAD.ActiveDocument.ActiveObject]") + FreeCADGui.doCommand("FreeCAD.ActiveDocument." + FemGui.getActiveAnalysis().Name + ".addObject(FreeCAD.ActiveDocument.ActiveObject)") FreeCADGui.doCommand("FreeCADGui.ActiveDocument.setEdit(FreeCAD.ActiveDocument.ActiveObject.Name)") diff --git a/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py b/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py index 022dc1e1ad..2a9ab4a3f9 100644 --- a/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py +++ b/src/Mod/Fem/PyGui/_CommandFemMeshGmshFromShape.py @@ -56,7 +56,7 @@ class _CommandFemMeshGmshFromShape(FemCommands): FreeCADGui.doCommand("FreeCAD.ActiveDocument.ActiveObject.Part = FreeCAD.ActiveDocument." + sel[0].Name) if FemGui.getActiveAnalysis(): FreeCADGui.addModule("FemGui") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [FreeCAD.ActiveDocument.ActiveObject]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(FreeCAD.ActiveDocument.ActiveObject)") FreeCADGui.doCommand("Gui.ActiveDocument.setEdit(FreeCAD.ActiveDocument.ActiveObject.Name)") FreeCADGui.Selection.clearSelection() diff --git a/src/Mod/Fem/PyGui/_CommandFemMeshNetgenFromShape.py b/src/Mod/Fem/PyGui/_CommandFemMeshNetgenFromShape.py index 80ba04ea93..7f00bdad10 100644 --- a/src/Mod/Fem/PyGui/_CommandFemMeshNetgenFromShape.py +++ b/src/Mod/Fem/PyGui/_CommandFemMeshNetgenFromShape.py @@ -55,7 +55,7 @@ class _CommandFemMeshNetgenFromShape(FemCommands): FreeCADGui.doCommand("App.ActiveDocument.ActiveObject.Shape = App.activeDocument()." + sel[0].Name) if FemGui.getActiveAnalysis(): FreeCADGui.addModule("FemGui") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [App.ActiveDocument.ActiveObject]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(App.ActiveDocument.ActiveObject)") FreeCADGui.doCommand("Gui.ActiveDocument.setEdit(App.ActiveDocument.ActiveObject.Name)") FreeCADGui.Selection.clearSelection() diff --git a/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py b/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py index 0c83598666..2507a12630 100644 --- a/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py +++ b/src/Mod/Fem/PyGui/_CommandFemSolverCalculix.py @@ -46,7 +46,7 @@ class _CommandFemSolverCalculix(FemCommands): def Activated(self): has_nonlinear_material_obj = False - for m in FemGui.getActiveAnalysis().Member: + for m in FemGui.getActiveAnalysis().Group: if hasattr(m, "Proxy") and m.Proxy.Type == "FemMaterialMechanicalNonlinear": has_nonlinear_material_obj = True FreeCAD.ActiveDocument.openTransaction("Create SolverCalculix") @@ -55,9 +55,9 @@ class _CommandFemSolverCalculix(FemCommands): FreeCADGui.doCommand("solver = ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument)") FreeCADGui.doCommand("solver.GeometricalNonlinearity = 'nonlinear'") FreeCADGui.doCommand("solver.MaterialNonlinearity = 'nonlinear'") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [solver]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(solver)") else: - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverCalculix(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_SolverCalculix', _CommandFemSolverCalculix()) diff --git a/src/Mod/Fem/PyGui/_CommandFemSolverZ88.py b/src/Mod/Fem/PyGui/_CommandFemSolverZ88.py index 5b5c2a7c7b..9a74b35e71 100644 --- a/src/Mod/Fem/PyGui/_CommandFemSolverZ88.py +++ b/src/Mod/Fem/PyGui/_CommandFemSolverZ88.py @@ -46,7 +46,7 @@ class _CommandFemSolverZ88(FemCommands): def Activated(self): FreeCAD.ActiveDocument.openTransaction("Create SolverZ88") FreeCADGui.addModule("ObjectsFem") - FreeCADGui.doCommand("FemGui.getActiveAnalysis().Member = FemGui.getActiveAnalysis().Member + [ObjectsFem.makeSolverZ88(FreeCAD.ActiveDocument)]") + FreeCADGui.doCommand("FemGui.getActiveAnalysis().addObject(ObjectsFem.makeSolverZ88(FreeCAD.ActiveDocument))") FreeCADGui.addCommand('FEM_SolverZ88', _CommandFemSolverZ88()) diff --git a/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py b/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py index 1c345055c8..4f6f53f94c 100644 --- a/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py +++ b/src/Mod/Fem/PyGui/_TaskPanelFemMeshGmsh.py @@ -162,7 +162,7 @@ class _TaskPanelFemMeshGmsh: import FemGui self.analysis = FemGui.getActiveAnalysis() if self.analysis: - for m in FemGui.getActiveAnalysis().Member: + for m in FemGui.getActiveAnalysis().Group: if m.Name == self.mesh_obj.Name: print('Active analysis found: ' + self.analysis.Name) return diff --git a/src/Mod/Fem/PyGui/_TaskPanelFemResultShow.py b/src/Mod/Fem/PyGui/_TaskPanelFemResultShow.py index 3e1805da1c..23e6865c11 100644 --- a/src/Mod/Fem/PyGui/_TaskPanelFemResultShow.py +++ b/src/Mod/Fem/PyGui/_TaskPanelFemResultShow.py @@ -415,7 +415,7 @@ def hide_parts_constraints(): if hide_constraints: for o in FreeCAD.ActiveDocument.Objects: if o.isDerivedFrom('Fem::FemAnalysis'): - for acnstrmesh in FemGui.getActiveAnalysis().Member: + for acnstrmesh in FemGui.getActiveAnalysis().Group: if "Constraint" in acnstrmesh.TypeId: acnstrmesh.ViewObject.Visibility = False break diff --git a/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py b/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py index 5510f57122..90a6f7b946 100644 --- a/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py +++ b/src/Mod/Fem/PyGui/_ViewProviderFemMeshGmsh.py @@ -79,7 +79,7 @@ class _ViewProviderFemMeshGmsh: if found_an_analysis: if FemGui.getActiveAnalysis() is not None: if FemGui.getActiveAnalysis().Document is FreeCAD.ActiveDocument: - if self.Object in FemGui.getActiveAnalysis().Member: + if self.Object in FemGui.getActiveAnalysis().Group: if not gui_doc.getInEdit(): gui_doc.setEdit(vobj.Object.Name) else: @@ -89,7 +89,7 @@ class _ViewProviderFemMeshGmsh: found_mesh_analysis = False for o in gui_doc.Document.Objects: if o.isDerivedFrom('Fem::FemAnalysisPython'): - for m in o.Member: + for m in o.Group: if m == self.Object: found_mesh_analysis = True FemGui.setActiveAnalysis(o) @@ -106,7 +106,7 @@ class _ViewProviderFemMeshGmsh: found_mesh_analysis = False for o in gui_doc.Document.Objects: if o.isDerivedFrom('Fem::FemAnalysisPython'): - for m in o.Member: + for m in o.Group: if m == self.Object: found_mesh_analysis = True FemGui.setActiveAnalysis(o) diff --git a/src/Mod/Fem/PyGui/_ViewProviderFemSolverCalculix.py b/src/Mod/Fem/PyGui/_ViewProviderFemSolverCalculix.py index 2e43aa75d8..a2939f760c 100644 --- a/src/Mod/Fem/PyGui/_ViewProviderFemSolverCalculix.py +++ b/src/Mod/Fem/PyGui/_ViewProviderFemSolverCalculix.py @@ -66,7 +66,7 @@ class _ViewProviderFemSolverCalculix: # may be go the other way around and just activate the analysis the user has doubleClicked on ?! if FemGui.getActiveAnalysis() is not None: if FemGui.getActiveAnalysis().Document is FreeCAD.ActiveDocument: - if self.Object in FemGui.getActiveAnalysis().Member: + if self.Object in FemGui.getActiveAnalysis().Group: doc.setEdit(vobj.Object.Name) else: FreeCAD.Console.PrintError('Activate the analysis this solver belongs to!\n') diff --git a/src/Mod/Fem/PyGui/_ViewProviderFemSolverZ88.py b/src/Mod/Fem/PyGui/_ViewProviderFemSolverZ88.py index 5750e2f757..16e9ff70f0 100644 --- a/src/Mod/Fem/PyGui/_ViewProviderFemSolverZ88.py +++ b/src/Mod/Fem/PyGui/_ViewProviderFemSolverZ88.py @@ -56,7 +56,7 @@ class _ViewProviderFemSolverZ88: # may be go the other way around and just activate the analysis the user has doubleClicked on ?! if FemGui.getActiveAnalysis() is not None: if FemGui.getActiveAnalysis().Document is FreeCAD.ActiveDocument: - if self.Object in FemGui.getActiveAnalysis().Member: + if self.Object in FemGui.getActiveAnalysis().Group: FreeCAD.Console.PrintError('Not yet supported, use property editor and "run analysis" button!\n') # doc.setEdit(vobj.Object.Name) else: diff --git a/src/Mod/Fem/TestFem.py b/src/Mod/Fem/TestFem.py index 820c586311..c286d7a99f 100644 --- a/src/Mod/Fem/TestFem.py +++ b/src/Mod/Fem/TestFem.py @@ -397,7 +397,7 @@ class FemCcxAnalysisTest(unittest.TestCase): solver_object.EigenmodeHighLimit = 1000000.0 solver_object.EigenmodeLowLimit = 0.0 self.assertTrue(solver_object, "FemTest of new solver failed") - analysis.Member = analysis.Member + [solver_object] + analysis.addObject(solver_object) fcc_print('Checking FEM new material...') material_object = ObjectsFem.makeMaterialSolid(self.active_doc, 'MechanicalMaterial') @@ -408,13 +408,13 @@ class FemCcxAnalysisTest(unittest.TestCase): mat['Density'] = "7900 kg/m^3" material_object.Material = mat self.assertTrue(material_object, "FemTest of new material failed") - analysis.Member = analysis.Member + [material_object] + analysis.addObject(material_object) fcc_print('Checking FEM new fixed constraint...') fixed_constraint = self.active_doc.addObject("Fem::ConstraintFixed", "FemConstraintFixed") fixed_constraint.References = [(box, "Face1")] self.assertTrue(fixed_constraint, "FemTest of new fixed constraint failed") - analysis.Member = analysis.Member + [fixed_constraint] + analysis.addObject(fixed_constraint) fcc_print('Checking FEM new force constraint...') force_constraint = self.active_doc.addObject("Fem::ConstraintForce", "FemConstraintForce") @@ -425,7 +425,7 @@ class FemCcxAnalysisTest(unittest.TestCase): force_constraint.Reversed = True self.active_doc.recompute() self.assertTrue(force_constraint, "FemTest of new force constraint failed") - analysis.Member = analysis.Member + [force_constraint] + analysis.addObject(force_constraint) fcc_print('Checking FEM new pressure constraint...') pressure_constraint = self.active_doc.addObject("Fem::ConstraintPressure", "FemConstraintPressure") @@ -433,7 +433,7 @@ class FemCcxAnalysisTest(unittest.TestCase): pressure_constraint.Pressure = 1000.0 pressure_constraint.Reversed = False self.assertTrue(pressure_constraint, "FemTest of new pressure constraint failed") - analysis.Member = analysis.Member + [pressure_constraint] + analysis.addObject(pressure_constraint) fcc_print('Checking FEM new mesh...') from test_files.ccx.cube_mesh import create_nodes_cube, create_elements_cube @@ -445,7 +445,7 @@ class FemCcxAnalysisTest(unittest.TestCase): mesh_object = self.active_doc.addObject('Fem::FemMeshObject', mesh_name) mesh_object.FemMesh = mesh self.assertTrue(mesh, "FemTest of new mesh failed") - analysis.Member = analysis.Member + [mesh_object] + analysis.addObject(mesh_object) self.active_doc.recompute() @@ -570,7 +570,7 @@ class FemCcxAnalysisTest(unittest.TestCase): solver_object.IterationsThermoMechMaximum = 2000 solver_object.IterationsControlParameterTimeUse = True self.assertTrue(solver_object, "FemTest of new solver failed") - analysis.Member = analysis.Member + [solver_object] + analysis.addObject(solver_object) fcc_print('Checking FEM new material...') material_object = ObjectsFem.makeMaterialSolid(self.active_doc, 'MechanicalMaterial') @@ -584,26 +584,26 @@ class FemCcxAnalysisTest(unittest.TestCase): mat['SpecificHeat'] = "500 J/kg/K" # SvdW: Change to Ansys model values material_object.Material = mat self.assertTrue(material_object, "FemTest of new material failed") - analysis.Member = analysis.Member + [material_object] + analysis.addObject(material_object) fcc_print('Checking FEM new fixed constraint...') fixed_constraint = self.active_doc.addObject("Fem::ConstraintFixed", "FemConstraintFixed") fixed_constraint.References = [(box, "Face1")] self.assertTrue(fixed_constraint, "FemTest of new fixed constraint failed") - analysis.Member = analysis.Member + [fixed_constraint] + analysis.addObject(fixed_constraint) fcc_print('Checking FEM new initial temperature constraint...') initialtemperature_constraint = self.active_doc.addObject("Fem::ConstraintInitialTemperature", "FemConstraintInitialTemperature") initialtemperature_constraint.initialTemperature = 300.0 self.assertTrue(initialtemperature_constraint, "FemTest of new initial temperature constraint failed") - analysis.Member = analysis.Member + [initialtemperature_constraint] + analysis.addObject(initialtemperature_constraint) fcc_print('Checking FEM new temperature constraint...') temperature_constraint = self.active_doc.addObject("Fem::ConstraintTemperature", "FemConstraintTemperature") temperature_constraint.References = [(box, "Face1")] temperature_constraint.Temperature = 310.93 self.assertTrue(temperature_constraint, "FemTest of new temperature constraint failed") - analysis.Member = analysis.Member + [temperature_constraint] + analysis.addObject(temperature_constraint) fcc_print('Checking FEM new heatflux constraint...') heatflux_constraint = self.active_doc.addObject("Fem::ConstraintHeatflux", "FemConstraintHeatflux") @@ -611,7 +611,7 @@ class FemCcxAnalysisTest(unittest.TestCase): heatflux_constraint.AmbientTemp = 255.3722 heatflux_constraint.FilmCoef = 5.678 self.assertTrue(heatflux_constraint, "FemTest of new heatflux constraint failed") - analysis.Member = analysis.Member + [heatflux_constraint] + analysis.addObject(heatflux_constraint) fcc_print('Checking FEM new mesh...') from test_files.ccx.spine_mesh import create_nodes_spine, create_elements_spine @@ -623,7 +623,7 @@ class FemCcxAnalysisTest(unittest.TestCase): mesh_object = self.active_doc.addObject('Fem::FemMeshObject', mesh_name) mesh_object.FemMesh = mesh self.assertTrue(mesh, "FemTest of new mesh failed") - analysis.Member = analysis.Member + [mesh_object] + analysis.addObject(mesh_object) self.active_doc.recompute() @@ -724,7 +724,7 @@ class FemCcxAnalysisTest(unittest.TestCase): solver_object.IterationsThermoMechMaximum = 2000 solver_object.IterationsControlParameterTimeUse = False self.assertTrue(solver_object, "FemTest of new solver failed") - analysis.Member = analysis.Member + [solver_object] + analysis.addObject(solver_object) fcc_print('Checking FEM new material...') material_object = ObjectsFem.makeMaterialFluid(self.active_doc, 'FluidMaterial') @@ -737,7 +737,7 @@ class FemCcxAnalysisTest(unittest.TestCase): mat['ThermalConductivity'] = "0.591 W/m/K" material_object.Material = mat self.assertTrue(material_object, "FemTest of new material failed") - analysis.Member = analysis.Member + [material_object] + analysis.addObject(material_object) fcc_print('Checking FEM Flow1D inlet constraint...') Flow1d_inlet = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -746,7 +746,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_inlet.InletPressure = 0.1 Flow1d_inlet.References = [(line, "Edge1")] self.assertTrue(Flow1d_inlet, "FemTest of new Flow1D inlet constraint failed") - analysis.Member = analysis.Member + [Flow1d_inlet] + analysis.addObject(Flow1d_inlet) fcc_print('Checking FEM new Flow1D entrance constraint...') Flow1d_entrance = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -756,7 +756,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_entrance.EntranceArea = 25133.00 Flow1d_entrance.References = [(line, "Edge2")] self.assertTrue(Flow1d_entrance, "FemTest of new Flow1D entrance constraint failed") - analysis.Member = analysis.Member + [Flow1d_entrance] + analysis.addObject(Flow1d_entrance) fcc_print('Checking FEM new Flow1D manning constraint...') Flow1d_manning = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -767,7 +767,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_manning.ManningCoefficient = 0.002 Flow1d_manning.References = [(line, "Edge3"), (line, "Edge5")] self.assertTrue(Flow1d_manning, "FemTest of new Flow1D manning constraint failed") - analysis.Member = analysis.Member + [Flow1d_manning] + analysis.addObject(Flow1d_manning) fcc_print('Checking FEM new Flow1D bend constraint...') Flow1d_bend = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -779,7 +779,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_bend.BendLossCoefficient = 0.4 Flow1d_bend.References = [(line, "Edge4")] self.assertTrue(Flow1d_bend, "FemTest of new Flow1D bend constraint failed") - analysis.Member = analysis.Member + [Flow1d_bend] + analysis.addObject(Flow1d_bend) fcc_print('Checking FEM new Flow1D enlargement constraint...') Flow1d_enlargement = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -789,7 +789,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_enlargement.EnlargeArea2 = 70686.00 Flow1d_enlargement.References = [(line, "Edge6")] self.assertTrue(Flow1d_enlargement, "FemTest of new Flow1D enlargement constraint failed") - analysis.Member = analysis.Member + [Flow1d_enlargement] + analysis.addObject(Flow1d_enlargement) fcc_print('Checking FEM new Flow1D manning constraint...') Flow1d_manning1 = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -800,7 +800,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_manning1.ManningCoefficient = 0.002 Flow1d_manning1.References = [(line, "Edge7")] self.assertTrue(Flow1d_manning1, "FemTest of new Flow1D manning constraint failed") - analysis.Member = analysis.Member + [Flow1d_manning1] + analysis.addObject(Flow1d_manning1) fcc_print('Checking FEM new Flow1D contraction constraint...') Flow1d_contraction = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -810,7 +810,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_contraction.ContractArea2 = 17671 Flow1d_contraction.References = [(line, "Edge8")] self.assertTrue(Flow1d_contraction, "FemTest of new Flow1D contraction constraint failed") - analysis.Member = analysis.Member + [Flow1d_contraction] + analysis.addObject(Flow1d_contraction) fcc_print('Checking FEM new Flow1D manning constraint...') Flow1d_manning2 = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -821,7 +821,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_manning2.ManningCoefficient = 0.002 Flow1d_manning2.References = [(line, "Edge11"), (line, "Edge9")] self.assertTrue(Flow1d_manning2, "FemTest of new Flow1D manning constraint failed") - analysis.Member = analysis.Member + [Flow1d_manning2] + analysis.addObject(Flow1d_manning2) fcc_print('Checking FEM new Flow1D gate valve constraint...') Flow1d_gate_valve = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -831,7 +831,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_gate_valve.GateValveClosingCoeff = 0.5 Flow1d_gate_valve.References = [(line, "Edge10")] self.assertTrue(Flow1d_gate_valve, "FemTest of new Flow1D gate valve constraint failed") - analysis.Member = analysis.Member + [Flow1d_gate_valve] + analysis.addObject(Flow1d_gate_valve) fcc_print('Checking FEM new Flow1D enlargement constraint...') Flow1d_enlargement1 = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -841,7 +841,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_enlargement1.EnlargeArea2 = 1e12 Flow1d_enlargement1.References = [(line, "Edge12")] self.assertTrue(Flow1d_enlargement1, "FemTest of new Flow1D enlargement constraint failed") - analysis.Member = analysis.Member + [Flow1d_enlargement1] + analysis.addObject(Flow1d_enlargement1) fcc_print('Checking FEM Flow1D outlet constraint...') Flow1d_outlet = ObjectsFem.makeElementFluid1D(self.active_doc, "ElementFluid1D") @@ -850,7 +850,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_outlet.OutletPressure = 0.1 Flow1d_outlet.References = [(line, "Edge13")] self.assertTrue(Flow1d_outlet, "FemTest of new Flow1D inlet constraint failed") - analysis.Member = analysis.Member + [Flow1d_outlet] + analysis.addObject(Flow1d_outlet) fcc_print('Checking FEM self weight constraint...') Flow1d_self_weight = ObjectsFem.makeConstraintSelfWeight(self.active_doc, "ConstraintSelfWeight") @@ -858,7 +858,7 @@ class FemCcxAnalysisTest(unittest.TestCase): Flow1d_self_weight.Gravity_y = 0.0 Flow1d_self_weight.Gravity_z = -1.0 self.assertTrue(Flow1d_outlet, "FemTest of new Flow1D self weight constraint failed") - analysis.Member = analysis.Member + [Flow1d_self_weight] + analysis.addObject(Flow1d_self_weight) fcc_print('Checking FEM new mesh...') from test_files.ccx.Flow1D_mesh import create_nodes_Flow1D, create_elements_Flow1D @@ -870,7 +870,7 @@ class FemCcxAnalysisTest(unittest.TestCase): mesh_object = self.active_doc.addObject('Fem::FemMeshObject', mesh_name) mesh_object.FemMesh = mesh self.assertTrue(mesh, "FemTest of new mesh failed") - analysis.Member = analysis.Member + [mesh_object] + analysis.addObject(mesh_object) self.active_doc.recompute() diff --git a/src/Mod/Fem/importCcxFrdResults.py b/src/Mod/Fem/importCcxFrdResults.py index 1101821589..f92668867c 100644 --- a/src/Mod/Fem/importCcxFrdResults.py +++ b/src/Mod/Fem/importCcxFrdResults.py @@ -101,7 +101,7 @@ def importFrd(filename, analysis=None, result_name_prefix=None): results.Mesh = result_mesh_object results = importToolsFem.fill_femresult_mechanical(results, result_set, span) if analysis: - analysis_object.Member = analysis_object.Member + [results] + analysis_object.addObject(results) if FreeCAD.GuiUp: if analysis: diff --git a/src/Mod/Fem/importVTKResults.py b/src/Mod/Fem/importVTKResults.py index f087eb4267..0ce09319b0 100644 --- a/src/Mod/Fem/importVTKResults.py +++ b/src/Mod/Fem/importVTKResults.py @@ -91,7 +91,7 @@ def importVTK(filename, analysis=None, result_name_prefix=None): result_obj.DisplacementLengths = importToolsFem.calculate_disp_abs(result_obj.DisplacementVectors) if analysis: - analysis_object.Member = analysis_object.Member + [result_obj] + analysis_object.addObject(result_obj) ''' seams not used at the moment filenamebase = '.'.join(filename.split('.')[:-1]) # pattern: filebase_timestamp.vtk diff --git a/src/Mod/Fem/importZ88O2Results.py b/src/Mod/Fem/importZ88O2Results.py index 8c3db0c206..11b1a00518 100644 --- a/src/Mod/Fem/importZ88O2Results.py +++ b/src/Mod/Fem/importZ88O2Results.py @@ -99,7 +99,7 @@ def import_z88_disp(filename, analysis=None, result_name_prefix=None): results.Mesh = result_mesh_object results = importToolsFem.fill_femresult_mechanical(results, result_set, 0) if analysis: - analysis_object.Member = analysis_object.Member + [results] + analysis_object.addObject(results) if FreeCAD.GuiUp: if analysis: