Un filtre qui extrait uniquement les éléments qui contiennent des valeurs dans la plage spécifiée.
** référence de classe ** https://vtk.org/doc/nightly/html/classvtkThreshold.html
Plus précisément, l'exemple du paraview suivant est facile à comprendre
Pour l'exemple de calcul, j'ai utilisé pitzDaily
dans le tutoriel de ʻOpenFOAM`.
Après avoir lu le résultat du calcul, appuyez sur ce bouton
Résultat de l'application d'une plage de 5 à 15 pour la pression p
Prenez un ensemble complémentaire
python 3.7 vtk 8.1.2
Méthode de confirmation
import Vtk
print(vtk.vtkVersion.GetVTKSourceVersion())
>> vtk version 8.1.2
J'utilise vtkOpenFOAMReader
pour lire le résultat d'OpenFOAM
Nous allons également résumer vtkOpenFOAMReader
dans ici.
import vtk
#Lire le résultat d'OpenFOAM
filename = "case1.foam"
reader = vtk.vtkOpenFOAMReader()
reader.SetFileName(filename)
reader.CreateCellToPointOn()
reader.DecomposePolyhedraOn()
reader.EnableAllCellArrays()
reader.Update()
#Appliquer le dernier résultat de l'heure
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())
###################
#Ajoutez les paramètres ici#
###################
filter_threshold.Update()
filter = vtk.vtkGeometryFilter()
filter.SetInputConnection(filter_threshold.GetOutputPort())
filter.Update()
mapper = vtk.vtkCompositePolyDataMapper2()
mapper.SetInputConnection(filter.GetOutputPort()) #Définir le filtre dans le mappeur
mapper.SetScalarModeToUseCellFieldData() #Défini pour les données scalaires
# 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();
ThresholdBetween()
Limitation en spécifiant les limites supérieure et inférieure
#Réglez le seuil entre 5 et 15
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"Est filtrant contre la pression
filter_threshold.SetInputArrayToProcess(0,0,0,FIELD_ASSOCIATION_CELLS ,"p")
filter_threshold.Update()
Conforme aux résultats du paraview ci-dessus
Si vous ne savez pas comment utiliser la méthode, vous pourrez peut-être la résoudre en utilisant la fonction d'aide.
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()
Limiter en spécifiant la limite supérieure Seules les zones plus grandes que la valeur spécifiée sont affichées
#filter_threshold.ThresholdBetween(5,15)
filter_threshold.ThresholdByUpper(10)
Rien ne s'affiche car la zone cible n'existe pas
ThresholdByLower()
Limiter en spécifiant la limite inférieure Seules les zones plus petites que la valeur spécifiée sont affichées
#filter_threshold.ThresholdBetween(5,15)
filter_threshold.ThresholdByLower(5)
En conséquence, il correspondait au résultat de Invert dans le paraview ci-dessus.
Apparemment, la relation Invert est déjà implémentée en c ++, mais pas dans la version python.
filter_threshold.SetInvert(True)
AttributeError
---> 31 filter_threshold.SetInvert(True)
AttributeError: 'vtkFiltersCorePython.vtkThreshold' object has no attribute 'SetInvert'
GetUpperThreshold Obtenez la limite supérieure du seuil
filter_threshold.ThresholdBetween(-100,100)
filter_threshold.GetUpperThreshold()
>> 100
GetLowerThreshold Obtenez la limite inférieure du seuil
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'
Je le mettrai à jour quand j'en aurai envie