2D скалярное поле: нарисуйте изоповерхность (изолинию) с непрозрачностью

У меня есть два скалярных поля в 2D-сетке. Я хотел бы нарисовать изолинию для первого скалярного поля и установить его непрозрачность в соответствии со вторым скалярным полем.

Я попытался с Mayavi, начиная с этого ответа SO, но не смог переключиться с 3D на 2D.

Вот как я рисую изолинию в Mayavi (python).

 import numpy
 from mayavi import mlab

 x, y, z = numpy.ogrid[-5:5:64j, -5:5:64j, 0:0:1j]

 grid_x, grid_y, grid_z = numpy.mgrid[-5:5:64j, -5:5:64j, 0:0:1j]

 scalars = x*x*0.5 + y*y
 opacity = x**2
 opacity /= numpy.max(opacity) #normalize

 src = mlab.pipeline.scalar_field(grid_x,grid_y,grid_z, scalars)
 obj = mlab.pipeline.iso_surface(src, contours=[1,2,4,8,16,25,37],line_width=3)
 mlab.show()    

Меня не волнует, как получаются изолинии: подойдет любой инструмент визуализации научных данных и язык программирования. Единственное, что мне нужно, это установить непрозрачность линии.

Спасибо


person Pie86    schedule 01.01.2014    source источник
comment
Это было бы очень сложно сделать в Mayavi. Я намеревался точно воспроизвести цвета, а затем установить их как vtkUnsignedCharArray в источнике vtk, но это не сработало для этого конкретного типа источника. Я мог бы вернуться к этому позже, потому что в конечном итоге я должен работать над тем, чтобы заставить Mayavi более гибко обрабатывать сложную информацию о цвете.   -  person aestrivex    schedule 06.01.2014


Ответы (1)


вы можете установить глобальную непрозрачность линии, используя

obj.actor.property.opacity = opacity

но непрозрачность должна быть скаляром, вы не можете использовать вектор, потому что непрозрачность является глобальным свойством актера.

person fsoto    schedule 08.09.2014