2016-06-23 4 views
1

Ich bin nur neu bei Python und ich kann nicht scheinen, eine Lösung für mein Problem zu finden, da es scheint, ziemlich einfach zu sein. Ich habe eine Geometrie auf Paraview, ich speichere es als vtk-Datei und ich versuche Python zu verwenden, um sein Volumen zu berechnen.Wie man das Volumen einer vtk-Datei berechnet

Dies ist der Code Ich verwende:

import vtk 
reader = vtk.vtkPolyDataReader() 
reader.SetFileName("C:\Users\Pauuu\Google Drive\2016-01\SURF\Sim Vascular\Modelos\apoE183 Day 14 3D\AAA.vtk") 
reader.Update() 
polydata = reader.GetOutput() 

Mass = vtk.vtkMassProperties() 
Mass.SetInputConnection(polydata.GetOutput()) 
Mass.Update() 

print "Volume = ", Mass.GetVolume() 
print "Surface = ", Mass.GetSurfaceArea() 

Ich denke, es könnte die Daten ein Problem mit der Art und Weise im Loding sein, und ich bekomme die AttributeError: GetOutput.

Wissen Sie, was passiert oder was ich falsch mache? Vielen Dank im Voraus.

+1

Welche Version von 'vtk' Paket haben Sie, wenn Sie' vtk .__ Version__' drucken? – SAAD

Antwort

1

Sie haben reader.GetOutput() in polydata zugewiesen. Von polydata, ich glaube, Sie tun müssen, polydata.GetOutputPort()

+1

Hi tdka, Danke für deine Antwort. Ich habe das versucht und derselbe Fehler kommt immer wieder auf. "AttributError: GetOutputPort" – Paula

+1

Wenn Sie die Zeile 'Mass.SetInputConnection (Polydata.GetOutput())' 'mit' Mass.SetInput (Polydata) 'ersetzen, wird das Programm ausgeführt, aber ich bin nicht sicher, ob es tun wird, was Sie wollen, weil 'vtkMassProperties' nur Dreiecke bearbeitet – MrPedru22

2

Je nach Ihrer Version von vtk Paket erhalten Sie die folgende Syntax, wenn Ihre Version < = 5 testen möchten:

Mass.SetInput(polydata.GetOutput()); 

Andernfalls wird die tatsächliche Syntax :

Mass.SetInputData(polydata.GetOutputPort()); 

PS: Sie können die python-wrapped überprüfen vtk Version durch Ausführen von:

import vtk 
print vtk.vtkVersion.GetVTKSourceVersion() 
0

Ich denke, Sie haben VTK 6, Sie als Eingabe für einen Filter entweder der Ausgangstor eines Filters oder ein vtkDataObject zur Verfügung stellen können:

Mass.SetInputConnection(reader.GetOutputPort()) 
Mass.SetInputData(polydata) #that is Mass.SetInputData(reader.GetOutput()) 

Für das Verständnis, warum diese Methode nicht gleichwertig ist, wenn eine Aktualisierung Pipeline und zum Vergleich mit der vorherigen Version, siehe http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Removal_of_GetProducerPorthttp://www.vtk.org/Wiki/VTK/VTK_6_Migration/Replacement_of_SetInput

Verwandte Themen