Download src/Mod/Fem/ObjectsFem.py from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 35.4 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/Fem/ObjectsFem.py
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/src/Mod/Fem/ObjectsFem.py
-
curl -L -o ObjectsFem.py https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/Fem/ObjectsFem.py
35.4 kB
| # *************************************************************************** | |
| # * Copyright (c) 2016 Bernd Hahnebach <bernd@bimstatik.org> * | |
| # * * | |
| # * This file is part of the FreeCAD CAx development system. * | |
| # * * | |
| # * This program is free software; you can redistribute it and/or modify * | |
| # * it under the terms of the GNU Lesser General Public License (LGPL) * | |
| # * as published by the Free Software Foundation; either version 2 of * | |
| # * the License, or (at your option) any later version. * | |
| # * for detail see the LICENCE text file. * | |
| # * * | |
| # * This program is distributed in the hope that it will be useful, * | |
| # * but WITHOUT ANY WARRANTY; without even the implied warranty of * | |
| # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * | |
| # * GNU Library General Public License for more details. * | |
| # * * | |
| # * You should have received a copy of the GNU Library General Public * | |
| # * License along with this program; if not, write to the Free Software * | |
| # * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * | |
| # * USA * | |
| # * * | |
| # *************************************************************************** | |
| __title__ = "Objects FEM" | |
| __author__ = "Bernd Hahnebach" | |
| __url__ = "https://www.freecad.org" | |
| ## \addtogroup FEM | |
| # @{ | |
| import FreeCAD | |
| # PythonFeatures from package femobjects | |
| # standard object name == class name == type without 'Fem::' | |
| # PythonFeatures from package femsolver | |
| # standard object name == type without 'Fem::' | |
| # the class name is Proxy | |
| # TODO | |
| # There are objects which use a base object. It should be tested if the base object | |
| # is in the same document as the doc in which the obj should be created. | |
| # Could only be happen if the make is called from Python. | |
| # What happens ATM? Error or the obj is moved to the other doc? | |
| # ********* analysis objects ********************************************************************* | |
| def makeAnalysis(doc, name="Analysis"): | |
| """makeAnalysis(document, [name]): | |
| makes a Fem Analysis object""" | |
| obj = doc.addObject("Fem::FemAnalysis", name) | |
| return obj | |
| # ********* constant objects ********************************************************************* | |
| def makeConstantVacuumPermittivity(doc, name="ConstantVacuumPermittivity"): | |
| """makeConstantVacuumPermittivity(document, [name]): | |
| makes a Fem ConstantVacuumPermittivity object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constant_vacuumpermittivity | |
| constant_vacuumpermittivity.ConstantVacuumPermittivity(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constant_vacuumpermittivity | |
| view_constant_vacuumpermittivity.VPConstantVacuumPermittivity(obj.ViewObject) | |
| return obj | |
| # ********* constraint objects ******************************************************************* | |
| def makeConstraintBearing(doc, name="ConstraintBearing"): | |
| """makeConstraintBearing(document, [name]): | |
| makes a Fem ConstraintBearing object""" | |
| obj = doc.addObject("Fem::ConstraintBearing", name) | |
| return obj | |
| def makeConstraintBodyHeatSource(doc, name="ConstraintBodyHeatSource"): | |
| """makeConstraintBodyHeatSource(document, [name]): | |
| makes a Fem ConstraintBodyHeatSource object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_bodyheatsource | |
| constraint_bodyheatsource.ConstraintBodyHeatSource(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_bodyheatsource as viewprov | |
| viewprov.VPConstraintBodyHeatSource(obj.ViewObject) | |
| return obj | |
| def makeConstraintCentrif(doc, name="ConstraintCentrif"): | |
| """makeConstraintCentrif(document, [name]): | |
| creates a centrif object to define centrifugal body load constraint""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_centrif | |
| constraint_centrif.ConstraintCentrif(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_centrif | |
| view_constraint_centrif.VPConstraintCentrif(obj.ViewObject) | |
| return obj | |
| def makeConstraintCurrentDensity(doc, name="ConstraintCurrentDensity"): | |
| """makeConstraintCurrentDensity(document, [name]): | |
| makes a Fem CurrentDensity object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_currentdensity | |
| constraint_currentdensity.ConstraintCurrentDensity(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_currentdensity | |
| view_constraint_currentdensity.VPConstraintCurrentDensity(obj.ViewObject) | |
| return obj | |
| def makeConstraintContact(doc, name="ConstraintContact"): | |
| """makeConstraintContact(document, [name]): | |
| makes a Fem ConstraintContact object""" | |
| obj = doc.addObject("Fem::ConstraintContact", name) | |
| return obj | |
| def makeConstraintDisplacement(doc, name="ConstraintDisplacement"): | |
| """makeConstraintDisplacement(document, [name]): | |
| makes a Fem ConstraintDisplacement object""" | |
| obj = doc.addObject("Fem::ConstraintDisplacement", name) | |
| return obj | |
| def makeConstraintElectricChargeDensity(doc, name="ElectricChargeDensity"): | |
| """makeConstraintElectricChargeDensity(document, [name]): | |
| makes a Fem ElectricChargeDensity object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_electricchargedensity | |
| constraint_electricchargedensity.ConstraintElectricChargeDensity(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_electricchargedensity | |
| view_constraint_electricchargedensity.VPConstraintElectricChargeDensity(obj.ViewObject) | |
| return obj | |
| def makeConstraintElectrostaticPotential(doc, name="ConstraintElectrostaticPotential"): | |
| """makeConstraintElectrostaticPotential(document, [name]): | |
| makes a Fem ElectrostaticPotential object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_electrostaticpotential | |
| constraint_electrostaticpotential.ConstraintElectrostaticPotential(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_electrostaticpotential | |
| view_constraint_electrostaticpotential.VPConstraintElectroStaticPotential(obj.ViewObject) | |
| return obj | |
| def makeConstraintFixed(doc, name="ConstraintFixed"): | |
| """makeConstraintFixed(document, [name]): | |
| makes a Fem ConstraintFixed object""" | |
| obj = doc.addObject("Fem::ConstraintFixed", name) | |
| return obj | |
| def makeConstraintRigidBody(doc, name="ConstraintRigidBody"): | |
| """makeConstraintRigidBody(document, [name]): | |
| makes a Fem ConstraintRigidBody object""" | |
| obj = doc.addObject("Fem::ConstraintRigidBody", name) | |
| return obj | |
| def makeConstraintFlowVelocity(doc, name="ConstraintFlowVelocity"): | |
| """makeConstraintFlowVelocity(document, [name]): | |
| makes a Fem ConstraintFlowVelocity object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_flowvelocity | |
| constraint_flowvelocity.ConstraintFlowVelocity(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_flowvelocity | |
| view_constraint_flowvelocity.VPConstraintFlowVelocity(obj.ViewObject) | |
| return obj | |
| def makeConstraintFluidBoundary(doc, name="ConstraintFluidBoundary"): | |
| """makeConstraintFluidBoundary(document, name): | |
| makes a Fem ConstraintFluidBoundary object""" | |
| obj = doc.addObject("Fem::ConstraintFluidBoundary", name) | |
| return obj | |
| def makeConstraintForce(doc, name="ConstraintForce"): | |
| """makeConstraintForce(document, [name]): | |
| makes a Fem ConstraintForce object""" | |
| obj = doc.addObject("Fem::ConstraintForce", name) | |
| return obj | |
| def makeConstraintGear(doc, name="ConstraintGear"): | |
| """makeConstraintGear(document, [name]): | |
| makes a Fem ConstraintGear object""" | |
| obj = doc.addObject("Fem::ConstraintGear", name) | |
| return obj | |
| def makeConstraintHeatflux(doc, name="ConstraintHeatflux"): | |
| """makeConstraintHeatflux(document, [name]): | |
| makes a Fem ConstraintHeatflux object""" | |
| obj = doc.addObject("Fem::ConstraintHeatflux", name) | |
| return obj | |
| def makeConstraintInitialFlowVelocity(doc, name="ConstraintInitialFlowVelocity"): | |
| """makeConstraintInitialFlowVelocity(document, [name]): | |
| makes a Fem ConstraintInitialFlowVelocity object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_initialflowvelocity | |
| constraint_initialflowvelocity.ConstraintInitialFlowVelocity(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_initialflowvelocity | |
| view_constraint_initialflowvelocity.VPConstraintInitialFlowVelocity(obj.ViewObject) | |
| return obj | |
| def makeConstraintInitialPressure(doc, name="ConstraintInitialPressure"): | |
| """makeConstraintInitialPressure(document, [name]): | |
| makes a Fem ConstraintInitialPressure object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_initialpressure | |
| constraint_initialpressure.ConstraintInitialPressure(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_initialpressure | |
| view_constraint_initialpressure.VPConstraintInitialPressure(obj.ViewObject) | |
| return obj | |
| def makeConstraintInitialTemperature(doc, name="ConstraintInitialTemperature"): | |
| """makeConstraintInitialTemperature(document, name): | |
| makes a Fem ConstraintInitialTemperature object""" | |
| obj = doc.addObject("Fem::ConstraintInitialTemperature", name) | |
| return obj | |
| def makeConstraintMagnetization(doc, name="ConstraintMagnetization"): | |
| """makeConstraintMagnetization(document, [name]): | |
| makes a Fem Magnetization object""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_magnetization | |
| constraint_magnetization.ConstraintMagnetization(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_magnetization | |
| view_constraint_magnetization.VPConstraintMagnetization(obj.ViewObject) | |
| return obj | |
| def makeConstraintPlaneRotation(doc, name="ConstraintPlaneRotation"): | |
| """makeConstraintPlaneRotation(document, [name]): | |
| makes a Fem ConstraintPlaneRotation object""" | |
| obj = doc.addObject("Fem::ConstraintPlaneRotation", name) | |
| return obj | |
| def makeConstraintPressure(doc, name="ConstraintPressure"): | |
| """makeConstraintPressure(document, [name]): | |
| makes a Fem ConstraintPressure object""" | |
| obj = doc.addObject("Fem::ConstraintPressure", name) | |
| return obj | |
| def makeConstraintPulley(doc, name="ConstraintPulley"): | |
| """makeConstraintPulley(document, [name]): | |
| makes a Fem ConstraintPulley object""" | |
| obj = doc.addObject("Fem::ConstraintPulley", name) | |
| return obj | |
| def makeConstraintSelfWeight(doc, name="ConstraintSelfWeight"): | |
| """makeConstraintSelfWeight(document, [name]): | |
| creates a self weight object to define a gravity load""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_selfweight | |
| constraint_selfweight.ConstraintSelfWeight(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_selfweight | |
| view_constraint_selfweight.VPConstraintSelfWeight(obj.ViewObject) | |
| return obj | |
| def makeConstraintTemperature(doc, name="ConstraintTemperature"): | |
| """makeConstraintTemperature(document, [name]): | |
| makes a Fem ConstraintTemperature object""" | |
| obj = doc.addObject("Fem::ConstraintTemperature", name) | |
| return obj | |
| def makeConstraintTie(doc, name="ConstraintTie"): | |
| """makeConstraintTie(document, [name]): | |
| creates a tie object to define bonded faces constraint""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_tie | |
| constraint_tie.ConstraintTie(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_tie | |
| view_constraint_tie.VPConstraintTie(obj.ViewObject) | |
| return obj | |
| def makeConstraintTransform(doc, name="ConstraintTransform"): | |
| """makeConstraintTransform(document, [name]): | |
| makes a Fem ConstraintTransform object""" | |
| obj = doc.addObject("Fem::ConstraintTransform", name) | |
| return obj | |
| def makeConstraintSectionPrint(doc, name="ConstraintSectionPrint"): | |
| """makeConstraintSectionPrint(document, [name]): | |
| creates a section print object to evaluate forces and moments of defined face""" | |
| obj = doc.addObject("Fem::ConstraintPython", name) | |
| from femobjects import constraint_sectionprint | |
| constraint_sectionprint.ConstraintSectionPrint(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_constraint_sectionprint | |
| view_constraint_sectionprint.VPConstraintSectionPrint(obj.ViewObject) | |
| return obj | |
| def makeConstraintSpring(doc, name="ConstraintSpring"): | |
| """makeConstraintSpring(document, [name]): | |
| makes a Fem ConstraintSpring object""" | |
| obj = doc.addObject("Fem::ConstraintSpring", name) | |
| return obj | |
| # ********* element definition objects *********************************************************** | |
| def makeElementFluid1D(doc, name="ElementFluid1D"): | |
| """makeElementFluid1D(document, [name]): | |
| creates a 1D fluid element object to define 1D flow""" | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import element_fluid1D | |
| element_fluid1D.ElementFluid1D(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_element_fluid1D | |
| view_element_fluid1D.VPElementFluid1D(obj.ViewObject) | |
| return obj | |
| def makeElementGeometry1D( | |
| doc, sectiontype="Rectangular", width=10.0, height=25.0, thickness=2.0, name="ElementGeometry1D" | |
| ): | |
| """makeElementGeometry1D(document, [width], [height], [name]): | |
| creates a 1D geometry element object to define a cross section""" | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import element_geometry1D | |
| element_geometry1D.ElementGeometry1D(obj) | |
| obj.SectionType = sectiontype | |
| obj.RectWidth = width | |
| obj.RectHeight = height | |
| obj.CircDiameter = height | |
| obj.PipeDiameter = height | |
| obj.PipeThickness = thickness | |
| obj.Axis1Length = width | |
| obj.Axis2Length = height | |
| obj.BoxHeight = height | |
| obj.BoxWidth = width | |
| obj.BoxT1 = thickness | |
| obj.BoxT2 = thickness | |
| obj.BoxT3 = thickness | |
| obj.BoxT4 = thickness | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_element_geometry1D | |
| view_element_geometry1D.VPElementGeometry1D(obj.ViewObject) | |
| return obj | |
| def makeElementGeometry2D(doc, thickness=1.0, name="ElementGeometry2D"): | |
| """makeElementGeometry2D(document, [thickness], [name]): | |
| creates a 2D geometry element object to define a plate thickness""" | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import element_geometry2D | |
| element_geometry2D.ElementGeometry2D(obj) | |
| obj.Thickness = thickness | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_element_geometry2D | |
| view_element_geometry2D.VPElementGeometry2D(obj.ViewObject) | |
| return obj | |
| def makeElementRotation1D(doc, name="ElementRotation1D"): | |
| """makeElementRotation1D(document, [name]): | |
| creates a 1D geometry rotation element object to rotate a 1D cross section""" | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import element_rotation1D | |
| element_rotation1D.ElementRotation1D(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_element_rotation1D | |
| view_element_rotation1D.VPElementRotation1D(obj.ViewObject) | |
| return obj | |
| # ********* material objects ********************************************************************* | |
| def makeMaterialFluid(doc, name="MaterialFluid"): | |
| """makeMaterialFluid(document, [name]): | |
| makes a FEM Material for fluid""" | |
| obj = doc.addObject("App::MaterialObjectPython", name) | |
| from femobjects import material_common | |
| material_common.MaterialCommon(obj) | |
| obj.Category = "Fluid" | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_material_common | |
| view_material_common.VPMaterialCommon(obj.ViewObject) | |
| return obj | |
| def makeMaterialMechanicalNonlinear(doc, base_material, name="MaterialMechanicalNonlinear"): | |
| """makeMaterialMechanicalNonlinear(document, base_material, [name]): | |
| creates a nonlinear material object""" | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import material_mechanicalnonlinear | |
| material_mechanicalnonlinear.MaterialMechanicalNonlinear(obj) | |
| obj.LinearBaseMaterial = base_material | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_material_mechanicalnonlinear | |
| view_material_mechanicalnonlinear.VPMaterialMechanicalNonlinear(obj.ViewObject) | |
| return obj | |
| def makeMaterialReinforced(doc, name="MaterialReinforced"): | |
| """makeMaterialReinforced(document, [matrix_material], [reinforcement_material], [name]): | |
| creates a reinforced material object""" | |
| obj = doc.addObject("App::MaterialObjectPython", name) | |
| from femobjects import material_reinforced | |
| material_reinforced.MaterialReinforced(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_material_reinforced | |
| view_material_reinforced.VPMaterialReinforced(obj.ViewObject) | |
| return obj | |
| def makeMaterialSolid(doc, name="MaterialSolid"): | |
| """makeMaterialSolid(document, [name]): | |
| makes a FEM Material for solid""" | |
| obj = doc.addObject("App::MaterialObjectPython", name) | |
| from femobjects import material_common | |
| material_common.MaterialCommon(obj) | |
| obj.Category = "Solid" | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_material_common | |
| view_material_common.VPMaterialCommon(obj.ViewObject) | |
| return obj | |
| # ********* mesh objects ************************************************************************* | |
| def makeMeshBoundaryLayer(doc, base_mesh, name="MeshBoundaryLayer"): | |
| """makeMeshBoundaryLayer(document, base_mesh, [name]): | |
| creates a FEM mesh BoundaryLayer object to define boundary layer properties""" | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import mesh_boundarylayer | |
| mesh_boundarylayer.MeshBoundaryLayer(obj) | |
| # obj.BaseMesh = base_mesh | |
| # App::PropertyLinkList does not support append | |
| # we will use a temporary list to append the mesh BoundaryLayer obj. to the list | |
| tmplist = base_mesh.MeshBoundaryLayerList | |
| tmplist.append(obj) | |
| base_mesh.MeshBoundaryLayerList = tmplist | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_mesh_boundarylayer | |
| view_mesh_boundarylayer.VPMeshBoundaryLayer(obj.ViewObject) | |
| return obj | |
| def makeMeshGmsh(doc, name="MeshGmsh"): | |
| """makeMeshGmsh(document, [name]): | |
| makes a Gmsh FEM mesh object""" | |
| obj = doc.addObject("Fem::FemMeshShapeBaseObjectPython", name) | |
| from femobjects import mesh_gmsh | |
| mesh_gmsh.MeshGmsh(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_mesh_gmsh | |
| view_mesh_gmsh.VPMeshGmsh(obj.ViewObject) | |
| return obj | |
| def makeMeshGroup(doc, base_mesh, use_label=False, name="MeshGroup"): | |
| """makeMeshGroup(document, base_mesh, [use_label], [name]): | |
| creates a FEM mesh refinement object to define properties for a region of a FEM mesh | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import mesh_group | |
| mesh_group.MeshGroup(obj) | |
| obj.UseLabel = use_label | |
| # obj.BaseMesh = base_mesh | |
| # App::PropertyLinkList does not support append | |
| # we will use a temporary list to append the mesh group obj. to the list | |
| tmplist = base_mesh.MeshGroupList | |
| tmplist.append(obj) | |
| base_mesh.MeshGroupList = tmplist | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_mesh_group | |
| view_mesh_group.VPMeshGroup(obj.ViewObject) | |
| return obj | |
| def makeMeshNetgen(doc, name="MeshNetgen"): | |
| """makeMeshNetgen(document, [name]): | |
| makes a Netgen FEM mesh object""" | |
| obj = doc.addObject("Fem::FemMeshShapeBaseObjectPython", name) | |
| from femobjects import mesh_netgen | |
| mesh_netgen.MeshNetgen(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_mesh_netgen | |
| view_mesh_netgen.VPMeshNetgen(obj.ViewObject) | |
| return obj | |
| def makeMeshNetgenLegacy(doc, name="MeshNetgen"): | |
| """makeMeshNetgenLegacy(document, [name]): | |
| makes a old implementation Netgen FEM mesh object""" | |
| obj = doc.addObject("Fem::FemMeshShapeNetgenObject", name) | |
| return obj | |
| def makeMeshRegion(doc, base_mesh, element_length=0.0, name="MeshRegion"): | |
| """makeMeshRegion(document, base_mesh, [element_length], [name]): | |
| creates a FEM mesh refinement object to define properties for a refinement of a FEM mesh | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import mesh_region | |
| mesh_region.MeshRegion(obj) | |
| obj.CharacteristicLength = element_length | |
| # obj.BaseMesh = base_mesh | |
| # App::PropertyLinkList does not support append | |
| # we will use a temporary list to append the mesh region obj. to the list | |
| tmplist = base_mesh.MeshRegionList | |
| tmplist.append(obj) | |
| base_mesh.MeshRegionList = tmplist | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_mesh_region | |
| view_mesh_region.VPMeshRegion(obj.ViewObject) | |
| return obj | |
| def makeMeshResult(doc, name="MeshResult"): | |
| """makeMeshResult(document, name): makes a Fem MeshResult object""" | |
| obj = doc.addObject("Fem::FemMeshObjectPython", name) | |
| from femobjects import mesh_result | |
| mesh_result.MeshResult(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_mesh_result | |
| view_mesh_result.VPFemMeshResult(obj.ViewObject) | |
| return obj | |
| # ********* post processing objects ************************************************************** | |
| def makeResultMechanical(doc, name="ResultMechanical"): | |
| """makeResultMechanical(document, [name]): | |
| creates a mechanical result object to hold FEM results""" | |
| obj = doc.addObject("Fem::FemResultObjectPython", name) | |
| from femobjects import result_mechanical | |
| result_mechanical.ResultMechanical(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_result_mechanical | |
| view_result_mechanical.VPResultMechanical(obj.ViewObject) | |
| return obj | |
| def makePostVtkFilterClipRegion(doc, base_vtk_result, name="VtkFilterClipRegion"): | |
| """makePostVtkFilterClipRegion(document, base_vtk_result, [name]): | |
| creates a FEM post processing region clip filter object (vtk based)""" | |
| obj = doc.addObject("Fem::FemPostClipFilter", name) | |
| base_vtk_result.addObject(obj) | |
| return obj | |
| def makePostVtkFilterClipScalar(doc, base_vtk_result, name="VtkFilterClipScalar"): | |
| """makePostVtkFilterClipScalar(document, base_vtk_result, [name]): | |
| creates a FEM post processing scalar clip filter object (vtk based)""" | |
| obj = doc.addObject("Fem::FemPostScalarClipFilter", name) | |
| base_vtk_result.addObject(obj) | |
| return obj | |
| def makePostVtkFilterCutFunction(doc, base_vtk_result, name="VtkFilterCutFunction"): | |
| """makePostVtkFilterCutFunction(document, base_vtk_result, [name]): | |
| creates a FEM post processing cut function filter object (vtk based)""" | |
| obj = doc.addObject("Fem::FemPostClipFilter", name) | |
| base_vtk_result.addObject(obj) | |
| return obj | |
| def makePostVtkFilterWarp(doc, base_vtk_result, name="VtkFilterWarp"): | |
| """makePostVtkFilterWarp(document, base_vtk_result, [name]): | |
| creates a FEM post processing warp filter object (vtk based)""" | |
| obj = doc.addObject("Fem::FemPostWarpVectorFilter", name) | |
| base_vtk_result.addObject(obj) | |
| return obj | |
| def makePostVtkFilterContours(doc, base_vtk_result, name="VtkFilterContours"): | |
| """makePostVtkFilterContours(document, base_vtk_result, [name]): | |
| creates a FEM post processing contours filter object (vtk based)""" | |
| obj = doc.addObject("Fem::FemPostContoursFilter", name) | |
| base_vtk_result.addObject(obj) | |
| return obj | |
| def makePostFilterGlyph(doc, base_vtk_result, name="Glyph"): | |
| """makePostVtkFilterGlyph(document, [name]): | |
| creates a FEM post processing filter that visualizes vector fields with glyphs | |
| """ | |
| obj = doc.addObject("Fem::PostFilterPython", name) | |
| from femobjects import post_glyphfilter | |
| post_glyphfilter.PostGlyphFilter(obj) | |
| base_vtk_result.addObject(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_glyphfilter | |
| view_post_glyphfilter.VPPostGlyphFilter(obj.ViewObject) | |
| return obj | |
| def makePostVtkResult(doc, result_data, name="VtkResult"): | |
| """makePostVtkResult(document, base_result, [name]): | |
| creates a FEM post processing result data (vtk based) to hold FEM results | |
| Note: Result data get expanded, it can either be single result [result] or everything | |
| needed for a multistep result: [results_list, value_list, unit, description] | |
| """ | |
| Pipeline_Name = "Pipeline_" + name | |
| obj = doc.addObject("Fem::FemPostPipeline", Pipeline_Name) | |
| obj.load(*result_data) | |
| if FreeCAD.GuiUp: | |
| obj.ViewObject.SelectionStyle = "BoundBox" | |
| # to assure the user sees something, set the default to Surface | |
| obj.ViewObject.DisplayMode = "Surface" | |
| return obj | |
| def makePostLineplot(doc, name="Lineplot"): | |
| """makePostLineplot(document, [name]): | |
| creates a FEM post processing line plot | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_lineplot | |
| post_lineplot.PostLineplot(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_lineplot | |
| view_post_lineplot.VPPostLineplot(obj.ViewObject) | |
| return obj | |
| def makePostLineplotFieldData(doc, name="FieldData2D"): | |
| """makePostLineplotFieldData(document, [name]): | |
| creates a FEM post processing data extractor for 2D Field data | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_lineplot | |
| post_lineplot.PostLineplotFieldData(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_lineplot | |
| view_post_lineplot.VPPostLineplotFieldData(obj.ViewObject) | |
| return obj | |
| def makePostLineplotIndexOverFrames(doc, name="IndexOverFrames2D"): | |
| """makePostLineplotIndexOverFrames(document, [name]): | |
| creates a FEM post processing data extractor for 2D index data | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_lineplot | |
| post_lineplot.PostLineplotIndexOverFrames(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_lineplot | |
| view_post_lineplot.VPPostLineplotIndexOverFrames(obj.ViewObject) | |
| return obj | |
| def makePostHistogram(doc, name="Histogram"): | |
| """makePostHistogram(document, [name]): | |
| creates a FEM post processing histogram plot | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_histogram | |
| post_histogram.PostHistogram(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_histogram | |
| view_post_histogram.VPPostHistogram(obj.ViewObject) | |
| return obj | |
| def makePostHistogramFieldData(doc, name="FieldData1D"): | |
| """makePostHistogramFieldData(document, [name]): | |
| creates a FEM post processing data extractor for 1D Field data | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_histogram | |
| post_histogram.PostHistogramFieldData(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_histogram | |
| view_post_histogram.VPPostHistogramFieldData(obj.ViewObject) | |
| return obj | |
| def makePostHistogramIndexOverFrames(doc, name="IndexOverFrames1D"): | |
| """makePostHistogramIndexOverFrames(document, [name]): | |
| creates a FEM post processing data extractor for 1D Field data | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_histogram | |
| post_histogram.PostHistogramIndexOverFrames(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_histogram | |
| view_post_histogram.VPPostHistogramIndexOverFrames(obj.ViewObject) | |
| return obj | |
| def makePostTable(doc, name="Table"): | |
| """makePostTable(document, [name]): | |
| creates a FEM post processing histogram plot | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_table | |
| post_table.PostTable(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_table | |
| view_post_table.VPPostTable(obj.ViewObject) | |
| return obj | |
| def makePostTableFieldData(doc, name="FieldData1D"): | |
| """makePostTableFieldData(document, [name]): | |
| creates a FEM post processing data extractor for 1D Field data | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_table | |
| post_table.PostTableFieldData(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_table | |
| view_post_table.VPPostTableFieldData(obj.ViewObject) | |
| return obj | |
| def makePostTableIndexOverFrames(doc, name="IndexOverFrames1D"): | |
| """makePostTableIndexOverFrames(document, [name]): | |
| creates a FEM post processing data extractor for 1D Field data | |
| """ | |
| obj = doc.addObject("Fem::FeaturePython", name) | |
| from femobjects import post_table | |
| post_table.PostTableIndexOverFrames(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_post_table | |
| view_post_table.VPPostTableIndexOverFrames(obj.ViewObject) | |
| return obj | |
| # ********* solver objects *********************************************************************** | |
| def _equation_creator(creator, base_solver, doc, name): | |
| eq = creator.create(doc, name) | |
| if base_solver: | |
| eq.Priority = 255 - len(base_solver.Group) | |
| base_solver.addObject(eq) | |
| return eq | |
| def makeEquationDeformation(doc, base_solver=None, name="Deformation"): | |
| """makeEquationDeformation(document, [base_solver], [name]): | |
| creates a FEM deformation (nonlinear elasticity) equation for a solver""" | |
| from femsolver.elmer.equations import deformation | |
| return _equation_creator(deformation, base_solver, doc, name) | |
| def makeEquationElasticity(doc, base_solver=None, name="Elasticity"): | |
| """makeEquationElasticity(document, [base_solver], [name]): | |
| creates a FEM elasticity equation for a solver""" | |
| from femsolver.elmer.equations import elasticity | |
| return _equation_creator(elasticity, base_solver, doc, name) | |
| def makeEquationElectricforce(doc, base_solver=None, name="Electricforce"): | |
| """makeEquationElectricforce(document, [base_solver], [name]): | |
| creates a FEM Electricforce equation for a solver""" | |
| from femsolver.elmer.equations import electricforce | |
| return _equation_creator(electricforce, base_solver, doc, name) | |
| def makeEquationElectrostatic(doc, base_solver=None, name="Electrostatic"): | |
| """makeEquationElectrostatic(document, [base_solver], [name]): | |
| creates a FEM electrostatic equation for a solver""" | |
| from femsolver.elmer.equations import electrostatic | |
| return _equation_creator(electrostatic, base_solver, doc, name) | |
| def makeEquationFlow(doc, base_solver=None, name="Flow"): | |
| """makeEquationFlow(document, [base_solver], [name]): | |
| creates a FEM flow equation for a solver""" | |
| from femsolver.elmer.equations import flow | |
| return _equation_creator(flow, base_solver, doc, name) | |
| def makeEquationFlux(doc, base_solver=None, name="Flux"): | |
| """makeEquationFlux(document, [base_solver], [name]): | |
| creates a FEM flux equation for a solver""" | |
| from femsolver.elmer.equations import flux | |
| return _equation_creator(flux, base_solver, doc, name) | |
| def makeEquationHeat(doc, base_solver=None, name="Heat"): | |
| """makeEquationHeat(document, [base_solver], [name]): | |
| creates a FEM heat equation for a solver""" | |
| from femsolver.elmer.equations import heat | |
| return _equation_creator(heat, base_solver, doc, name) | |
| def makeEquationMagnetodynamic(doc, base_solver=None, name="Magnetodynamic"): | |
| """makeEquationMagnetodynamic(document, [base_solver], [name]): | |
| creates a FEM magnetodynamic equation for a solver""" | |
| from femsolver.elmer.equations import magnetodynamic | |
| return _equation_creator(magnetodynamic, base_solver, doc, name) | |
| def makeEquationMagnetodynamic2D(doc, base_solver=None, name="Magnetodynamic2D"): | |
| """makeEquationMagnetodynamic2D(document, [base_solver], [name]): | |
| creates a FEM magnetodynamic2D equation for a solver""" | |
| from femsolver.elmer.equations import magnetodynamic2D | |
| return _equation_creator(magnetodynamic2D, base_solver, doc, name) | |
| def makeEquationStaticCurrent(doc, base_solver=None, name="StaticCurrent"): | |
| """makeEquationStaticCurrent(document, [base_solver], [name]): | |
| creates a FEM static current equation for a solver""" | |
| from femsolver.elmer.equations import staticcurrent | |
| return _equation_creator(staticcurrent, base_solver, doc, name) | |
| def makeSolverCalculiXCcxTools(doc, name="SolverCcxTools"): | |
| """makeSolverCalculiXCcxTools(document, [name]): | |
| makes a Calculix solver object for the ccx tools module""" | |
| obj = doc.addObject("Fem::FemSolverObjectPython", name) | |
| from femobjects import solver_ccxtools | |
| solver_ccxtools.SolverCcxTools(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_solver_ccxtools | |
| view_solver_ccxtools.VPSolverCcxTools(obj.ViewObject) | |
| return obj | |
| def makeSolverCalculiX(doc, name="SolverCalculiX"): | |
| """makeSolverCalculiX(document, [name]): | |
| makes a Calculix solver object""" | |
| obj = doc.addObject("Fem::FemSolverObjectPython", name) | |
| from femobjects import solver_calculix | |
| solver_calculix.SolverCalculiX(obj) | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_solver_calculix | |
| view_solver_calculix.VPSolverCalculiX(obj.ViewObject) | |
| return obj | |
| def makeSolverElmer(doc, name="SolverElmer"): | |
| """makeSolverElmer(document, [name]): | |
| makes a Elmer solver object""" | |
| obj = doc.addObject("Fem::FemSolverObjectPython", name) | |
| from femobjects import solver_elmer | |
| solver_elmer.SolverElmer(obj) | |
| obj.SimulationType = "Steady State" | |
| if FreeCAD.GuiUp: | |
| from femviewprovider import view_solver_elmer | |
| view_solver_elmer.VPSolverElmer(obj.ViewObject) | |
| return obj | |
| def makeSolverMystran(doc, name="SolverMystran"): | |
| """makeSolverMystran(document, [name]): | |
| makes a Mystran solver object""" | |
| import femsolver.mystran.solver | |
| obj = femsolver.mystran.solver.create(doc, name) | |
| return obj | |
| def makeSolverZ88(doc, name="SolverZ88"): | |
| """makeSolverZ88(document, [name]): | |
| makes a Z88 solver object""" | |
| import femsolver.z88.solver | |
| obj = femsolver.z88.solver.create(doc, name) | |
| return obj | |
| """ | |
| # get the supportedTypes | |
| App.newDocument() | |
| module = "Fem" | |
| FreeCADGui.doCommand("import " + module) | |
| for s in sorted(App.ActiveDocument.supportedTypes()): | |
| if s.startswith(module): | |
| print(s) | |
| """ | |
| ## @} | |