FEM: analysis member, get rid of duplicate code in getting the analysis mesh
This commit is contained in:
@@ -32,6 +32,8 @@ import subprocess
|
||||
import os.path
|
||||
|
||||
import FreeCAD
|
||||
if FreeCAD.GuiUp:
|
||||
from PySide import QtGui
|
||||
import femtools.femutils as femutils
|
||||
import feminout.importCcxFrdResults as importCcxFrdResults
|
||||
import feminout.importCcxDatResults as importCcxDatResults
|
||||
@@ -151,7 +153,17 @@ class _Container(object):
|
||||
|
||||
def __init__(self, analysis):
|
||||
self.analysis = analysis
|
||||
self.mesh = None
|
||||
|
||||
# get mesh
|
||||
mesh, message = femutils.get_mesh_to_solve(self.analysis)
|
||||
if mesh is not None:
|
||||
self.mesh = mesh
|
||||
else:
|
||||
if FreeCAD.GuiUp:
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
|
||||
raise Exception(message + '\n')
|
||||
|
||||
# get member
|
||||
self.materials_linear = self.get_several_member('Fem::Material')
|
||||
self.materials_nonlinear = self.get_several_member('Fem::MaterialMechanicalNonlinear')
|
||||
self.fixed_constraints = self.get_several_member('Fem::ConstraintFixed')
|
||||
@@ -170,13 +182,6 @@ class _Container(object):
|
||||
self.contact_constraints = self.get_several_member('Fem::ConstraintContact')
|
||||
self.transform_constraints = self.get_several_member('Fem::ConstraintTransform')
|
||||
|
||||
for m in self.analysis.Group:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject") and not femutils.is_of_type(m, 'Fem::FemMeshResult'):
|
||||
if not self.mesh:
|
||||
self.mesh = m
|
||||
else:
|
||||
raise Exception('FEM: Multiple mesh in analysis not yet supported!')
|
||||
|
||||
def get_several_member(self, t):
|
||||
return femutils.get_several_member(self.analysis, t)
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@ import subprocess
|
||||
import os.path
|
||||
|
||||
import FreeCAD
|
||||
if FreeCAD.GuiUp:
|
||||
from PySide import QtGui
|
||||
import femtools.femutils as femutils
|
||||
import feminout.importZ88O2Results as importZ88O2Results
|
||||
|
||||
@@ -137,7 +139,17 @@ class _Container(object):
|
||||
|
||||
def __init__(self, analysis):
|
||||
self.analysis = analysis
|
||||
self.mesh = None
|
||||
|
||||
# get mesh
|
||||
mesh, message = femutils.get_mesh_to_solve(self.analysis)
|
||||
if mesh is not None:
|
||||
self.mesh = mesh
|
||||
else:
|
||||
if FreeCAD.GuiUp:
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
|
||||
raise Exception(message + '\n')
|
||||
|
||||
# get member
|
||||
self.materials_linear = self.get_several_member('Fem::Material')
|
||||
self.fixed_constraints = self.get_several_member('Fem::ConstraintFixed')
|
||||
self.force_constraints = self.get_several_member('Fem::ConstraintForce')
|
||||
@@ -158,13 +170,6 @@ class _Container(object):
|
||||
self.contact_constraints = []
|
||||
self.transform_constraints = []
|
||||
|
||||
for m in self.analysis.Group:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject") and not femutils.is_of_type(m, 'Fem::FemMeshResult'):
|
||||
if not self.mesh:
|
||||
self.mesh = m
|
||||
else:
|
||||
raise Exception('FEM: Multiple mesh in analysis not yet supported!')
|
||||
|
||||
def get_several_member(self, t):
|
||||
return femutils.get_several_member(self.analysis, t)
|
||||
|
||||
|
||||
@@ -146,6 +146,17 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
# FreeCAD.Console.PrintMessage('FEM: More than one solver in the analysis and no solver given to analyze. No solver is set!\n')
|
||||
|
||||
def update_objects(self):
|
||||
## @var mesh
|
||||
# mesh of the analysis. Used to generate .inp file and to show results
|
||||
self.mesh = None
|
||||
mesh, message = femutils.get_mesh_to_solve(self.analysis)
|
||||
if mesh is not None:
|
||||
self.mesh = mesh
|
||||
else:
|
||||
if FreeCAD.GuiUp:
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
|
||||
raise Exception(message + '\n')
|
||||
|
||||
# [{'Object':materials_linear}, {}, ...]
|
||||
# [{'Object':materials_nonlinear}, {}, ...]
|
||||
# [{'Object':fixed_constraints, 'NodeSupports':bool}, {}, ...]
|
||||
@@ -160,9 +171,6 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
# [{'Object':shell_thicknesses, 'xxxxxxxx':value}, {}, ...]
|
||||
# [{'Object':contact_constraints, 'xxxxxxxx':value}, {}, ...]
|
||||
|
||||
## @var mesh
|
||||
# mesh of the analysis. Used to generate .inp file and to show results
|
||||
self.mesh = None
|
||||
## @var materials_linear
|
||||
# list of linear materials from the analysis. Updated with update_objects
|
||||
self.materials_linear = self._get_several_member('Fem::Material')
|
||||
@@ -215,16 +223,6 @@ class FemToolsCcx(QtCore.QRunnable, QtCore.QObject):
|
||||
# list of transform constraints from the analysis. Updated with update_objects
|
||||
self.transform_constraints = self._get_several_member('Fem::ConstraintTransform')
|
||||
|
||||
for m in self.analysis.Group:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject") and not femutils.is_of_type(m, 'Fem::FemMeshResult'):
|
||||
if not self.mesh:
|
||||
self.mesh = m
|
||||
else:
|
||||
message = 'FEM: Multiple mesh in analysis not yet supported!'
|
||||
if FreeCAD.GuiUp:
|
||||
QtGui.QMessageBox.critical(None, "Missing prerequisite", message)
|
||||
raise Exception(message + '\n')
|
||||
|
||||
def check_prerequisites(self):
|
||||
from FreeCAD import Units
|
||||
message = ""
|
||||
|
||||
@@ -32,6 +32,7 @@ import FreeCAD
|
||||
import FreeCAD as App
|
||||
|
||||
|
||||
# analysis and its members
|
||||
def createObject(doc, name, proxy, viewProxy):
|
||||
obj = doc.addObject(proxy.BaseType, name)
|
||||
proxy(obj)
|
||||
@@ -89,6 +90,20 @@ def get_several_member(analysis, t):
|
||||
return members
|
||||
|
||||
|
||||
def get_mesh_to_solve(analysis):
|
||||
mesh_to_solve = None
|
||||
for m in analysis.Group:
|
||||
if m.isDerivedFrom("Fem::FemMeshObject") and not is_of_type(m, 'Fem::FemMeshResult'):
|
||||
if not mesh_to_solve:
|
||||
mesh_to_solve = m
|
||||
else:
|
||||
return (None, 'FEM: multiple mesh in analysis not yet supported!')
|
||||
if mesh_to_solve is not None:
|
||||
return (mesh_to_solve, '')
|
||||
else:
|
||||
return (None, 'FEM: no mesh object found in analysis.')
|
||||
|
||||
|
||||
# typeID and object type defs
|
||||
def type_of_obj(obj):
|
||||
'''returns objects TypeId (C++ objects) or Proxy.Type (Python objects)'''
|
||||
|
||||
Reference in New Issue
Block a user