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
|
convert2TetGen.py
|
||||||
ccxFrdReader.py
|
ccxFrdReader.py
|
||||||
ccxInpWriter.py
|
ccxInpWriter.py
|
||||||
|
FemTools.py
|
||||||
MechanicalAnalysis.ui
|
MechanicalAnalysis.ui
|
||||||
MechanicalAnalysis.py
|
MechanicalAnalysis.py
|
||||||
MechanicalMaterial.ui
|
MechanicalMaterial.ui
|
||||||
|
|
|
@ -12,6 +12,7 @@ INSTALL(
|
||||||
convert2TetGen.py
|
convert2TetGen.py
|
||||||
ccxFrdReader.py
|
ccxFrdReader.py
|
||||||
ccxInpWriter.py
|
ccxInpWriter.py
|
||||||
|
FemTools.py
|
||||||
FemExample.py
|
FemExample.py
|
||||||
MechanicalAnalysis.py
|
MechanicalAnalysis.py
|
||||||
MechanicalMaterial.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 ccxFrdReader
|
||||||
import FreeCAD
|
import FreeCAD
|
||||||
|
from FemTools import FemTools
|
||||||
import FemGui
|
import FemGui
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
@ -135,9 +136,10 @@ class _CommandPurgeFemResults:
|
||||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_PurgeResults", "Purge results from an analysis")}
|
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Fem_PurgeResults", "Purge results from an analysis")}
|
||||||
|
|
||||||
def Activated(self):
|
def Activated(self):
|
||||||
purge_fem_results()
|
fea = FemTools()
|
||||||
reset_mesh_color()
|
fea.purge_results()
|
||||||
reset_mesh_deformation()
|
fea.reset_mesh_color()
|
||||||
|
fea.reset_mesh_deformation()
|
||||||
|
|
||||||
def IsActive(self):
|
def IsActive(self):
|
||||||
return FreeCADGui.ActiveDocument is not None and results_present()
|
return FreeCADGui.ActiveDocument is not None and results_present()
|
||||||
|
@ -335,9 +337,10 @@ class _JobControlTaskPanel:
|
||||||
print "Loading results...."
|
print "Loading results...."
|
||||||
self.femConsoleMessage("Loading result sets...")
|
self.femConsoleMessage("Loading result sets...")
|
||||||
self.form.label_Time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
self.form.label_Time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||||
purge_fem_results()
|
fea = FemTools()
|
||||||
reset_mesh_color()
|
fea.purge_results()
|
||||||
reset_mesh_deformation()
|
fea.reset_mesh_color()
|
||||||
|
fea.reset_mesh_deformation()
|
||||||
if os.path.isfile(self.base_name + '.frd'):
|
if os.path.isfile(self.base_name + '.frd'):
|
||||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||||
ccxFrdReader.importFrd(self.base_name + '.frd', FemGui.getActiveAnalysis())
|
ccxFrdReader.importFrd(self.base_name + '.frd', FemGui.getActiveAnalysis())
|
||||||
|
@ -408,8 +411,8 @@ class _JobControlTaskPanel:
|
||||||
self.PressureObjects = []
|
self.PressureObjects = []
|
||||||
(self.MeshObject, self.MaterialObjects, self.FixedObjects, self.ForceObjects, self.PressureObjects) = prepare_analysis_objects()
|
(self.MeshObject, self.MaterialObjects, self.FixedObjects, self.ForceObjects, self.PressureObjects) = prepare_analysis_objects()
|
||||||
|
|
||||||
message = check_prerequisites(active_analysis, self.MeshObject, self.MaterialObjects,
|
message = check_prerequisites(active_analysis, self.MeshObject, self.MaterialObjects,
|
||||||
self.FixedObjects, self.ForceObjects, self.PressureObjects)
|
self.FixedObjects, self.ForceObjects, self.PressureObjects)
|
||||||
if message != "":
|
if message != "":
|
||||||
QtGui.QMessageBox.critical(None, "Missing prerequisit(s)", message)
|
QtGui.QMessageBox.critical(None, "Missing prerequisit(s)", message)
|
||||||
return False
|
return False
|
||||||
|
@ -532,7 +535,8 @@ class _ResultControlTaskPanel:
|
||||||
def none_selected(self, state):
|
def none_selected(self, state):
|
||||||
FreeCAD.FEM_dialog["results_type"] = "None"
|
FreeCAD.FEM_dialog["results_type"] = "None"
|
||||||
self.set_result_stats("mm", 0.0, 0.0, 0.0)
|
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):
|
def abs_displacement_selected(self, state):
|
||||||
FreeCAD.FEM_dialog["results_type"] = "Uabs"
|
FreeCAD.FEM_dialog["results_type"] = "Uabs"
|
||||||
|
@ -627,34 +631,6 @@ def results_present():
|
||||||
return results
|
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():
|
def prepare_analysis_objects():
|
||||||
MeshObject = None
|
MeshObject = None
|
||||||
MaterialObjects = []
|
MaterialObjects = []
|
||||||
|
|
Loading…
Reference in New Issue
Block a user