FEM: Replace invalid ElementNumbers with NodeNumbers
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
This commit is contained in:
parent
a85c68aa65
commit
d025f1e109
|
@ -37,7 +37,7 @@ PROPERTY_SOURCE(Fem::FemResultObject, App::DocumentObject)
|
|||
|
||||
FemResultObject::FemResultObject()
|
||||
{
|
||||
ADD_PROPERTY_TYPE(ElementNumbers,(0), "Data",Prop_None,"Numbers of the result elements");
|
||||
ADD_PROPERTY_TYPE(NodeNumbers,(0), "Data",Prop_None,"Numbers of the result nodes");
|
||||
ADD_PROPERTY_TYPE(Stats,(0), "Fem",Prop_None,"Statistics of the results");
|
||||
ADD_PROPERTY_TYPE(DisplacementVectors,(), "Fem",Prop_None,"List of displacement vectors");
|
||||
ADD_PROPERTY_TYPE(DisplacementLengths,(0), "Fem",Prop_None,"List of displacement lengths");
|
||||
|
|
|
@ -42,7 +42,7 @@ public:
|
|||
FemResultObject(void);
|
||||
virtual ~FemResultObject();
|
||||
|
||||
App::PropertyIntegerList ElementNumbers;
|
||||
App::PropertyIntegerList NodeNumbers;
|
||||
/// Link to the corresponding mesh
|
||||
App::PropertyLink Mesh;
|
||||
/// Stats of analysis
|
||||
|
|
|
@ -134,10 +134,10 @@ class FemTools(QtCore.QRunnable, QtCore.QObject):
|
|||
filtered_values.append(v)
|
||||
else:
|
||||
filtered_values = values
|
||||
self.mesh.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, filtered_values)
|
||||
self.mesh.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, filtered_values)
|
||||
|
||||
def show_displacement(self, displacement_factor=0.0):
|
||||
self.mesh.ViewObject.setNodeDisplacementByVectors(self.result_object.ElementNumbers,
|
||||
self.mesh.ViewObject.setNodeDisplacementByVectors(self.result_object.NodeNumbers,
|
||||
self.result_object.DisplacementVectors)
|
||||
self.mesh.ViewObject.applyDisplacement(displacement_factor)
|
||||
|
||||
|
|
|
@ -136,7 +136,7 @@ class _ResultControlTaskPanel:
|
|||
FreeCAD.FEM_dialog["results_type"] = "Sabs"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, self.result_object.StressValues)
|
||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, self.result_object.StressValues)
|
||||
(minm, avg, maxm) = self.get_result_stats("Sabs")
|
||||
self.set_result_stats("MPa", minm, avg, maxm)
|
||||
QtGui.qApp.restoreOverrideCursor()
|
||||
|
@ -145,13 +145,13 @@ class _ResultControlTaskPanel:
|
|||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if disp_type == "Uabs":
|
||||
if self.suitable_results:
|
||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, self.result_object.DisplacementLengths)
|
||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, self.result_object.DisplacementLengths)
|
||||
else:
|
||||
match = {"U1": 0, "U2": 1, "U3": 2}
|
||||
d = zip(*self.result_object.DisplacementVectors)
|
||||
displacements = list(d[match[disp_type]])
|
||||
if self.suitable_results:
|
||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.ElementNumbers, displacements)
|
||||
self.MeshObject.ViewObject.setNodeColorByScalars(self.result_object.NodeNumbers, displacements)
|
||||
(minm, avg, maxm) = self.get_result_stats(disp_type)
|
||||
self.set_result_stats("mm", minm, avg, maxm)
|
||||
QtGui.qApp.restoreOverrideCursor()
|
||||
|
@ -180,7 +180,7 @@ class _ResultControlTaskPanel:
|
|||
self.update_displacement()
|
||||
FreeCAD.FEM_dialog["result_object"] = self.result_object
|
||||
if self.suitable_results:
|
||||
self.MeshObject.ViewObject.setNodeDisplacementByVectors(self.result_object.ElementNumbers, self.result_object.DisplacementVectors)
|
||||
self.MeshObject.ViewObject.setNodeDisplacementByVectors(self.result_object.NodeNumbers, self.result_object.DisplacementVectors)
|
||||
self.update_displacement()
|
||||
QtGui.qApp.restoreOverrideCursor()
|
||||
|
||||
|
@ -207,7 +207,7 @@ class _ResultControlTaskPanel:
|
|||
|
||||
self.suitable_results = False
|
||||
if self.result_object:
|
||||
if self.MeshObject.FemMesh.NodeCount == len(self.result_object.ElementNumbers):
|
||||
if self.MeshObject.FemMesh.NodeCount == len(self.result_object.NodeNumbers):
|
||||
self.suitable_results = True
|
||||
else:
|
||||
if not self.MeshObject.FemMesh.VolumeCount:
|
||||
|
|
|
@ -214,7 +214,7 @@ def importFrd(filename, Analysis=None):
|
|||
|
||||
if len(disp) > 0:
|
||||
results.DisplacementVectors = map((lambda x: x * scale), disp.values())
|
||||
results.ElementNumbers = disp.keys()
|
||||
results.NodeNumbers = disp.keys()
|
||||
if(MeshObject):
|
||||
results.Mesh = MeshObject
|
||||
|
||||
|
@ -231,10 +231,10 @@ def importFrd(filename, Analysis=None):
|
|||
else:
|
||||
results.StressValues = mstress
|
||||
|
||||
if (results.ElementNumbers != 0 and results.ElementNumbers != stress.keys()):
|
||||
if (results.NodeNumbers != 0 and results.NodeNumbers != stress.keys()):
|
||||
print ("Inconsistent FEM results: element number for Stress doesn't equal element number for Displacement {} != {}"
|
||||
.format(results.ElementNumbers, len(results.StressValues)))
|
||||
results.ElementNumbers = stress.keys()
|
||||
.format(results.NodeNumbers, len(results.StressValues)))
|
||||
results.NodeNumbers = stress.keys()
|
||||
|
||||
x_min, y_min, z_min = map(min, zip(*displacement))
|
||||
sum_list = map(sum, zip(*displacement))
|
||||
|
|
Loading…
Reference in New Issue
Block a user