Beispiel #1
0
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))
Beispiel #2
0
    def compare_cpp_objs(
        self,
        doc
    ):
        from femtools.femutils import type_of_obj

        self.assertEqual(
            "Fem::FemAnalysis",
            type_of_obj(doc.Analysis)
        )
Beispiel #3
0
    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)))
Beispiel #4
0
    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)))
Beispiel #5
0
    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))
Beispiel #6
0
    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 = []