[PYTHON] vtkClipPolyData / DataSet Summary (mis à jour de temps en temps)

À propos de vtkClipPolyData / DataSet

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

Référence de classe vtkClipPolyData

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

image.png

Référence de classe vtkClipDataSet

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

image.png

Vérifiez la fonction avec paraview

Fonction clip image.png

Lorsque ClipType est défini sur Plan, la zone d'affichage est limitée à l'aide du plan avec l'origine et la normale.

image.png

image.png

En commutant le contrôle Inverser, la zone affichée peut être inversée.

image.png

Lorsque l’élément Crinkle est appliqué, le maillage contenu dans le plan conserve sa forme d’origine. image.png

Vérification de fonctionnement avec python

environnement

python 3.7 vtk 8.1.2

Exemple de découpage utilisant le code de base (plan)

)

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

image.png

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

Exemple de découpage à l'aide d'un quadrangle (Cube)

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)

image.png

Exemple pour OpenFOAM

ʻOpenFOAMest une grille non structurelle, utilisez doncvtkClipDataSet`

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 image.png

Après le clip image.png

Recommended Posts

vtkClipPolyData / DataSet Summary (mis à jour de temps en temps)
Résumé de vtkXMLUnstructuredGridReader (mis à jour de temps en temps)
Résumé de vtkOpenFOAMReader (mis à jour de temps en temps)
Résumé de vtkThreshold (mis à jour de temps en temps)
Récapitulatif des options gcc (mises à jour de temps en temps)
Livre de mots de l'ingénieur (mis à jour de temps en temps)
Mémo Tensorflow [mis à jour de temps à autre]
[Mis à jour de temps en temps] Résumé des modèles de conception en Java
Manuel Python privé (mis à jour de temps en temps)
[Mis à jour de temps à autre] Notes relatives au système d'exploitation après commercialisation
[Mis à jour de temps en temps] Algorithme et bibliothèque LetCode
Notes sur l'apprentissage automatique (mises à jour de temps en temps)
Aide-mémoire pour le post-traitement d'OpenFOAM (mis à jour de temps en temps)
mémo d'apprentissage progate Python (mis à jour de temps en temps)
Sites d'aide utiles, etc. (mis à jour de temps à autre)
Paramètres Apache, confirmation du journal, etc. (* Mis à jour de temps en temps)
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
[Mis à jour de temps en temps] Examen de Let Code NumPy
J'ai lu la référence Chainer (mise à jour de temps en temps)
Python (de la première fois à l'exécution)
[Note] Sites Web relatifs à l'IA / à l'apprentissage automatique / à python [mis à jour de temps en temps]
Récapitulatif des dossiers dans lesquels Ruby, Python, PostgreSQL, etc. sont installés sur macOS (mis à jour de temps en temps)
Mis à jour vers Python 2.7.9
Somme de 1 à 10
(Mis à jour de temps en temps) Résumé des API d'apprentissage automatique qui vous permettent de créer rapidement des applications par Team AI
Comprendre les modèles de conception en comparant les implémentations en JavaScript et Java [mis à jour de temps en temps]
[Mis à jour de temps en temps] Mémos Python souvent utilisés pour l'analyse des données [Division N, etc.]
Mémorandum des commandes, packages, termes, etc. utilisés sous Linux (mis à jour de temps en temps)
(Mis à jour de temps en temps) Emplacement de stockage de divers fichiers de réglage de VS Code Note mémo
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Liste de mes articles pouvant être utiles aux pros de la compétition (mise à jour de temps en temps)
Transition de WSL1 à WSL2
De l'édition à l'exécution
Mise à jour de Hospital_dashboard vers la version 2.0
[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬