[PYTHON] vtkClipPolyData / DataSet-Zusammenfassung (von Zeit zu Zeit aktualisiert)

Informationen zu vtkClipPolyData / DataSet

Ich werde "Clip" zusammenfassen, der den Bereich der anzuzeigenden Form basierend auf der Quellform begrenzt.

Wenn Sie eine Form mit Vertikalen, Linien und Dreiecken wie "STL", "vtkPolyData" ausdrücken Wenn Sie mit einem nicht strukturellen Raster wie "OpenFOAM" ausdrücken, ist es eine ordnungsgemäße Verwendung von "vtkDataSet"? Ich kenne die Details noch nicht

vtkClipPolyData-Klassenreferenz

https://vtk.org/doc/nightly/html/classvtkClipPolyData.html

image.png

vtkClipDataSet-Klassenreferenz

https://vtk.org/doc/nightly/html/classvtkClipDataSet.html

image.png

Überprüfen Sie die Funktion mit Paraview

Clip-Funktion image.png

Wenn ClipType auf Ebene eingestellt ist, wird der Anzeigebereich mithilfe der Ebene mit Ursprung und Normal begrenzt.

image.png

image.png

Durch Umschalten der Invert-Prüfung kann der angezeigte Bereich umgekehrt werden.

image.png

Wenn Crinkle-Clip angewendet wird, behält das in der Ebene enthaltene Netz seine ursprüngliche Form bei. image.png

Funktionsprüfung mit Python

Umgebung

python 3.7 vtk 8.1.2

Beispiel für das Abschneiden mit dem Basiscode (Ebene)

)

import vtk

filename = "flange.stl"
reader = vtk.vtkSTLReader()
reader.SetFileName(filename)
reader.Update()

normal='y' # e.g. x,y,z,-x,-y,-z,X,Y,Z,-X,-Y,or -Z

NORMALS = {
    'x': [1, 0, 0],
    'y': [0, 1, 0],
    'z': [0, 0, 1],
    '-x': [-1, 0, 0],
    '-y': [0, -1, 0],
    '-z': [0, 0, -1],
}
normal = NORMALS[normal.lower()] # or e.g. [1.0/sqrt(2.0), 1.0/sqrt(2.0), 0]
origin = (0,0,0)
invert=True

plane = vtk.vtkPlane()
plane.SetNormal(normal)
plane.SetOrigin(origin)

alg = vtk.vtkClipPolyData()
alg.SetInputConnection(reader.GetOutputPort())

alg.SetClipFunction(plane)
alg.SetInsideOut(invert)
alg.Update()

# mapper
mapper = vtk.vtkCompositePolyDataMapper2()
mapper.SetInputConnection(alg.GetOutputPort()) #Filter im Mapper einstellen
mapper.SetScalarModeToUseCellFieldData() #Für skalare Daten einstellen

# actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)             #Stellen Sie den Mapper für den Schauspieler ein
actor.GetProperty().EdgeVisibilityOn()

# 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();

image.png

SetClipFunction(vtkImplicitFunction e.g. vtkPlane)

Legen Sie das Objekt fest, das die Quelle des Clips sein soll, z. B. "vtkPlane"

Liste der Vererbungsziele von vtkImplicitFunction https://vtk.org/doc/nightly/html/classvtkImplicitFunction.html

SetInsideOut(boolean)

Methode zum Umschalten von "Invertieren"

Kann auch mit "InsideOutOn ()" oder "InsideOutOff ()" festgelegt werden

Beispiel für das Abschneiden mit einem Viereck (Würfel)

Verwenden Sie vtkBox, um die Koordinaten von BoundingBox anzugeben https://vtk.org/doc/nightly/html/classvtkBox.html


box = vtk.vtkBox()
box.SetXMin(0.0,-0.001,-0.01) # [xMin,yMin,zMin]
box.SetXMax(0.1,0.1,0.1)      # [xMax,yMax,zMax]

alg = vtk.vtkClipPolyData()
alg.SetInputConnection(reader.GetOutputPort())

alg.SetClipFunction(box)

image.png

Beispiel für OpenFOAM

Da "OpenFOAM" ein nicht strukturelles Gitter ist, verwenden Sie "vtkClipDataSet"

import vtk

filename = "case1.foam"
reader = vtk.vtkOpenFOAMReader()
reader.SetFileName(filename)
reader.CreateCellToPointOn()
reader.DecomposePolyhedraOn()
reader.EnableAllCellArrays()
reader.Update()

n_step = reader.GetTimeValues().GetNumberOfValues()
latest_time = reader.GetTimeValues().GetValue(n_step-1)
reader.UpdateTimeStep(latest_time)
reader.Update()


normal='y' # e.g. x,y,z,-x,-y,-z,X,Y,Z,-X,-Y,or -Z

NORMALS = {
    'x': [1, 0, 0],
    'y': [0, 1, 0],
    'z': [0, 0, 1],
    '-x': [-1, 0, 0],
    '-y': [0, -1, 0],
    '-z': [0, 0, -1],
}

normal = NORMALS[normal.lower()] # or e.g. [1.0/sqrt(2.0), 1.0/sqrt(2.0), 0]

origin = (0,0,0)
invert=False

plane = vtk.vtkPlane()
plane.SetNormal(normal)
plane.SetOrigin(origin)

alg = vtk.vtkClipDataSet()
alg.SetInputConnection(reader.GetOutputPort())
alg.SetClipFunction(plane)
alg.SetInsideOut(invert)
alg.Update()

filter = vtk.vtkGeometryFilter()
filter.SetInputConnection(alg.GetOutputPort())
# filter.SetInputConnection(reader.GetOutputPort()) //Beim Abschalten
filter.Update()

# mapper
mapper = vtk.vtkCompositePolyDataMapper2()
mapper.SetInputConnection(filter.GetOutputPort()) #Filter im Mapper einstellen
mapper.SetScalarModeToUseCellFieldData() #Für skalare Daten einstellen

# actor
actor = vtk.vtkActor()
actor.SetMapper(mapper)             #Stellen Sie den Mapper für den Schauspieler ein
actor.GetProperty().EdgeVisibilityOn()

# 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();

Vor dem Clip image.png

Nach dem Clip image.png

Recommended Posts

vtkClipPolyData / DataSet-Zusammenfassung (von Zeit zu Zeit aktualisiert)
vtkXMLUnstructuredGridReader Zusammenfassung (von Zeit zu Zeit aktualisiert)
vtkOpenFOAMReader-Zusammenfassung (von Zeit zu Zeit aktualisiert)
Zusammenfassung von vtkThreshold (von Zeit zu Zeit aktualisiert)
Zusammenfassung der gcc-Optionen (von Zeit zu Zeit aktualisiert)
Ingenieur-Wortbuch (von Zeit zu Zeit aktualisiert)
Tensorflow-Memo [von Zeit zu Zeit aktualisiert]
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Privates Python-Handbuch (von Zeit zu Zeit aktualisiert)
[Von Zeit zu Zeit aktualisiert] Hinweise zum Postmarket-Betriebssystem
[Von Zeit zu Zeit aktualisiert] LetCode-Algorithmus und Bibliothek
Hinweise zum maschinellen Lernen (von Zeit zu Zeit aktualisiert)
OpenFOAM-Spickzettel für die Nachbearbeitung (von Zeit zu Zeit aktualisiert)
progate Python-Lernnotiz (von Zeit zu Zeit aktualisiert)
Nützliche Hilfeseiten usw. (von Zeit zu Zeit aktualisiert)
Apache-Einstellungen, Protokollbestätigung usw. (* Von Zeit zu Zeit aktualisiert)
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
[Von Zeit zu Zeit aktualisiert] Überprüfung von Let Code NumPy
Ich habe die Chainer-Referenz gelesen (von Zeit zu Zeit aktualisiert).
Python (vom ersten Mal bis zur Ausführung)
[Hinweis] Websites zu KI / maschinellem Lernen / Python [von Zeit zu Zeit aktualisiert]
Zusammenfassung der Ordner, in denen Ruby, Python, PostgreSQL usw. unter macOS installiert sind (von Zeit zu Zeit aktualisiert)
Auf Python 2.7.9 aktualisiert
Summe von 1 bis 10
(Von Zeit zu Zeit aktualisiert) Zusammenfassung der APIs für maschinelles Lernen, mit denen Sie schnell Apps von Team AI erstellen können
Verstehen Sie Entwurfsmuster, indem Sie Implementierungen in JavaScript und Java vergleichen. [Von Zeit zu Zeit aktualisiert]
[Von Zeit zu Zeit aktualisiert] Python-Memos, die häufig für die Datenanalyse verwendet werden [N-Division usw.]
Memorandum über Befehle, Pakete, Begriffe usw., die unter Linux verwendet werden (von Zeit zu Zeit aktualisiert)
(Von Zeit zu Zeit aktualisiert) Speicherort verschiedener VS-Code-Einstellungsdateien Notiz notieren
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Liste meiner Artikel, die für Wettkampfprofis nützlich sein können (von Zeit zu Zeit aktualisiert)
Übergang von WSL1 zu WSL2
Von der Bearbeitung bis zur Ausführung
Hospital_dashboard wurde auf Version 2.0 aktualisiert
[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬