FEM: Plot single frame index data as point
This commit is contained in:
@@ -70,6 +70,9 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>999999999</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -149,36 +149,40 @@ class PostIndexOverFrames1D(base_fempostextractors.Extractor1D):
|
||||
obj.Table = table
|
||||
return
|
||||
|
||||
# check if we have timesteps (required!)
|
||||
abort = True
|
||||
# check if we have timesteps
|
||||
timesteps = []
|
||||
info = obj.Source.getOutputAlgorithm().GetOutputInformation(0)
|
||||
if info.Has(vtkStreamingDemandDrivenPipeline.TIME_STEPS()):
|
||||
timesteps = info.Get(vtkStreamingDemandDrivenPipeline.TIME_STEPS())
|
||||
if len(timesteps) > 1:
|
||||
abort = False
|
||||
|
||||
if abort:
|
||||
FreeCAD.Console.PrintWarning("Not sufficient frames available in data, cannot extract data")
|
||||
obj.Table = table
|
||||
return
|
||||
|
||||
algo = obj.Source.getOutputAlgorithm()
|
||||
setup = False
|
||||
frame_array = vtkDoubleArray()
|
||||
|
||||
idx = obj.Index
|
||||
for i, timestep in enumerate(timesteps):
|
||||
|
||||
algo.UpdateTimeStep(timestep)
|
||||
if timesteps:
|
||||
setup = False
|
||||
for i, timestep in enumerate(timesteps):
|
||||
|
||||
algo.UpdateTimeStep(timestep)
|
||||
dataset = algo.GetOutputDataObject(0)
|
||||
array = self._x_array_from_dataset(obj, dataset, copy=False)
|
||||
|
||||
if not setup:
|
||||
frame_array.SetNumberOfComponents(array.GetNumberOfComponents())
|
||||
frame_array.SetNumberOfTuples(len(timesteps))
|
||||
setup = True
|
||||
|
||||
frame_array.SetTuple(i, idx, array)
|
||||
else:
|
||||
algo.Update()
|
||||
dataset = algo.GetOutputDataObject(0)
|
||||
array = self._x_array_from_dataset(obj, dataset, copy=False)
|
||||
|
||||
if not setup:
|
||||
frame_array.SetNumberOfComponents(array.GetNumberOfComponents())
|
||||
frame_array.SetNumberOfTuples(len(timesteps))
|
||||
setup = True
|
||||
frame_array.SetNumberOfComponents(array.GetNumberOfComponents())
|
||||
frame_array.SetNumberOfTuples(1)
|
||||
frame_array.SetTuple(0, idx, array)
|
||||
|
||||
frame_array.SetTuple(i, idx, array)
|
||||
|
||||
if frame_array.GetNumberOfComponents() > 1:
|
||||
frame_array.SetName(f"{obj.XField} ({obj.XComponent}) @Idx {obj.Index}")
|
||||
|
||||
@@ -174,41 +174,49 @@ class PostIndexOverFrames2D(base_fempostextractors.Extractor2D):
|
||||
return
|
||||
|
||||
# check if we have timesteps (required!)
|
||||
abort = True
|
||||
timesteps = []
|
||||
info = obj.Source.getOutputAlgorithm().GetOutputInformation(0)
|
||||
if info.Has(vtkStreamingDemandDrivenPipeline.TIME_STEPS()):
|
||||
timesteps = info.Get(vtkStreamingDemandDrivenPipeline.TIME_STEPS())
|
||||
if len(timesteps) > 1:
|
||||
abort = False
|
||||
|
||||
if abort:
|
||||
FreeCAD.Console.PrintWarning("Not sufficient frames available in data, cannot extract data")
|
||||
obj.Table = table
|
||||
return
|
||||
|
||||
algo = obj.Source.getOutputAlgorithm()
|
||||
|
||||
frame_x_array = vtkDoubleArray()
|
||||
frame_x_array.SetNumberOfTuples(len(timesteps))
|
||||
frame_x_array.SetNumberOfComponents(1)
|
||||
|
||||
|
||||
frame_y_array = vtkDoubleArray()
|
||||
idx = obj.Index
|
||||
setup = False
|
||||
for i, timestep in enumerate(timesteps):
|
||||
|
||||
frame_x_array.SetTuple1(i, timestep)
|
||||
if timesteps:
|
||||
setup = False
|
||||
frame_x_array.SetNumberOfTuples(len(timesteps))
|
||||
frame_x_array.SetNumberOfComponents(1)
|
||||
for i, timestep in enumerate(timesteps):
|
||||
|
||||
algo.UpdateTimeStep(timestep)
|
||||
frame_x_array.SetTuple1(i, timestep)
|
||||
|
||||
algo.UpdateTimeStep(timestep)
|
||||
dataset = algo.GetOutputDataObject(0)
|
||||
array = self._y_array_from_dataset(obj, dataset, copy=False)
|
||||
if not setup:
|
||||
frame_y_array.SetNumberOfComponents(array.GetNumberOfComponents())
|
||||
frame_y_array.SetNumberOfTuples(len(timesteps))
|
||||
setup = True
|
||||
|
||||
frame_y_array.SetTuple(i, idx, array)
|
||||
|
||||
else:
|
||||
frame_x_array.SetNumberOfTuples(1)
|
||||
frame_x_array.SetNumberOfComponents(1)
|
||||
frame_x_array.SetTuple1(0,0)
|
||||
|
||||
algo.Update()
|
||||
dataset = algo.GetOutputDataObject(0)
|
||||
array = self._y_array_from_dataset(obj, dataset, copy=False)
|
||||
if not setup:
|
||||
frame_y_array.SetNumberOfComponents(array.GetNumberOfComponents())
|
||||
frame_y_array.SetNumberOfTuples(len(timesteps))
|
||||
setup = True
|
||||
|
||||
frame_y_array.SetTuple(i, idx, array)
|
||||
frame_y_array.SetNumberOfComponents(array.GetNumberOfComponents())
|
||||
frame_y_array.SetNumberOfTuples(1)
|
||||
frame_y_array.SetTuple(0, idx, array)
|
||||
|
||||
|
||||
frame_x_array.SetName("Frames")
|
||||
if frame_y_array.GetNumberOfComponents() > 1:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# ***************************************************************************
|
||||
2# ***************************************************************************
|
||||
# * Copyright (c) 2025 Stefan Tröger <stefantroeger@gmx.net> *
|
||||
# * *
|
||||
# * This file is part of the FreeCAD CAx development system. *
|
||||
|
||||
@@ -516,6 +516,10 @@ class VPPostLineplot(view_base_fempostvisualization.VPPostVisualization):
|
||||
xdata = VTKArray(table.GetColumn(i))
|
||||
ydata = VTKArray(table.GetColumn(i+1))
|
||||
|
||||
# ensure points are visible if it is a single datapoint
|
||||
if len(xdata) == 1 and tmp_args["marker"] == "None":
|
||||
tmp_args["marker"] = "o"
|
||||
|
||||
# legend labels
|
||||
if child.ViewObject.Legend:
|
||||
if not legend_multiframe:
|
||||
|
||||
Reference in New Issue
Block a user