FEM: utils, get rid of duplicate defs
This commit is contained in:
committed by
Yorik van Havre
parent
57b9eddfb0
commit
4d345e1853
@@ -121,7 +121,7 @@ class Results(run.Results):
|
||||
|
||||
def purge_results(self):
|
||||
for m in FemUtils.getMember(self.analysis, "Fem::FemResultObject"):
|
||||
if FemUtils.isOfType(m.Mesh, "Fem::FemMeshResult"):
|
||||
if FemUtils.is_of_type(m.Mesh, "Fem::FemMeshResult"):
|
||||
self.analysis.Document.removeObject(m.Mesh.Name)
|
||||
self.analysis.Document.removeObject(m.Name)
|
||||
App.ActiveDocument.recompute()
|
||||
|
||||
@@ -46,7 +46,7 @@ class Check(run.Check):
|
||||
|
||||
def checkMeshType(self):
|
||||
mesh = FemUtils.getSingleMember(self.analysis, "Fem::FemMeshObject")
|
||||
if not FemUtils.isOfType(mesh, "Fem::FemMeshGmsh"):
|
||||
if not FemUtils.is_of_type(mesh, "Fem::FemMeshGmsh"):
|
||||
self.report.error(
|
||||
"Unsupported type of mesh. "
|
||||
"Mesh must be created with gmsh.")
|
||||
|
||||
@@ -197,7 +197,7 @@ class Writer(object):
|
||||
def _handleHeat(self):
|
||||
activeIn = []
|
||||
for equation in self.solver.Group:
|
||||
if FemUtils.isOfType(equation, "Fem::FemEquationElmerHeat"):
|
||||
if FemUtils.is_of_type(equation, "Fem::FemEquationElmerHeat"):
|
||||
if equation.References:
|
||||
activeIn = equation.References[0][1]
|
||||
else:
|
||||
@@ -297,7 +297,7 @@ class Writer(object):
|
||||
def _handleElectrostatic(self):
|
||||
activeIn = []
|
||||
for equation in self.solver.Group:
|
||||
if FemUtils.isOfType(equation, "Fem::FemEquationElmerElectrostatic"):
|
||||
if FemUtils.is_of_type(equation, "Fem::FemEquationElmerElectrostatic"):
|
||||
if equation.References:
|
||||
activeIn = equation.References[0][1]
|
||||
else:
|
||||
@@ -361,7 +361,7 @@ class Writer(object):
|
||||
def _handleFluxsolver(self):
|
||||
activeIn = []
|
||||
for equation in self.solver.Group:
|
||||
if FemUtils.isOfType(equation, "Fem::FemEquationElmerFluxsolver"):
|
||||
if FemUtils.is_of_type(equation, "Fem::FemEquationElmerFluxsolver"):
|
||||
if equation.References:
|
||||
activeIn = equation.References[0][1]
|
||||
else:
|
||||
@@ -382,7 +382,7 @@ class Writer(object):
|
||||
def _handleElasticity(self):
|
||||
activeIn = []
|
||||
for equation in self.solver.Group:
|
||||
if FemUtils.isOfType(equation, "Fem::FemEquationElmerElasticity"):
|
||||
if FemUtils.is_of_type(equation, "Fem::FemEquationElmerElasticity"):
|
||||
if equation.References:
|
||||
activeIn = equation.References[0][1]
|
||||
else:
|
||||
@@ -540,7 +540,7 @@ class Writer(object):
|
||||
def _handleFlow(self):
|
||||
activeIn = []
|
||||
for equation in self.solver.Group:
|
||||
if FemUtils.isOfType(equation, "Fem::FemEquationElmerFlow"):
|
||||
if FemUtils.is_of_type(equation, "Fem::FemEquationElmerFlow"):
|
||||
if equation.References:
|
||||
activeIn = equation.References[0][1]
|
||||
else:
|
||||
|
||||
@@ -284,10 +284,10 @@ class Check(BaseTask):
|
||||
|
||||
def checkSupported(self, allSupported):
|
||||
for m in self.analysis.Group:
|
||||
if FemUtils.isOfType(m, "Fem::Constraint"):
|
||||
if FemUtils.is_of_type(m, "Fem::Constraint"):
|
||||
supported = False
|
||||
for sc in allSupported:
|
||||
if FemUtils.isOfType(m, *sc):
|
||||
if FemUtils.is_of_type(m, *sc):
|
||||
supported = True
|
||||
if not supported:
|
||||
self.report.warning(
|
||||
|
||||
@@ -135,7 +135,7 @@ class Results(run.Results):
|
||||
|
||||
def purge_results(self):
|
||||
for m in FemUtils.getMember(self.analysis, "Fem::FemResultObject"):
|
||||
if FemUtils.isOfType(m.Mesh, "Fem::FemMeshResult"):
|
||||
if FemUtils.is_of_type(m.Mesh, "Fem::FemMeshResult"):
|
||||
self.analysis.Document.removeObject(m.Mesh.Name)
|
||||
self.analysis.Document.removeObject(m.Name)
|
||||
App.ActiveDocument.recompute()
|
||||
|
||||
@@ -211,53 +211,53 @@ class FemObject(unittest.TestCase):
|
||||
def test_femobjects_derivedfromfem(self):
|
||||
doc = self.active_doc
|
||||
|
||||
from femtools.femutils import isDerivedFrom as isDerivedFromFem
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeAnalysis(doc), 'Fem::FemAnalysis'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintBearing(doc), 'Fem::ConstraintBearing'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintBodyHeatSource(doc), 'Fem::ConstraintBodyHeatSource'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintContact(doc), 'Fem::ConstraintContact'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintDisplacement(doc), 'Fem::ConstraintDisplacement'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintElectrostaticPotential(doc), 'Fem::ConstraintElectrostaticPotential'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintFixed(doc), 'Fem::ConstraintFixed'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintFlowVelocity(doc), 'Fem::ConstraintFlowVelocity'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintFluidBoundary(doc), 'Fem::ConstraintFluidBoundary'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintForce(doc), 'Fem::ConstraintForce'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintGear(doc), 'Fem::ConstraintGear'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintHeatflux(doc), 'Fem::ConstraintHeatflux'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintInitialFlowVelocity(doc), 'Fem::ConstraintInitialFlowVelocity'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintInitialTemperature(doc), 'Fem::ConstraintInitialTemperature'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintPlaneRotation(doc), 'Fem::ConstraintPlaneRotation'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintPressure(doc), 'Fem::ConstraintPressure'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintPulley(doc), 'Fem::ConstraintPulley'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintSelfWeight(doc), 'Fem::ConstraintSelfWeight'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintTemperature(doc), 'Fem::ConstraintTemperature'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeConstraintTransform(doc), 'Fem::ConstraintTransform'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeElementFluid1D(doc), 'Fem::FemElementFluid1D'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeElementGeometry1D(doc), 'Fem::FemElementGeometry1D'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeElementGeometry2D(doc), 'Fem::FemElementGeometry2D'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeElementRotation1D(doc), 'Fem::FemElementRotation1D'))
|
||||
from femtools.femutils import is_derived_from
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeAnalysis(doc), 'Fem::FemAnalysis'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintBearing(doc), 'Fem::ConstraintBearing'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintBodyHeatSource(doc), 'Fem::ConstraintBodyHeatSource'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintContact(doc), 'Fem::ConstraintContact'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintDisplacement(doc), 'Fem::ConstraintDisplacement'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintElectrostaticPotential(doc), 'Fem::ConstraintElectrostaticPotential'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintFixed(doc), 'Fem::ConstraintFixed'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintFlowVelocity(doc), 'Fem::ConstraintFlowVelocity'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintFluidBoundary(doc), 'Fem::ConstraintFluidBoundary'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintForce(doc), 'Fem::ConstraintForce'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintGear(doc), 'Fem::ConstraintGear'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintHeatflux(doc), 'Fem::ConstraintHeatflux'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintInitialFlowVelocity(doc), 'Fem::ConstraintInitialFlowVelocity'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintInitialTemperature(doc), 'Fem::ConstraintInitialTemperature'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintPlaneRotation(doc), 'Fem::ConstraintPlaneRotation'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintPressure(doc), 'Fem::ConstraintPressure'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintPulley(doc), 'Fem::ConstraintPulley'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintSelfWeight(doc), 'Fem::ConstraintSelfWeight'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintTemperature(doc), 'Fem::ConstraintTemperature'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeConstraintTransform(doc), 'Fem::ConstraintTransform'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeElementFluid1D(doc), 'Fem::FemElementFluid1D'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeElementGeometry1D(doc), 'Fem::FemElementGeometry1D'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeElementGeometry2D(doc), 'Fem::FemElementGeometry2D'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeElementRotation1D(doc), 'Fem::FemElementRotation1D'))
|
||||
materialsolid = ObjectsFem.makeMaterialSolid(doc)
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMaterialFluid(doc), 'Fem::Material'))
|
||||
self.assertTrue(isDerivedFromFem(materialsolid, 'Fem::Material'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMaterialMechanicalNonlinear(doc, materialsolid), 'Fem::MaterialMechanicalNonlinear'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMaterialFluid(doc), 'Fem::Material'))
|
||||
self.assertTrue(is_derived_from(materialsolid, 'Fem::Material'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMaterialMechanicalNonlinear(doc, materialsolid), 'Fem::MaterialMechanicalNonlinear'))
|
||||
mesh = ObjectsFem.makeMeshGmsh(doc)
|
||||
self.assertTrue(isDerivedFromFem(mesh, 'Fem::FemMeshGmsh'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMeshBoundaryLayer(doc, mesh), 'Fem::FemMeshBoundaryLayer'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMeshGroup(doc, mesh), 'Fem::FemMeshGroup'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMeshRegion(doc, mesh), 'Fem::FemMeshRegion'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMeshNetgen(doc), 'Fem::FemMeshShapeNetgenObject'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeMeshResult(doc), 'Fem::FemMeshResult'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeResultMechanical(doc), 'Fem::FemResultMechanical'))
|
||||
self.assertTrue(is_derived_from(mesh, 'Fem::FemMeshGmsh'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMeshBoundaryLayer(doc, mesh), 'Fem::FemMeshBoundaryLayer'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMeshGroup(doc, mesh), 'Fem::FemMeshGroup'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMeshRegion(doc, mesh), 'Fem::FemMeshRegion'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMeshNetgen(doc), 'Fem::FemMeshShapeNetgenObject'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeMeshResult(doc), 'Fem::FemMeshResult'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeResultMechanical(doc), 'Fem::FemResultMechanical'))
|
||||
solverelmer = ObjectsFem.makeSolverElmer(doc)
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverCalculixCcxTools(doc), 'Fem::FemSolverCalculixCcxTools'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverCalculix(doc), 'Fem::FemSolverObjectCalculix'))
|
||||
self.assertTrue(isDerivedFromFem(solverelmer, 'Fem::FemSolverObjectElmer'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeSolverZ88(doc), 'Fem::FemSolverObjectZ88'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeEquationElasticity(doc, solverelmer), 'Fem::FemEquationElmerElasticity'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeEquationElectrostatic(doc, solverelmer), 'Fem::FemEquationElmerElectrostatic'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeEquationFlow(doc, solverelmer), 'Fem::FemEquationElmerFlow'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeEquationFluxsolver(doc, solverelmer), 'Fem::FemEquationElmerFluxsolver'))
|
||||
self.assertTrue(isDerivedFromFem(ObjectsFem.makeEquationHeat(doc, solverelmer), 'Fem::FemEquationElmerHeat'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeSolverCalculixCcxTools(doc), 'Fem::FemSolverCalculixCcxTools'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeSolverCalculix(doc), 'Fem::FemSolverObjectCalculix'))
|
||||
self.assertTrue(is_derived_from(solverelmer, 'Fem::FemSolverObjectElmer'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeSolverZ88(doc), 'Fem::FemSolverObjectZ88'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeEquationElasticity(doc, solverelmer), 'Fem::FemEquationElmerElasticity'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeEquationElectrostatic(doc, solverelmer), 'Fem::FemEquationElmerElectrostatic'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeEquationFlow(doc, solverelmer), 'Fem::FemEquationElmerFlow'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeEquationFluxsolver(doc, solverelmer), 'Fem::FemEquationElmerFluxsolver'))
|
||||
self.assertTrue(is_derived_from(ObjectsFem.makeEquationHeat(doc, solverelmer), 'Fem::FemEquationElmerHeat'))
|
||||
# is = 43 (just copy in empty file to test)
|
||||
|
||||
def test_femobjects_derivedfromstd(self):
|
||||
|
||||
@@ -60,13 +60,13 @@ def _searchGroups(member, objs):
|
||||
return False
|
||||
|
||||
|
||||
# typeID and object type defs used in Elmer
|
||||
# collect analyis members used in Elmer
|
||||
def getMember(analysis, t):
|
||||
if analysis is None:
|
||||
raise ValueError("Analysis must not be None")
|
||||
matching = []
|
||||
for m in analysis.Group:
|
||||
if isDerivedFrom(m, t):
|
||||
if is_derived_from(m, t):
|
||||
matching.append(m)
|
||||
return matching
|
||||
|
||||
@@ -76,20 +76,7 @@ def getSingleMember(analysis, t):
|
||||
return objs[0] if objs else None
|
||||
|
||||
|
||||
def isOfType(obj, t):
|
||||
if hasattr(obj, "Proxy") and hasattr(obj.Proxy, "Type"):
|
||||
return obj.Proxy.Type == t
|
||||
return obj.TypeId == t
|
||||
|
||||
|
||||
def isDerivedFrom(obj, t):
|
||||
if (hasattr(obj, "Proxy") and hasattr(obj.Proxy, "Type") and
|
||||
obj.Proxy.Type == t):
|
||||
return True
|
||||
return obj.isDerivedFrom(t)
|
||||
|
||||
|
||||
# typeID and object type defs ATM not used in FEM solver writer modules
|
||||
# typeID and object type defs
|
||||
def type_of_obj(obj):
|
||||
'''returns objects TypeId (C++ objects) or Proxy.Type (Python objects)'''
|
||||
if hasattr(obj, "Proxy") and hasattr(obj.Proxy, "Type"):
|
||||
@@ -99,9 +86,21 @@ def type_of_obj(obj):
|
||||
|
||||
def is_of_type(obj, ty):
|
||||
'''returns True if an object is of a given TypeId (C++ objects) or Proxy.Type (Python Features)'''
|
||||
# only returns true if the exact TypeId is given.
|
||||
# For FeaturPythons the Proxy.Type has to be given. Keep in mind the TypeId for them is the TypeId from the C++ father class
|
||||
return type_of_obj(obj) == ty
|
||||
|
||||
|
||||
def is_derived_from(obj, t):
|
||||
'''returns True if an object or its inheritance chain is of a given TypeId (C++ objects) or Proxy.Type (Python objects)'''
|
||||
# returns true for all FEM objects if given t == 'App::DocumentObject' since this is a father of the given object
|
||||
# see https://forum.freecadweb.org/viewtopic.php?f=10&t=32625
|
||||
if (hasattr(obj, "Proxy") and hasattr(obj.Proxy, "Type") and
|
||||
obj.Proxy.Type == t):
|
||||
return True
|
||||
return obj.isDerivedFrom(t)
|
||||
|
||||
|
||||
def getBoundBoxOfAllDocumentShapes(doc):
|
||||
overalboundbox = None
|
||||
for o in doc.Objects:
|
||||
|
||||
Reference in New Issue
Block a user