Создание скриншота Paraview с несколькими представлениями из скрипта Python - PullRequest
1 голос
/ 26 ноября 2011

Я пытаюсь написать скрипт Python для Paraview, который создаст файл скриншота в формате .png или .pdf с несколькими представлениями в нем. Акцент здесь является частью НЕСКОЛЬКИХ ВИДОВ. Чтобы быть ясным, у меня есть три разных окна на моем дисплее Paraview: одно показывает модель, видимую в плоскости XZ, одно в плоскости XY и одно в плоскости YZ. Я пытаюсь использовать скрипт Python для создания одного файла, показывающего все три из этих представлений. Это можно сделать вручную, нажав File->Save Screenshot, а затем сняв отметку с кнопки Save only selected view. Мне нужно сделать это несколько сотен раз, поэтому ясно, что сценарий - это путь.

Я пытался использовать опцию «Начать трассировку», чтобы увидеть, как работает эта операция, но код, который она выдает, кажется неполным:

try: paraview.simple
except: from paraview.simple import *
paraview.simple._DisableFirstRenderCameraReset()

RenderView1 = GetRenderView()
RenderView2 = GetRenderViews()[1]
RenderView3 = GetRenderViews()[2]
WriteImage(r'E:\TestFolder\TestFile_00.png', view=RenderView1)
WriteImage(r'E:\TestFolder\TestFile_01.png', view=RenderView2)
WriteImage(r'E:\TestFolder\TestFile_02.png', view=RenderView3)


Render()

Когда я запускаю что-то похожее на это, он просто создает три отдельных файла .png, по одному для каждого представления. Возможно, это временные файлы, которые Paraview объединяет для создания готового продукта, но я не знаю, как их объединить.

У кого-нибудь есть опыт решения этой проблемы? Я изучил Интернет и документацию Paraview, но единственные примеры, которые я могу найти, имеют только одно представление. Любая помощь будет высоко ценится.

Я использую 32-разрядную версию Paraview 3.12.0 в Windows XP

Ответы [ 2 ]

3 голосов
/ 28 августа 2014

Начиная с ParaView 4.2, это будет напрямую поддерживаться следующим образом:

# Get the layout/tab for the active view.
aLayout = GetLayout()
SaveScreenshot("AllViewsImage.png", layout=aLayout)

Вы также можете использовать Инструменты | Запустить трассировку и попытаться сохранить снимок экрана, чтобы получить команды для использования.

2 голосов
/ 26 декабря 2011

У меня такая же проблема. Обходной путь должен использовать команду конвертирования. Вот пример сценария:

for i in range(len(GetRenderViews())) :                                                                                                                                        
    RenderView = GetRenderViews()[i]                                                                                                                                           
    WriteImage("tmp_"+str(i)+".png",view=RenderView)                                                                                                                           
commands.getoutput("convert -border 1x1 -append tmp_*.png tmp.png")

Надеюсь, это поможет.

...