| # *************************************************************************** | |
| # * Copyright (c) 2019 Bernd Hahnebach <bernd@bimstatik.org> * | |
| # * Copyright (c) 2020 Sudhanshu Dubey <sudhanshu.thethunder@gmail.com * | |
| # * * | |
| # * 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 * | |
| # * * | |
| # *************************************************************************** | |
| import FreeCAD | |
| import Fem | |
| import ObjectsFem | |
| from .manager import get_meshname | |
| from .manager import init_doc | |
| def setup_boxanalysisbase(doc=None, solvertype="ccxtools"): | |
| # init FreeCAD document | |
| if doc is None: | |
| doc = init_doc() | |
| # geometric objects | |
| # object name is important in this base setup method | |
| # all module which use this base setup, use the object name to find the object | |
| geom_obj = doc.addObject("Part::Box", "Box") | |
| geom_obj.Height = geom_obj.Width = geom_obj.Length = 10 | |
| doc.recompute() | |
| if FreeCAD.GuiUp: | |
| geom_obj.ViewObject.Document.activeView().viewAxonometric() | |
| geom_obj.ViewObject.Document.activeView().fitAll() | |
| # analysis | |
| analysis = ObjectsFem.makeAnalysis(doc, "Analysis") | |
| # material | |
| material_obj = ObjectsFem.makeMaterialSolid(doc, "MechanicalMaterial") | |
| mat = material_obj.Material | |
| mat["Name"] = "Steel-Generic" | |
| mat["YoungsModulus"] = "200000 MPa" | |
| mat["PoissonRatio"] = "0.30" | |
| mat["Density"] = "7900 kg/m^3" | |
| material_obj.Material = mat | |
| analysis.addObject(material_obj) | |
| # mesh | |
| from .meshes.mesh_boxanalysis_tetra10 import create_nodes, create_elements | |
| fem_mesh = Fem.FemMesh() | |
| control = create_nodes(fem_mesh) | |
| if not control: | |
| FreeCAD.Console.PrintError("Error on creating nodes.\n") | |
| control = create_elements(fem_mesh) | |
| if not control: | |
| FreeCAD.Console.PrintError("Error on creating elements.\n") | |
| femmesh_obj = analysis.addObject(ObjectsFem.makeMeshGmsh(doc, get_meshname()))[0] | |
| femmesh_obj.FemMesh = fem_mesh | |
| femmesh_obj.Shape = geom_obj | |
| femmesh_obj.SecondOrderLinear = False | |
| femmesh_obj.CharacteristicLengthMin = "8.0 mm" | |
| femmesh_obj.ElementOrder = "2nd" | |
| doc.recompute() | |
| return doc | |