当有两个视图时,Paraview无法SaveScreenshot - append_pending_request:断言`!xcb_xlib_unknown_seq_number'失败

时间:2018-02-13 13:05:02

标签: python screenshot paraview

我在Ubuntu 16.04 LTS下。 我正在使用ParaView-5.4.1-Qt5-OpenGL2-MPI-Linux-64bit/bin/pvpython,只是从ParaView-5.4.1-Qt5-OpenGL2-MPI-Linux-64bit.tar.gz

扩展而来

我有一个python脚本:

  1. 从PVD阅读器生成RenderView。
  2. SaveScreenshot。
  3. 来自RenderView的PlotOverLine。
  4. SaveScreenshot。
  5. pvpython运行时脚本崩溃,但是当从UI运行为宏时它会起作用。 错误消息是

    [xcb] Unknown sequence number while appending request
    [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
    [xcb] Aborting, sorry about that.
    pvpython: ../../src/xcb_io.c:161: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed.
    

    我该如何使用?

    添加EXTRA LINES(请参阅下面的代码)错误消失了。 我仍然需要调整lineChartView1.ViewSizeImageResolution的参数以获得正确的png,但我相信这会有效。 不过,我的意思是不需要删除一个View来使其工作。

    <小时/> 脚本的简约版本(删除了Trace中的许多行)是:

    from paraview.simple import *
    paraview.simple._DisableFirstRenderCameraReset()
    
    # 1. Generate a RenderView from a PVD reader.
    pvdreader = PVDReader(FileName='mydata.pvd')
    animationScene1 = GetAnimationScene()
    animationScene1.UpdateAnimationUsingDataTimeSteps()
    renderView1 = GetActiveViewOrCreate('RenderView')
    renderView1.ViewSize = [1554, 838]
    pvdreaderDisplay = Show(pvdreader, renderView1)
    renderView1.ResetCamera()
    renderView1.Update()
    layout1 = GetLayout()
    # 2. SaveScreenshot.
    SaveScreenshot('last_frame_render.png', renderView1, ImageResolution=[1554, 838])
    # 3. PlotOverLine from the RenderView.
    plotOverLine1 = PlotOverLine(Input=pvdreader, Source='High Resolution Line Source')
    plotOverLine1.Source.Point1 = [-5.0, -5.0, 0.0]
    plotOverLine1.Source.Point2 = [5.0, 5.0, 0.0]
    plotOverLine1Display = Show(plotOverLine1, renderView1)
    lineChartView1 = CreateView('XYChartView')
    layout1.AssignView(2, lineChartView1)
    plotOverLine1Display_1 = Show(plotOverLine1, lineChartView1)
    # ==========================  EXTRA LINES  ==============================
    # destroy renderView1
    Delete(renderView1)
    del renderView1
    layout1.Collapse(1)
    # =======================================================================
    lineChartView1.ViewSize = [1554, 838]
    lineChartView1.Update()
    # 4. SaveScreenshot.
    SaveScreenshot('last_frame_linechart.png', lineChartView1, ImageResolution=[772, 838])
    

1 个答案:

答案 0 :(得分:0)

鉴于differences between pvpython and pvbatch是:

  1. pvbatch无法以交互方式运行。
  2. pvbatch支持并行处理。
  3. 我用过 ParaView-5.4.1-Qt5-OpenGL2-MPI-Linux-64bit/bin/pvbatch代替 ParaView-5.4.1-Qt5-OpenGL2-MPI-Linux-64bit/bin/pvpython它有效。

    我不知道是否有更好或替代的解决方案。