FEM: Add basic FemTools module
That module will handle in the future all non-gui related features that are currently in MechanicalAnalysis.py. It will allow easier python scripting and greater flexibility when creating new FEM wb features. Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
parent
2abdcf3b57
commit
e0956f67f3
|
@ -71,6 +71,7 @@ SET(FemScripts_SRCS
|
|||
convert2TetGen.py
|
||||
ccxFrdReader.py
|
||||
ccxInpWriter.py
|
||||
FemTools.py
|
||||
MechanicalAnalysis.ui
|
||||
MechanicalAnalysis.py
|
||||
MechanicalMaterial.ui
|
||||
|
|
|
@ -12,6 +12,7 @@ INSTALL(
|
|||
convert2TetGen.py
|
||||
ccxFrdReader.py
|
||||
ccxInpWriter.py
|
||||
FemTools.py
|
||||
FemExample.py
|
||||
MechanicalAnalysis.py
|
||||
MechanicalMaterial.py
|
||||
|
|
52
src/Mod/Fem/FemTools.py
Normal file
52
src/Mod/Fem/FemTools.py
Normal file
|
@ -0,0 +1,52 @@
|
|||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2015 - Przemo Firszt <przemo@firszt.eu> *
|
||||
#* *
|
||||
#* 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 FemGui
|
||||
|
||||
|
||||
class FemTools:
|
||||
def __init__(self, analysis_object=None):
|
||||
if analysis_object:
|
||||
self.fem_analysis = analysis_object
|
||||
else:
|
||||
self.fem_analysis = FemGui.getActiveAnalysis()
|
||||
self.mesh = None
|
||||
for m in self.fem_analysis.Member:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject"):
|
||||
self.mesh = m
|
||||
|
||||
def purge_results(self):
|
||||
for m in self.fem_analysis.Member:
|
||||
if (m.isDerivedFrom('Fem::FemResultObject')):
|
||||
FreeCAD.ActiveDocument.removeObject(m.Name)
|
||||
|
||||
def reset_mesh_deformation(self):
|
||||
if self.mesh:
|
||||
self.mesh.ViewObject.applyDisplacement(0.0)
|
||||
|
||||
def reset_mesh_color(self):
|
||||
if self.mesh:
|
||||
self.mesh.ViewObject.NodeColor = {}
|
||||
self.mesh.ViewObject.ElementColor = {}
|
||||
self.mesh.ViewObject.setNodeColorByScalars()
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
import ccxFrdReader
|
||||
import FreeCAD
|
||||
from FemTools import FemTools
|
||||
import FemGui
|
||||
import os
|
||||
import sys
|
||||
|
@ -135,9 +136,10 @@ class _CommandPurgeFemResults:
|
|||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_PurgeResults", "Purge results from an analysis")}
|
||||
|
||||
def Activated(self):
|
||||
purge_fem_results()
|
||||
reset_mesh_color()
|
||||
reset_mesh_deformation()
|
||||
fea = FemTools()
|
||||
fea.purge_results()
|
||||
fea.reset_mesh_color()
|
||||
fea.reset_mesh_deformation()
|
||||
|
||||
def IsActive(self):
|
||||
return FreeCADGui.ActiveDocument is not None and results_present()
|
||||
|
@ -335,9 +337,10 @@ class _JobControlTaskPanel:
|
|||
print "Loading results...."
|
||||
self.femConsoleMessage("Loading result sets...")
|
||||
self.form.label_Time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||
purge_fem_results()
|
||||
reset_mesh_color()
|
||||
reset_mesh_deformation()
|
||||
fea = FemTools()
|
||||
fea.purge_results()
|
||||
fea.reset_mesh_color()
|
||||
fea.reset_mesh_deformation()
|
||||
if os.path.isfile(self.base_name + '.frd'):
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
ccxFrdReader.importFrd(self.base_name + '.frd', FemGui.getActiveAnalysis())
|
||||
|
@ -408,8 +411,8 @@ class _JobControlTaskPanel:
|
|||
self.PressureObjects = []
|
||||
(self.MeshObject, self.MaterialObjects, self.FixedObjects, self.ForceObjects, self.PressureObjects) = prepare_analysis_objects()
|
||||
|
||||
message = check_prerequisites(active_analysis, self.MeshObject, self.MaterialObjects,
|
||||
self.FixedObjects, self.ForceObjects, self.PressureObjects)
|
||||
message = check_prerequisites(active_analysis, self.MeshObject, self.MaterialObjects,
|
||||
self.FixedObjects, self.ForceObjects, self.PressureObjects)
|
||||
if message != "":
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisit(s)", message)
|
||||
return False
|
||||
|
@ -532,7 +535,8 @@ class _ResultControlTaskPanel:
|
|||
def none_selected(self, state):
|
||||
FreeCAD.FEM_dialog["results_type"] = "None"
|
||||
self.set_result_stats("mm", 0.0, 0.0, 0.0)
|
||||
reset_mesh_color()
|
||||
fea = FemTools()
|
||||
fea.reset_mesh_color()
|
||||
|
||||
def abs_displacement_selected(self, state):
|
||||
FreeCAD.FEM_dialog["results_type"] = "Uabs"
|
||||
|
@ -627,34 +631,6 @@ def results_present():
|
|||
return results
|
||||
|
||||
|
||||
def purge_fem_results(Analysis=None):
|
||||
if Analysis is None:
|
||||
analysis_members = FemGui.getActiveAnalysis().Member
|
||||
else:
|
||||
analysis_members = FemGui.Analysis().Member
|
||||
for o in analysis_members:
|
||||
if o.isDerivedFrom("Fem::FemResultObject"):
|
||||
FreeCAD.ActiveDocument.removeObject(o.Name)
|
||||
|
||||
|
||||
def reset_mesh_color(mesh=None):
|
||||
if mesh is None:
|
||||
for i in FemGui.getActiveAnalysis().Member:
|
||||
if i.isDerivedFrom("Fem::FemMeshObject"):
|
||||
mesh = i
|
||||
mesh.ViewObject.NodeColor = {}
|
||||
mesh.ViewObject.ElementColor = {}
|
||||
mesh.ViewObject.setNodeColorByScalars()
|
||||
|
||||
|
||||
def reset_mesh_deformation(mesh=None):
|
||||
if mesh is None:
|
||||
for i in FemGui.getActiveAnalysis().Member:
|
||||
if i.isDerivedFrom("Fem::FemMeshObject"):
|
||||
mesh = i
|
||||
mesh.ViewObject.applyDisplacement(0.0)
|
||||
|
||||
|
||||
def prepare_analysis_objects():
|
||||
MeshObject = None
|
||||
MaterialObjects = []
|
||||
|
|
Loading…
Reference in New Issue
Block a user