2016-05-09 3 views
0

Я пытаюсь получить триангулированный vtkPolyData с участка mlab.contour3d. Я использую mayavi, потому что это, по-видимому, самый быстрый способ получить minimal surfaces, триангулированный правильно. Мне нужно это как vtkPolyData, потому что я хочу сохранить его как .stl-файл.Convert mayavi mlab.contour3d plot to vtkPolyData

Вот MWE моего кода:

import numpy as np 
from mayavi import mlab 

def fun(x, y, z): 
    return np.cos(x) + np.cos(y) + np.cos(z) 

x, y, z = np.mgrid[-1:1:100j, -1:1:100j, -1:1:100j] 
contour = mlab.contour3d(x, y, z, fun) 
mlab.show() 

Что я получаю то из mayavi является поверхностью, которая уже триангулирован и отображается с помощью VTK (или tvtk), поэтому она должна быть возможность получить vtkPolyData оттуда. Но единственным способом, который я нашел до сих пор, является использование mlab.savefig(test.obj) для экспорта .obj-файла (что плохо, потому что требуется время, чтобы сохранить файл каждый раз, когда открывается пользовательский интерфейс mayavi) и снова импортировать этот файл, используя vtkOBJReader, что дает мне vtkPolyData Я хочу.

Кто-нибудь знает более прямой способ сделать это?

Редактировать: Чтобы уточнить мою проблему немного больше: я могу получить доступ к данным из визуализации, например. с mayavi.tools.pipeline.get_vtk_src(), но он поставляется в форме vtkImageData. Если кто-то знает способ конвертировать это в vtkPolyData, это также будет решением.

ответ

1

По полному совпадению я нашел решение.

import numpy as np 
from mayavi import mlab 

def fun(x, y, z): 
    return np.cos(x) + np.cos(y) + np.cos(z) 

x, y, z = np.mgrid[-1:1:100j, -1:1:100j, -1:1:100j] 
contour = mlab.contour3d(x, y, z, fun) 
actor = contour.actor.actors[0] 
polydata = tvtk.to_vtk(actor.mapper.input) # solution 
mlab.show() 

Хитрость, кажется, чтобы получить доступ к картографа из трубопровода, который является PolyDataMapper. Затем я просто использую функцию tvtk.to_vtk(), чтобы я мог продолжить с vtk, который я предпочитаю более tvtk, по крайней мере пока.

 Смежные вопросы

  • Нет связанных вопросов^_^