Ein Filter, der nur Elemente extrahiert, die Werte innerhalb des angegebenen Bereichs enthalten.
** Klassenreferenz ** https://vtk.org/doc/nightly/html/classvtkThreshold.html
Insbesondere das Beispiel in der folgenden Paraview ist leicht zu verstehen
Für das Berechnungsbeispiel habe ich "pitzDaily" aus dem "OpenFOAM" -Tutorial verwendet.
Drücken Sie diese Taste, nachdem Sie das Berechnungsergebnis gelesen haben
Ergebnis der Anwendung eines Bereichs von 5 bis 15 für Druck p
Nehmen Sie ein komplementäres Set
python 3.7 vtk 8.1.2
Bestätigungsmethode
import Vtk
print(vtk.vtkVersion.GetVTKSourceVersion())
>> vtk version 8.1.2
Ich benutze vtkOpenFOAMReader
, um das Ergebnis von OpenFOAM zu lesen
Über vtkOpenFOAMReader
werde ich es auch in [hier] zusammenfassen (https://qiita.com/matsubaradaisuke/items/2035a779ffc383820ad3)
import vtk
#Lesen Sie das Ergebnis von OpenFOAM
filename = "case1.foam"
reader = vtk.vtkOpenFOAMReader()
reader.SetFileName(filename)
reader.CreateCellToPointOn()
reader.DecomposePolyhedraOn()
reader.EnableAllCellArrays()
reader.Update()
#Wenden Sie das neueste Zeitergebnis an
n_step = reader.GetTimeValues().GetNumberOfValues()
latest_time = reader.GetTimeValues().GetValue(n_step-1)
reader.UpdateTimeStep(latest_time)
reader.Update()
filter_threshold = vtk.vtkThreshold()
filter_threshold.SetInputConnection(reader.GetOutputPort())
###################
#Fügen Sie hier Einstellungen hinzu#
###################
filter_threshold.Update()
filter = vtk.vtkGeometryFilter()
filter.SetInputConnection(filter_threshold.GetOutputPort())
filter.Update()
mapper = vtk.vtkCompositePolyDataMapper2()
mapper.SetInputConnection(filter.GetOutputPort()) #Filter im Mapper einstellen
mapper.SetScalarModeToUseCellFieldData() #Für skalare Daten einstellen
# renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(actor) #Stellen Sie den Schauspieler im Renderer ein
##Hintergrundfarbeneinstellung
renderer.GradientBackgroundOn() #Stellen Sie einen Verlaufshintergrund ein
renderer.SetBackground2(0.2,0.4,0.6) #Top Farbe
renderer.SetBackground(1,1,1) #Grundfarbe
#Window
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(renderer) #Stellen Sie den Renderer im Fenster ein
iren = vtk.vtkRenderWindowInteractor();
iren.SetRenderWindow(renWin);
renWin.SetSize(850, 850)
renWin.Render()
iren.Start();
ThresholdBetween()
Einschränkung durch Angabe der oberen und unteren Grenzen
#Stellen Sie den Schwellenwert zwischen 5 und 15 ein
filter_threshold.ThresholdBetween(5,15)
#enum FieldAssociations
# {
# FIELD_ASSOCIATION_POINTS,
# FIELD_ASSOCIATION_CELLS,
# FIELD_ASSOCIATION_NONE,
# FIELD_ASSOCIATION_POINTS_THEN_CELLS,
# FIELD_ASSOCIATION_VERTICES,
# FIELD_ASSOCIATION_EDGES,
# FIELD_ASSOCIATION_ROWS,
# NUMBER_OF_ASSOCIATIONS
# };
FIELD_ASSOCIATION_POINTS = 0
FIELD_ASSOCIATION_CELLS = 1
# "p"Filtert gegen Druck
filter_threshold.SetInputArrayToProcess(0,0,0,FIELD_ASSOCIATION_CELLS ,"p")
filter_threshold.Update()
In Übereinstimmung mit den Ergebnissen in der obigen Paraview
Wenn Sie nicht wissen, wie Sie die Methode verwenden sollen, können Sie sie möglicherweise mithilfe der Hilfefunktion lösen.
help(filter_threshold.SetInputArrayToProcess)
>>
Help on built-in function SetInputArrayToProcess:
SetInputArrayToProcess(...) method of vtkFiltersCorePython.vtkThreshold instance
V.SetInputArrayToProcess(int, int, int, int, string)
C++: virtual void SetInputArrayToProcess(int idx, int port,
int connection, int fieldAssociation, const char *name)
V.SetInputArrayToProcess(int, int, int, int, int)
C++: virtual void SetInputArrayToProcess(int idx, int port,
int connection, int fieldAssociation, int fieldAttributeType)
V.SetInputArrayToProcess(int, vtkInformation)
C++: virtual void SetInputArrayToProcess(int idx,
vtkInformation *info)
V.SetInputArrayToProcess(int, int, int, string, string)
C++: virtual void SetInputArrayToProcess(int idx, int port,
int connection, const char *fieldAssociation,
const char *attributeTypeorName)
Set the input data arrays that this algorithm will process.
Specifically the idx array that this algorithm will process
(starting from 0) is the array on port, connection with the
specified association and name or attribute type (such as
SCALARS). The fieldAssociation refers to which field in the data
object the array is stored. See vtkDataObject::FieldAssociations
for detail.
ThresholdByUpper()
Limit durch Angabe der Obergrenze Es werden nur Bereiche angezeigt, die größer als der angegebene Wert sind
#filter_threshold.ThresholdBetween(5,15)
filter_threshold.ThresholdByUpper(10)
Es wird nichts angezeigt, da der Zielbereich nicht vorhanden ist
ThresholdByLower()
Limit durch Angabe der Untergrenze Es werden nur Bereiche angezeigt, die kleiner als der angegebene Wert sind
#filter_threshold.ThresholdBetween(5,15)
filter_threshold.ThresholdByLower(5)
Infolgedessen stimmte es mit dem Ergebnis von Invertieren in der obigen Paraview überein.
Anscheinend ist die Invert-Beziehung bereits in c ++ implementiert, aber nicht in der Python-Version.
filter_threshold.SetInvert(True)
AttributeError
---> 31 filter_threshold.SetInvert(True)
AttributeError: 'vtkFiltersCorePython.vtkThreshold' object has no attribute 'SetInvert'
GetUpperThreshold Holen Sie sich die Obergrenze des Schwellenwerts
filter_threshold.ThresholdBetween(-100,100)
filter_threshold.GetUpperThreshold()
>> 100
GetLowerThreshold Holen Sie sich die Untergrenze des Schwellenwerts
filter_threshold.ThresholdBetween(-100,100)
filter_threshold.GetLowerThreshold()
>> -100
Set/GetAttributeMode
filter_threshold.SetAttributeModeToDefault()
filter_threshold.GetAttributeMode()
>>0
filter_threshold.SetAttributeModeToUsePointData()
filter_threshold.GetAttributeMode()
>>1
filter_threshold.GetAttributeModeAsString()
>>'UsePointData'
filter_threshold.SetAttributeModeToUseCellData()
filter_threshold.GetAttributeMode()
>>2
filter_threshold.GetAttributeModeAsString()
>>'UseCellData'
filter_threshold.SetAttributeMode(2)
filter_threshold.GetAttributeModeAsString()
>>'UseCellData'
Ich werde es aktualisieren, wenn ich Lust dazu habe