Je vais résumer Clip
, qui limite la zone de la forme à afficher en fonction de la forme source.
Lors de l'expression de la forme avec des verticales, des lignes, un triangle comme STL
, vtkPolyData
Lors de l'expression avec une grille non structurelle comme ʻOpenFOAM, est-il utilisé comme
vtkDataSet`?
Je ne connais pas encore les détails
https://vtk.org/doc/nightly/html/classvtkClipPolyData.html
https://vtk.org/doc/nightly/html/classvtkClipDataSet.html
Fonction clip
Lorsque ClipType est défini sur Plan, la zone d'affichage est limitée à l'aide du plan avec l'origine et la normale.
En commutant le contrôle Inverser, la zone affichée peut être inversée.
Lorsque l’élément Crinkle est appliqué, le maillage contenu dans le plan conserve sa forme d’origine.
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()) #Définir le filtre dans le mappeur
mapper.SetScalarModeToUseCellFieldData() #Défini pour les données scalaires
# actor
actor = vtk.vtkActor()
actor.SetMapper(mapper) #Définir le mappeur pour l'acteur
actor.GetProperty().EdgeVisibilityOn()
# renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(actor) #Définir l'acteur dans le moteur de rendu
##Réglage de la couleur d'arrière-plan
renderer.GradientBackgroundOn() #Définir un arrière-plan dégradé
renderer.SetBackground2(0.2,0.4,0.6) #Top couleur
renderer.SetBackground(1,1,1) #Couleur du bas
#Window
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(renderer) #Définir le rendu dans la fenêtre
iren = vtk.vtkRenderWindowInteractor();
iren.SetRenderWindow(renWin);
renWin.SetSize(850, 850)
renWin.Render()
iren.Start();
SetClipFunction(vtkImplicitFunction e.g. vtkPlane)
Définissez l'objet qui sera la source du clip tel que vtkPlane
Liste des destinations d'héritage de vtkImplicitFunction
https://vtk.org/doc/nightly/html/classvtkImplicitFunction.html
SetInsideOut(boolean)
Méthode de commutation ʻInvert`
Peut également être défini avec ʻInsideOutOn () ou ʻInsideOutOff ()
Utilisez vtkBox
pour spécifier les coordonnées de BoundingBox
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)
ʻOpenFOAMest une grille non structurelle, utilisez donc
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()) //Lorsque le clip est désactivé
filter.Update()
# mapper
mapper = vtk.vtkCompositePolyDataMapper2()
mapper.SetInputConnection(filter.GetOutputPort()) #Définir le filtre dans le mappeur
mapper.SetScalarModeToUseCellFieldData() #Défini pour les données scalaires
# actor
actor = vtk.vtkActor()
actor.SetMapper(mapper) #Définir le mappeur pour l'acteur
actor.GetProperty().EdgeVisibilityOn()
# renderer
renderer = vtk.vtkRenderer()
renderer.AddActor(actor) #Définir l'acteur dans le moteur de rendu
##Réglage de la couleur d'arrière-plan
renderer.GradientBackgroundOn() #Définir un arrière-plan dégradé
renderer.SetBackground2(0.2,0.4,0.6) #Top couleur
renderer.SetBackground(1,1,1) #Couleur du bas
#Window
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(renderer) #Définir le rendu dans la fenêtre
iren = vtk.vtkRenderWindowInteractor();
iren.SetRenderWindow(renWin);
renWin.SetSize(850, 850)
renWin.Render()
iren.Start();
Avant le clip
Après le clip