Paraview: некоторые настройки конвейера из скрипта Python, не отраженные в пользовательском интерфейсе - PullRequest
0 голосов
/ 24 мая 2019

Я пишу Paraview (5.6.0) на Python, создавая сферические глифы из файла VTU. Соответствующая часть сценария показана ниже. После завершения сценария глифы создаются и отображаются с правильными параметрами, но пользовательский интерфейс не отражает все настройки.

В частности, скрипт говорит: sphGlyph.ScaleArray=['POINTS','diameter'], и в представлении правильно отображаются сферы, масштабированные массивом diameter; тем не менее, пользовательский интерфейс все еще говорит No scale array (на изображении ниже). Если я нажимаю «Применить», я теряю настройку diameter, и представление обновляется до No scale array.

Некоторые другие настройки, такие как sphGlyph.ScaleFactor=1., соблюдаются как в пользовательском интерфейсе, так и в представлении.

Я не вижу очевидной разницы между скриптом и трассировкой Python при построении конвейера вручную.

Где проблема?

# ....
vtuFile="/tmp/burnt.vtu"
view=GetActiveViewOrCreate('RenderView')
# ...
sph=XMLUnstructuredGridReader(FileName=[vtuFile])
RenameSource(vtuFile,sph)
sphGlyph=Glyph(Input=sph,GlyphType='Sphere',GlyphMode='All Points')
sphGlyph.ScaleFactor=1.
sphGlyph.ScaleArray=['POINTS','diameter']    ### <---- SET HERE
sphGlyph.GlyphType.ThetaResolution=32
sphGlyph.GlyphType.PhiResolution=32
sphGlyphShow=Show(sphGlyph,view)
sphGlyphShow.Opacity=0.5
sphGlyphShow.BackfaceRepresentation='Surface'

view.Update()

state after loading paraview

РЕДАКТИРОВАТЬ: Это сценарий, предложенный @MatthieuWespthal (и загруженный cube.vtu , который не может правильно установить Scale Array:

from paraview.simple import *
cubevtu=XMLUnstructuredGridReader(FileName=['cube.vtu'])
glyph1 = Glyph(Input=cubevtu,GlyphType='Arrow')
glyph1.OrientationArray = ['POINTS', 'No orientation array']
glyph1.ScaleArray = ['POINTS', 'f1']
glyph1.ScaleFactor = 0.1
glyph1.GlyphTransform = 'Transform2'
renderView1 = GetActiveViewOrCreate('RenderView')
glyph1Display = Show(glyph1, renderView1)

enter image description here

1 Ответ

1 голос
/ 24 мая 2019

Обязательно вызовите UpdatePipeline перед созданием глифа.

Следующее отлично работает с этим набором данных .

from paraview.simple import *

# find source
cubevtu = FindSource('cube.vtu')
cubevtu.UpdatePipeline()


# create a new 'Glyph'
glyph1 = Glyph(Input=cubevtu,
    GlyphType='Arrow')
glyph1.OrientationArray = ['POINTS', 'No orientation array']
glyph1.ScaleArray = ['POINTS', 'f1']
glyph1.ScaleFactor = 0.1 
glyph1.GlyphTransform = 'Transform2'

# Properties modified on glyph1

# get active view
renderView1 = GetActiveViewOrCreate('RenderView')

glyph1Display = Show(glyph1, renderView1)
...