def print_obj_info(obj, log=False): if log is False: FreeCAD.Console.PrintMessage("{}:\n".format(obj.Label)) FreeCAD.Console.PrintMessage(" Type: {}, Name: {}\n".format( type_of_obj(obj), obj.Name)) else: FreeCAD.Console.PrintLog("{}:\n".format(obj.Label)) FreeCAD.Console.PrintLog(" Type: {}, Name: {}\n".format( type_of_obj(obj), obj.Name))
def compare_cpp_objs( self, doc ): from femtools.femutils import type_of_obj self.assertEqual( "Fem::FemAnalysis", type_of_obj(doc.Analysis) )
def test_femobjects_type(self): doc = self.active_doc from femtools.femutils import type_of_obj self.assertEqual('Fem::FemAnalysis', type_of_obj(ObjectsFem.makeAnalysis(doc))) self.assertEqual('Fem::ConstraintBearing', type_of_obj(ObjectsFem.makeConstraintBearing(doc))) self.assertEqual('Fem::ConstraintBodyHeatSource', type_of_obj(ObjectsFem.makeConstraintBodyHeatSource(doc))) self.assertEqual('Fem::ConstraintContact', type_of_obj(ObjectsFem.makeConstraintContact(doc))) self.assertEqual('Fem::ConstraintDisplacement', type_of_obj(ObjectsFem.makeConstraintDisplacement(doc))) self.assertEqual('Fem::ConstraintElectrostaticPotential', type_of_obj(ObjectsFem.makeConstraintElectrostaticPotential(doc))) self.assertEqual('Fem::ConstraintFixed', type_of_obj(ObjectsFem.makeConstraintFixed(doc))) self.assertEqual('Fem::ConstraintFlowVelocity', type_of_obj(ObjectsFem.makeConstraintFlowVelocity(doc))) self.assertEqual('Fem::ConstraintFluidBoundary', type_of_obj(ObjectsFem.makeConstraintFluidBoundary(doc))) self.assertEqual('Fem::ConstraintForce', type_of_obj(ObjectsFem.makeConstraintForce(doc))) self.assertEqual('Fem::ConstraintGear', type_of_obj(ObjectsFem.makeConstraintGear(doc))) self.assertEqual('Fem::ConstraintHeatflux', type_of_obj(ObjectsFem.makeConstraintHeatflux(doc))) self.assertEqual('Fem::ConstraintInitialFlowVelocity', type_of_obj(ObjectsFem.makeConstraintInitialFlowVelocity(doc))) self.assertEqual('Fem::ConstraintInitialTemperature', type_of_obj(ObjectsFem.makeConstraintInitialTemperature(doc))) self.assertEqual('Fem::ConstraintPlaneRotation', type_of_obj(ObjectsFem.makeConstraintPlaneRotation(doc))) self.assertEqual('Fem::ConstraintPressure', type_of_obj(ObjectsFem.makeConstraintPressure(doc))) self.assertEqual('Fem::ConstraintPulley', type_of_obj(ObjectsFem.makeConstraintPulley(doc))) self.assertEqual('Fem::ConstraintSelfWeight', type_of_obj(ObjectsFem.makeConstraintSelfWeight(doc))) self.assertEqual('Fem::ConstraintTemperature', type_of_obj(ObjectsFem.makeConstraintTemperature(doc))) self.assertEqual('Fem::ConstraintTransform', type_of_obj(ObjectsFem.makeConstraintTransform(doc))) self.assertEqual('Fem::FemElementFluid1D', type_of_obj(ObjectsFem.makeElementFluid1D(doc))) self.assertEqual('Fem::FemElementGeometry1D', type_of_obj(ObjectsFem.makeElementGeometry1D(doc))) self.assertEqual('Fem::FemElementGeometry2D', type_of_obj(ObjectsFem.makeElementGeometry2D(doc))) self.assertEqual('Fem::FemElementRotation1D', type_of_obj(ObjectsFem.makeElementRotation1D(doc))) materialsolid = ObjectsFem.makeMaterialSolid(doc) self.assertEqual('Fem::Material', type_of_obj(ObjectsFem.makeMaterialFluid(doc))) self.assertEqual('Fem::Material', type_of_obj(materialsolid)) self.assertEqual('Fem::MaterialMechanicalNonlinear', type_of_obj(ObjectsFem.makeMaterialMechanicalNonlinear(doc, materialsolid))) mesh = ObjectsFem.makeMeshGmsh(doc) self.assertEqual('Fem::FemMeshGmsh', type_of_obj(mesh)) self.assertEqual('Fem::FemMeshBoundaryLayer', type_of_obj(ObjectsFem.makeMeshBoundaryLayer(doc, mesh))) self.assertEqual('Fem::FemMeshGroup', type_of_obj(ObjectsFem.makeMeshGroup(doc, mesh))) self.assertEqual('Fem::FemMeshRegion', type_of_obj(ObjectsFem.makeMeshRegion(doc, mesh))) self.assertEqual('Fem::FemMeshShapeNetgenObject', type_of_obj(ObjectsFem.makeMeshNetgen(doc))) self.assertEqual('Fem::FemMeshResult', type_of_obj(ObjectsFem.makeMeshResult(doc))) self.assertEqual('Fem::FemResultMechanical', type_of_obj(ObjectsFem.makeResultMechanical(doc))) solverelmer = ObjectsFem.makeSolverElmer(doc) self.assertEqual('Fem::FemSolverCalculixCcxTools', type_of_obj(ObjectsFem.makeSolverCalculixCcxTools(doc))) self.assertEqual('Fem::FemSolverObjectCalculix', type_of_obj(ObjectsFem.makeSolverCalculix(doc))) self.assertEqual('Fem::FemSolverObjectElmer', type_of_obj(solverelmer)) self.assertEqual('Fem::FemSolverObjectZ88', type_of_obj(ObjectsFem.makeSolverZ88(doc))) self.assertEqual('Fem::FemEquationElmerElasticity', type_of_obj(ObjectsFem.makeEquationElasticity(doc, solverelmer))) self.assertEqual('Fem::FemEquationElmerElectrostatic', type_of_obj(ObjectsFem.makeEquationElectrostatic(doc, solverelmer))) self.assertEqual('Fem::FemEquationElmerFlow', type_of_obj(ObjectsFem.makeEquationFlow(doc, solverelmer))) self.assertEqual('Fem::FemEquationElmerFluxsolver', type_of_obj(ObjectsFem.makeEquationFluxsolver(doc, solverelmer))) self.assertEqual('Fem::FemEquationElmerHeat', type_of_obj(ObjectsFem.makeEquationHeat(doc, solverelmer)))
def test_femobjects_type(self): doc = self.active_doc from femtools.femutils import type_of_obj self.assertEqual('Fem::FemAnalysis', type_of_obj(ObjectsFem.makeAnalysis(doc))) self.assertEqual('Fem::ConstraintBearing', type_of_obj(ObjectsFem.makeConstraintBearing(doc))) self.assertEqual( 'Fem::ConstraintBodyHeatSource', type_of_obj(ObjectsFem.makeConstraintBodyHeatSource(doc))) self.assertEqual('Fem::ConstraintContact', type_of_obj(ObjectsFem.makeConstraintContact(doc))) self.assertEqual( 'Fem::ConstraintDisplacement', type_of_obj(ObjectsFem.makeConstraintDisplacement(doc))) self.assertEqual( 'Fem::ConstraintElectrostaticPotential', type_of_obj(ObjectsFem.makeConstraintElectrostaticPotential(doc))) self.assertEqual('Fem::ConstraintFixed', type_of_obj(ObjectsFem.makeConstraintFixed(doc))) self.assertEqual( 'Fem::ConstraintFlowVelocity', type_of_obj(ObjectsFem.makeConstraintFlowVelocity(doc))) self.assertEqual( 'Fem::ConstraintFluidBoundary', type_of_obj(ObjectsFem.makeConstraintFluidBoundary(doc))) self.assertEqual('Fem::ConstraintForce', type_of_obj(ObjectsFem.makeConstraintForce(doc))) self.assertEqual('Fem::ConstraintGear', type_of_obj(ObjectsFem.makeConstraintGear(doc))) self.assertEqual('Fem::ConstraintHeatflux', type_of_obj(ObjectsFem.makeConstraintHeatflux(doc))) self.assertEqual( 'Fem::ConstraintInitialFlowVelocity', type_of_obj(ObjectsFem.makeConstraintInitialFlowVelocity(doc))) self.assertEqual( 'Fem::ConstraintInitialTemperature', type_of_obj(ObjectsFem.makeConstraintInitialTemperature(doc))) self.assertEqual( 'Fem::ConstraintPlaneRotation', type_of_obj(ObjectsFem.makeConstraintPlaneRotation(doc))) self.assertEqual('Fem::ConstraintPressure', type_of_obj(ObjectsFem.makeConstraintPressure(doc))) self.assertEqual('Fem::ConstraintPulley', type_of_obj(ObjectsFem.makeConstraintPulley(doc))) self.assertEqual('Fem::ConstraintSelfWeight', type_of_obj(ObjectsFem.makeConstraintSelfWeight(doc))) self.assertEqual( 'Fem::ConstraintTemperature', type_of_obj(ObjectsFem.makeConstraintTemperature(doc))) self.assertEqual('Fem::ConstraintTransform', type_of_obj(ObjectsFem.makeConstraintTransform(doc))) self.assertEqual('Fem::FemElementFluid1D', type_of_obj(ObjectsFem.makeElementFluid1D(doc))) self.assertEqual('Fem::FemElementGeometry1D', type_of_obj(ObjectsFem.makeElementGeometry1D(doc))) self.assertEqual('Fem::FemElementGeometry2D', type_of_obj(ObjectsFem.makeElementGeometry2D(doc))) self.assertEqual('Fem::FemElementRotation1D', type_of_obj(ObjectsFem.makeElementRotation1D(doc))) materialsolid = ObjectsFem.makeMaterialSolid(doc) self.assertEqual('Fem::Material', type_of_obj(ObjectsFem.makeMaterialFluid(doc))) self.assertEqual('Fem::Material', type_of_obj(materialsolid)) self.assertEqual( 'Fem::MaterialMechanicalNonlinear', type_of_obj( ObjectsFem.makeMaterialMechanicalNonlinear(doc, materialsolid))) self.assertEqual('Fem::MaterialReinforced', type_of_obj(ObjectsFem.makeMaterialReinforced(doc))) mesh = ObjectsFem.makeMeshGmsh(doc) self.assertEqual('Fem::FemMeshGmsh', type_of_obj(mesh)) self.assertEqual( 'Fem::FemMeshBoundaryLayer', type_of_obj(ObjectsFem.makeMeshBoundaryLayer(doc, mesh))) self.assertEqual('Fem::FemMeshGroup', type_of_obj(ObjectsFem.makeMeshGroup(doc, mesh))) self.assertEqual('Fem::FemMeshRegion', type_of_obj(ObjectsFem.makeMeshRegion(doc, mesh))) self.assertEqual('Fem::FemMeshShapeNetgenObject', type_of_obj(ObjectsFem.makeMeshNetgen(doc))) self.assertEqual('Fem::FemMeshResult', type_of_obj(ObjectsFem.makeMeshResult(doc))) self.assertEqual('Fem::FemResultMechanical', type_of_obj(ObjectsFem.makeResultMechanical(doc))) solverelmer = ObjectsFem.makeSolverElmer(doc) self.assertEqual( 'Fem::FemSolverCalculixCcxTools', type_of_obj(ObjectsFem.makeSolverCalculixCcxTools(doc))) self.assertEqual('Fem::FemSolverObjectCalculix', type_of_obj(ObjectsFem.makeSolverCalculix(doc))) self.assertEqual('Fem::FemSolverObjectElmer', type_of_obj(solverelmer)) self.assertEqual('Fem::FemSolverObjectZ88', type_of_obj(ObjectsFem.makeSolverZ88(doc))) self.assertEqual( 'Fem::FemEquationElmerElasticity', type_of_obj(ObjectsFem.makeEquationElasticity(doc, solverelmer))) self.assertEqual( 'Fem::FemEquationElmerElectrostatic', type_of_obj(ObjectsFem.makeEquationElectrostatic(doc, solverelmer))) self.assertEqual( 'Fem::FemEquationElmerFlow', type_of_obj(ObjectsFem.makeEquationFlow(doc, solverelmer))) self.assertEqual( 'Fem::FemEquationElmerFluxsolver', type_of_obj(ObjectsFem.makeEquationFluxsolver(doc, solverelmer))) self.assertEqual( 'Fem::FemEquationElmerHeat', type_of_obj(ObjectsFem.makeEquationHeat(doc, solverelmer)))
def test_femobjects_type(self): doc = self.active_doc from femtools.femutils import type_of_obj self.assertEqual("Fem::FemAnalysis", type_of_obj(ObjectsFem.makeAnalysis(doc))) self.assertEqual("Fem::ConstraintBearing", type_of_obj(ObjectsFem.makeConstraintBearing(doc))) self.assertEqual( "Fem::ConstraintBodyHeatSource", type_of_obj(ObjectsFem.makeConstraintBodyHeatSource(doc))) self.assertEqual("Fem::ConstraintContact", type_of_obj(ObjectsFem.makeConstraintContact(doc))) self.assertEqual( "Fem::ConstraintDisplacement", type_of_obj(ObjectsFem.makeConstraintDisplacement(doc))) self.assertEqual( "Fem::ConstraintElectrostaticPotential", type_of_obj(ObjectsFem.makeConstraintElectrostaticPotential(doc))) self.assertEqual("Fem::ConstraintFixed", type_of_obj(ObjectsFem.makeConstraintFixed(doc))) self.assertEqual( "Fem::ConstraintFlowVelocity", type_of_obj(ObjectsFem.makeConstraintFlowVelocity(doc))) self.assertEqual( "Fem::ConstraintFluidBoundary", type_of_obj(ObjectsFem.makeConstraintFluidBoundary(doc))) self.assertEqual("Fem::ConstraintForce", type_of_obj(ObjectsFem.makeConstraintForce(doc))) self.assertEqual("Fem::ConstraintGear", type_of_obj(ObjectsFem.makeConstraintGear(doc))) self.assertEqual("Fem::ConstraintHeatflux", type_of_obj(ObjectsFem.makeConstraintHeatflux(doc))) self.assertEqual( "Fem::ConstraintInitialFlowVelocity", type_of_obj(ObjectsFem.makeConstraintInitialFlowVelocity(doc))) self.assertEqual( "Fem::ConstraintInitialTemperature", type_of_obj(ObjectsFem.makeConstraintInitialTemperature(doc))) self.assertEqual( "Fem::ConstraintPlaneRotation", type_of_obj(ObjectsFem.makeConstraintPlaneRotation(doc))) self.assertEqual("Fem::ConstraintPressure", type_of_obj(ObjectsFem.makeConstraintPressure(doc))) self.assertEqual("Fem::ConstraintPulley", type_of_obj(ObjectsFem.makeConstraintPulley(doc))) self.assertEqual("Fem::ConstraintSelfWeight", type_of_obj(ObjectsFem.makeConstraintSelfWeight(doc))) self.assertEqual( "Fem::ConstraintTemperature", type_of_obj(ObjectsFem.makeConstraintTemperature(doc))) self.assertEqual("Fem::ConstraintTransform", type_of_obj(ObjectsFem.makeConstraintTransform(doc))) self.assertEqual("Fem::FemElementFluid1D", type_of_obj(ObjectsFem.makeElementFluid1D(doc))) self.assertEqual("Fem::FemElementGeometry1D", type_of_obj(ObjectsFem.makeElementGeometry1D(doc))) self.assertEqual("Fem::FemElementGeometry2D", type_of_obj(ObjectsFem.makeElementGeometry2D(doc))) self.assertEqual("Fem::FemElementRotation1D", type_of_obj(ObjectsFem.makeElementRotation1D(doc))) materialsolid = ObjectsFem.makeMaterialSolid(doc) self.assertEqual("Fem::Material", type_of_obj(ObjectsFem.makeMaterialFluid(doc))) self.assertEqual("Fem::Material", type_of_obj(materialsolid)) self.assertEqual( "Fem::MaterialMechanicalNonlinear", type_of_obj( ObjectsFem.makeMaterialMechanicalNonlinear(doc, materialsolid))) self.assertEqual("Fem::MaterialReinforced", type_of_obj(ObjectsFem.makeMaterialReinforced(doc))) mesh = ObjectsFem.makeMeshGmsh(doc) self.assertEqual("Fem::FemMeshGmsh", type_of_obj(mesh)) self.assertEqual( "Fem::FemMeshBoundaryLayer", type_of_obj(ObjectsFem.makeMeshBoundaryLayer(doc, mesh))) self.assertEqual("Fem::FemMeshGroup", type_of_obj(ObjectsFem.makeMeshGroup(doc, mesh))) self.assertEqual("Fem::FemMeshRegion", type_of_obj(ObjectsFem.makeMeshRegion(doc, mesh))) self.assertEqual("Fem::FemMeshShapeNetgenObject", type_of_obj(ObjectsFem.makeMeshNetgen(doc))) self.assertEqual("Fem::FemMeshResult", type_of_obj(ObjectsFem.makeMeshResult(doc))) self.assertEqual("Fem::FemResultMechanical", type_of_obj(ObjectsFem.makeResultMechanical(doc))) solverelmer = ObjectsFem.makeSolverElmer(doc) self.assertEqual( "Fem::FemSolverCalculixCcxTools", type_of_obj(ObjectsFem.makeSolverCalculixCcxTools(doc))) self.assertEqual("Fem::FemSolverObjectCalculix", type_of_obj(ObjectsFem.makeSolverCalculix(doc))) self.assertEqual("Fem::FemSolverObjectElmer", type_of_obj(solverelmer)) self.assertEqual("Fem::FemSolverObjectZ88", type_of_obj(ObjectsFem.makeSolverZ88(doc))) self.assertEqual( "Fem::FemEquationElmerElasticity", type_of_obj(ObjectsFem.makeEquationElasticity(doc, solverelmer))) self.assertEqual( "Fem::FemEquationElmerElectrostatic", type_of_obj(ObjectsFem.makeEquationElectrostatic(doc, solverelmer))) self.assertEqual( "Fem::FemEquationElmerFlow", type_of_obj(ObjectsFem.makeEquationFlow(doc, solverelmer))) self.assertEqual( "Fem::FemEquationElmerFluxsolver", type_of_obj(ObjectsFem.makeEquationFluxsolver(doc, solverelmer))) self.assertEqual( "Fem::FemEquationElmerHeat", type_of_obj(ObjectsFem.makeEquationHeat(doc, solverelmer))) fcc_print("doc objects count: {}, method: {}".format( len(doc.Objects), sys._getframe().f_code.co_name)) # TODO: vtk post objs, thus 5 obj less than test_femobjects_make self.assertEqual(len(doc.Objects), testtools.get_defmake_count(False))
def __init__( self, analysis_obj, solver_obj, mesh_obj, member, ): # class attributes from parameter values self.analysis = analysis_obj self.solver_obj = solver_obj # TODO without _obj self.mesh_object = mesh_obj # TODO without _object self.member = member # more attributes self.analysis_type = self.solver_obj.AnalysisType self.document = self.analysis.Document self.fc_ver = FreeCAD.Version() self.ccx_nall = "Nall" self.ccx_eall = "Eall" self.ccx_evolumes = "Evolumes" self.ccx_efaces = "Efaces" self.ccx_eedges = "Eedges" self.mat_geo_sets = [] self.theshape = None if self.mesh_object: if hasattr(self.mesh_object, "Shape"): self.theshape = self.mesh_object.Shape elif hasattr(self.mesh_object, "Part"): self.theshape = self.mesh_object.Part else: FreeCAD.Console.PrintWarning( "A finite mesh without a link to a Shape was given. " "Happen on pure mesh objects. " "Not all methods do work without this link.\n") # ATM only used in meshtools.get_femelement_direction1D_set # TODO somehow this is not smart, pur mesh objects might be used often if (self.member.geos_beamsection and (type_of_obj(self.solver_obj) == "Fem::SolverCcxTools" or type_of_obj(self.solver_obj) == "Fem::SolverCalculix")): FreeCAD.Console.PrintError( "The mesh does not know the geometry it is made from. " "Beam rotations can not retrieved but they are needed " "for writing CalculiX solver input. " "There might be problems in retrieving mesh data.\n") # Z88 will run but CalculiX not self.femmesh = self.mesh_object.FemMesh else: FreeCAD.Console.PrintWarning( "No finite element mesh object was given to the writer class. " "In rare cases this might not be an error.\n") self.femnodes_mesh = {} self.femelement_table = {} self.constraint_conflict_nodes = [] self.femnodes_ele_table = {} self.femelements_edges_only = [] self.femelements_faces_only = [] self.femelement_volumes_table = {} self.femelement_faces_table = {} self.femelement_edges_table = {} self.femelement_count_test = True self.mat_geo_sets = []