diff --git a/src/Mod/Fem/ObjectsFem.py b/src/Mod/Fem/ObjectsFem.py index 29678dbdd..0abea2b16 100644 --- a/src/Mod/Fem/ObjectsFem.py +++ b/src/Mod/Fem/ObjectsFem.py @@ -30,134 +30,14 @@ __url__ = "http://www.freecadweb.org" import FreeCAD -########## analysis ########## +########## analysis objects ########## def makeAnalysis(name="Analysis"): '''makeAnalysis(name): makes a Fem Analysis object''' obj = FreeCAD.ActiveDocument.addObject("Fem::FemAnalysisPython", name) return obj -########## solvers ########## -def makeSolverCalculix(name="CalculiX"): - '''makeSolverCalculix(name): makes a Calculix solver object''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FemSolverObjectPython", name) - import PyObjects._FemSolverCalculix - PyObjects._FemSolverCalculix._FemSolverCalculix(obj) - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemSolverCalculix - PyGui._ViewProviderFemSolverCalculix._ViewProviderFemSolverCalculix(obj.ViewObject) - return obj - - -def makeSolverZ88(name="Z88"): - '''makeSolverZ88(name): makes a Z88 solver object''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FemSolverObjectPython", name) - import PyObjects._FemSolverZ88 - PyObjects._FemSolverZ88._FemSolverZ88(obj) - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemSolverZ88 - PyGui._ViewProviderFemSolverZ88._ViewProviderFemSolverZ88(obj.ViewObject) - return obj - - -########## element geometry definitions ########## -def makeBeamSection(sectiontype='Rectangular', width=10.0, height=25.0, name="BeamSection"): - '''makeBeamSection([width], [height], [name]): creates an beamsection object to define a cross section''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) - import PyObjects._FemBeamSection - PyObjects._FemBeamSection._FemBeamSection(obj) - sec_types = PyObjects._FemBeamSection._FemBeamSection.known_beam_types - if sectiontype not in sec_types: - FreeCAD.Console.PrintError("Section type is not known. Set to " + sec_types[0] + " \n") - obj.SectionType = sec_types[0] - else: - obj.SectionType = sectiontype - obj.RectWidth = width - obj.RectHeight = height - obj.CircDiameter = height - obj.PipeDiameter = height - obj.PipeThickness = width - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemBeamSection - PyGui._ViewProviderFemBeamSection._ViewProviderFemBeamSection(obj.ViewObject) - return obj - - -def makeFemFluidSection(name="FluidSection"): - '''makeFemFluidSection([name]): creates an Fluid section object to define 1D flow''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) - import PyObjects._FemFluidSection - PyObjects._FemFluidSection._FemFluidSection(obj) - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemFluidSection - PyGui._ViewProviderFemFluidSection._ViewProviderFemFluidSection(obj.ViewObject) - return obj - - -def makeShellThickness(thickness=20.0, name="ShellThickness"): - '''makeShellThickness([thickness], [name]): creates an shellthickness object to define a plate thickness''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) - import PyObjects._FemShellThickness - PyObjects._FemShellThickness._FemShellThickness(obj) - obj.Thickness = thickness - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemShellThickness - PyGui._ViewProviderFemShellThickness._ViewProviderFemShellThickness(obj.ViewObject) - return obj - - -########## materials ########## -def makeMaterialSolid(name="MechanicalSolidMaterial"): - '''makeMaterialSolid(name): makes an FEM Material for solid''' - obj = FreeCAD.ActiveDocument.addObject("App::MaterialObjectPython", name) - import PyObjects._FemMaterial - PyObjects._FemMaterial._FemMaterial(obj) - obj.Category = 'Solid' - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemMaterial - PyGui._ViewProviderFemMaterial._ViewProviderFemMaterial(obj.ViewObject) - # FreeCAD.ActiveDocument.recompute() - return obj - - -def makeMaterialFluid(name="FluidMaterial"): - '''makeMaterialFluid(name): makes an FEM Material for fluid''' - obj = FreeCAD.ActiveDocument.addObject("App::MaterialObjectPython", name) - import PyObjects._FemMaterial - PyObjects._FemMaterial._FemMaterial(obj) - obj.Category = 'Fluid' - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemMaterial - PyGui._ViewProviderFemMaterial._ViewProviderFemMaterial(obj.ViewObject) - # FreeCAD.ActiveDocument.recompute() - return obj - - -def makeMaterialMechanicalNonlinear(base_material, name="MechanicalMaterialNonlinear"): - '''makeMaterialMechanicalNonlinear(base_material, [name]): creates an nonlinear material object''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) - import PyObjects._FemMaterialMechanicalNonlinear - PyObjects._FemMaterialMechanicalNonlinear._FemMaterialMechanicalNonlinear(obj) - obj.LinearBaseMaterial = base_material - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemMaterialMechanicalNonlinear - PyGui._ViewProviderFemMaterialMechanicalNonlinear._ViewProviderFemMaterialMechanicalNonlinear(obj.ViewObject) - return obj - - -########## results ########## -def makeResultMechanical(name="MechanicalResult"): - '''makeResultMechanical(name): creates an mechanical result object to hold FEM results''' - obj = FreeCAD.ActiveDocument.addObject('Fem::FemResultObjectPython', name) - import PyObjects._FemResultMechanical - PyObjects._FemResultMechanical._FemResultMechanical(obj) - if FreeCAD.GuiUp: - import PyGui._ViewProviderFemResultMechanical - PyGui._ViewProviderFemResultMechanical._ViewProviderFemResultMechanical(obj.ViewObject) - return obj - - -########## constraints ########## +########## constraint objects ########## def makeConstraintBearing(name="ConstraintBearing"): '''makeConstraintBearing(name): makes a Fem ConstraintBearing object''' obj = FreeCAD.ActiveDocument.addObject("Fem::ConstraintBearing", name) @@ -253,13 +133,46 @@ def makeConstraintTransform(name="ConstraintTransform"): return obj -########## meshes ########## -def makeMeshShapeNetgenObject(name="MeshShapeNetgenObject"): - '''makeMeshShapeNetgenObject(name): makes a Fem MeshShapeNetgenObject object''' - obj = FreeCAD.ActiveDocument.addObject("Fem::FemMeshShapeNetgenObject", name) +########## material objects ########## +def makeMaterialSolid(name="MechanicalSolidMaterial"): + '''makeMaterialSolid(name): makes an FEM Material for solid''' + obj = FreeCAD.ActiveDocument.addObject("App::MaterialObjectPython", name) + import PyObjects._FemMaterial + PyObjects._FemMaterial._FemMaterial(obj) + obj.Category = 'Solid' + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemMaterial + PyGui._ViewProviderFemMaterial._ViewProviderFemMaterial(obj.ViewObject) + # FreeCAD.ActiveDocument.recompute() return obj +def makeMaterialFluid(name="FluidMaterial"): + '''makeMaterialFluid(name): makes an FEM Material for fluid''' + obj = FreeCAD.ActiveDocument.addObject("App::MaterialObjectPython", name) + import PyObjects._FemMaterial + PyObjects._FemMaterial._FemMaterial(obj) + obj.Category = 'Fluid' + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemMaterial + PyGui._ViewProviderFemMaterial._ViewProviderFemMaterial(obj.ViewObject) + # FreeCAD.ActiveDocument.recompute() + return obj + + +def makeMaterialMechanicalNonlinear(base_material, name="MechanicalMaterialNonlinear"): + '''makeMaterialMechanicalNonlinear(base_material, [name]): creates an nonlinear material object''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) + import PyObjects._FemMaterialMechanicalNonlinear + PyObjects._FemMaterialMechanicalNonlinear._FemMaterialMechanicalNonlinear(obj) + obj.LinearBaseMaterial = base_material + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemMaterialMechanicalNonlinear + PyGui._ViewProviderFemMaterialMechanicalNonlinear._ViewProviderFemMaterialMechanicalNonlinear(obj.ViewObject) + return obj + + +########## mesh objects ########## def makeMeshGmsh(name="FEMMeshGMSH"): '''makeMeshGmsh(name): makes a GMSH FEM mesh object''' obj = FreeCAD.ActiveDocument.addObject("Fem::FemMeshObjectPython", name) @@ -288,6 +201,12 @@ def makeMeshGroup(base_mesh, use_label=False, name="FEMMeshGroup"): return obj +def makeMeshShapeNetgenObject(name="MeshShapeNetgenObject"): + '''makeMeshShapeNetgenObject(name): makes a Fem MeshShapeNetgenObject object''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FemMeshShapeNetgenObject", name) + return obj + + def makeMeshRegion(base_mesh, element_length=0.0, name="FEMMeshRegion"): '''makeMeshRegion([length], [name]): creates a FEM mesh region object to define properties for a regon of a FEM mesh''' obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) @@ -305,6 +224,89 @@ def makeMeshRegion(base_mesh, element_length=0.0, name="FEMMeshRegion"): return obj +########## result objects ########## +def makeResultMechanical(name="MechanicalResult"): + '''makeResultMechanical(name): creates an mechanical result object to hold FEM results''' + obj = FreeCAD.ActiveDocument.addObject('Fem::FemResultObjectPython', name) + import PyObjects._FemResultMechanical + PyObjects._FemResultMechanical._FemResultMechanical(obj) + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemResultMechanical + PyGui._ViewProviderFemResultMechanical._ViewProviderFemResultMechanical(obj.ViewObject) + return obj + + + +########## solver objects ########## +def makeSolverCalculix(name="CalculiX"): + '''makeSolverCalculix(name): makes a Calculix solver object''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FemSolverObjectPython", name) + import PyObjects._FemSolverCalculix + PyObjects._FemSolverCalculix._FemSolverCalculix(obj) + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemSolverCalculix + PyGui._ViewProviderFemSolverCalculix._ViewProviderFemSolverCalculix(obj.ViewObject) + return obj + + +def makeSolverZ88(name="Z88"): + '''makeSolverZ88(name): makes a Z88 solver object''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FemSolverObjectPython", name) + import PyObjects._FemSolverZ88 + PyObjects._FemSolverZ88._FemSolverZ88(obj) + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemSolverZ88 + PyGui._ViewProviderFemSolverZ88._ViewProviderFemSolverZ88(obj.ViewObject) + return obj + + +########## element geometry definition objects ########## +# TODO object type not yet in object name, see forum topic http://forum.freecadweb.org/viewtopic.php?f=18&t=21029 +def makeBeamSection(sectiontype='Rectangular', width=10.0, height=25.0, name="BeamSection"): + '''makeBeamSection([width], [height], [name]): creates an beamsection object to define a cross section''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) + import PyObjects._FemBeamSection + PyObjects._FemBeamSection._FemBeamSection(obj) + sec_types = PyObjects._FemBeamSection._FemBeamSection.known_beam_types + if sectiontype not in sec_types: + FreeCAD.Console.PrintError("Section type is not known. Set to " + sec_types[0] + " \n") + obj.SectionType = sec_types[0] + else: + obj.SectionType = sectiontype + obj.RectWidth = width + obj.RectHeight = height + obj.CircDiameter = height + obj.PipeDiameter = height + obj.PipeThickness = width + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemBeamSection + PyGui._ViewProviderFemBeamSection._ViewProviderFemBeamSection(obj.ViewObject) + return obj + + +def makeFemFluidSection(name="FluidSection"): + '''makeFemFluidSection([name]): creates an Fluid section object to define 1D flow''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) + import PyObjects._FemFluidSection + PyObjects._FemFluidSection._FemFluidSection(obj) + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemFluidSection + PyGui._ViewProviderFemFluidSection._ViewProviderFemFluidSection(obj.ViewObject) + return obj + + +def makeShellThickness(thickness=20.0, name="ShellThickness"): + '''makeShellThickness([thickness], [name]): creates an shellthickness object to define a plate thickness''' + obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) + import PyObjects._FemShellThickness + PyObjects._FemShellThickness._FemShellThickness(obj) + obj.Thickness = thickness + if FreeCAD.GuiUp: + import PyGui._ViewProviderFemShellThickness + PyGui._ViewProviderFemShellThickness._ViewProviderFemShellThickness(obj.ViewObject) + return obj + + ''' # print supportedTypes App.newDocument()