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
https://vtk.org/doc/nightly/html/classvtkClipPolyData.html

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

Clip-Funktion

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


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

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

python 3.7 vtk 8.1.2
)
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();

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
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)

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

Nach dem Clip
