如何在基于paraview的python脚本中显示vtkUnstructedGrid?

2024-03-24

我在 Ubuntu 18.04 系统上安装 paraview 5.6,我想编写一个 python 脚本来显示 vtkUnstructedGrid。

import numpy as np
from paraview.simple import *
import paraview.vtk as vtk
from paraview.vtk.numpy_interface import dataset_adapter as dsa
import paraview.vtk.util.numpy_support as vnp

node = np.array(
        [[0.0, 0.0, 0.0],
         [1.0, 0.0, 0.0],
         [1.0, 1.0, 0.0],
         [0.0, 1.0, 0.0]], dtype=np.float)
cell = np.array([[3, 1, 2, 0], [3, 3, 0, 2]], dtype=np.int)
NC = cell.shape[0]

points = vtk.vtkPoints()
points.SetData(vnp.numpy_to_vtk(node))
cells = vtk.vtkCellArray()
cells.SetCells(NC, vnp.numpy_to_vtkIdTypeArray(cell))

uGrid =vtk.vtkUnstructuredGrid() 
uGrid.SetPoints(points)
uGrid.SetCells(vtk.VTK_TRIANGLE, cells)
# how to put uGrid into the following codes
view = GetActiveViewOrCreate('RenderView') 
dispaly = Show()
render = Render()
Interact()

我无法从互联网上找到任何在 python 脚本中执行此类操作的示例。所以我需要你的帮助,非常感谢。

Update:

我尝试编写如下源类:

import numpy as np
from paraview.simple import *
import vtk 
import vtk.util.numpy_support as vnp
from vtkmodules.util.vtkAlgorithm import VTKPythonAlgorithmBase
from vtkmodules.numpy_interface import dataset_adapter as dsa
from paraview.util.vtkAlgorithm import smproxy, smproperty, smdomain

@smproxy.source(name="MeshSource", label="triangle mesh!")
class MeshSource(VTKPythonAlgorithmBase):
    def __init__(self):
        print("Initialize the source!")
        VTKPythonAlgorithmBase.__init__(self,
                nInputPorts=0,
                nOutputPorts=1,
                outputType='vtkUnstructuredGrid')
        node = np.array(
                [[0.0, 0.0, 0.0],
                 [1.0, 0.0, 0.0],
                 [1.0, 1.0, 0.0],
                 [0.0, 1.0, 0.0]], dtype=np.float)
        cell = np.array([[3, 1, 2, 0], [3, 3, 0, 2]], dtype=np.int)
        NN = node.shape[0]
        NC = cell.shape[0]

        points = vtk.vtkPoints()
        points.SetData(vnp.numpy_to_vtk(node))
        cells = vtk.vtkCellArray()
        cells.SetCells(NC, vnp.numpy_to_vtkIdTypeArray(cell))

        self.mesh = vtk.vtkUnstructuredGrid() 
        self.mesh.SetPoints(points)
        self.mesh.SetCells(vtk.VTK_TRIANGLE, cells)
        rho = vnp.numpy_to_vtk(np.zeros(NN))
        rho.SetName('rho_A')
        self.mesh.GetPointData().AddArray(rho)
        self.Port = 0

    def RequestData(self, request, inInfo, outInfo):
        print("Request the data!")
        output = vtk.vtkUnstructuredGrid.GetData(outInfo)
        optput.ShallowCopy(self.mesh)
        return 1

    def UpdatePointData(self, rho):
        print("Update the point data!")
        rho = vnp.numpy_to_vtk(rho)
        rho.SetName('rho_A')
        self.mesh.GetPointData().AddArray(rho)
        self.Modified()

source = MeshSource()
view = GetActiveViewOrCreate('RenderView') 
display = Show(source, view)
Interact()

但我遇到了一些错误:

Traceback (most recent call last):
  File "test_triangle.py", line 55, in <module>
    dispaly = Show(source, view)
  File "/home/why/local/lib/python3.6/site-packages/paraview/simple.py", line 482, in Show
    rep = controller.Show(proxy, proxy.Port, view)
  File "/home/why/local/lib/python3.6/site-packages/paraview/servermanager.py", line 158, in __ConvertArgumentsAndCall
    retVal = func(*newArgs)
TypeError: Show argument 1: method requires a vtkSMSourceProxy, a vtkPythonAlgorithm was provided.

我一定错过了什么。


需要理解的关键是 ParaView 中有两个级别的 Python 脚本可用。较低级别是您可以使用 VTK 创建或过滤数据的位置。较高级别允许您控制 ParaView 的操作,例如显示数据、设置显示属性等。您缺少的是脚本中两个级别之间的桥梁。

在您最初的示例中,您正在 VTK 中创建一个非结构化网格。要将其放置在 ParaView 可以使用的位置,请添加以下内容:

# how to put uGrid into the following codes
view = GetActiveViewOrCreate('RenderView')

# create a trivial producer to bridge between the VTK object and ParaView
tp = TrivialProducer()
tp.GetClientSideObject().SetOutput(uGrid)

dispaly = Show(tp)

这将创建一个 ParaView 代理(TrivialProducer)这是一个简单的 VTK 数据源的代理,称为vtkTrivialProducer。它所做的就是获取一个数据集并将其传递给任何请求它的下游过滤器。 (警告:这仅在您以内置服务器模式运行时才有效,因为GetClientSideObject(),这相当常见)。

如何定义单元格也存在问题。单元定义中的第一个条目必须是定义单元的点数。所以将该行更改为

cell = np.array([[3, 1, 2, 0], [3, 3, 0, 2]], dtype=np.int)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在基于paraview的python脚本中显示vtkUnstructedGrid? 的相关文章

随机推荐

  • MySQL 从 CSV 数据加载 NULL 值

    我有一个文件 其中可以包含 3 到 4 列数值 这些数值以逗号分隔 空字段的定义例外 当它们位于行末尾时 1 2 3 4 5 1 2 3 5 1 2 3 在 MySQL 中创建了下表 Field Type Null Key Default
  • 将字符串拆分为行的最有效方法

    我正在使用以下函数将字符串拆分为行 它比我之前使用的函数快得多 但是我需要以某种方式更快地处理这些数据 它是一项 ETL 作业 ALTER FUNCTION dbo ArrayToTable InputString VARCHAR MAX
  • 某些字体的字符宽度计算错误,可以自动缩进

    i create a normal textbox and type some i s inside the font i use is Lobster1 3 as you can see i just selection one char
  • SwiftUI 选择器选择绑定未更新

    我正在尝试让选择器列出所有类型 称为Course然后让用户在添加新课程时选择适当的课程Assignment到托管对象上下文 选择器选择绑定 courseIndex 当用户点击选取器视图中的行时不会更新 我不完全确定如何解决这个问题 也不知道
  • 客户端无权调用此 JAX-RS EJB 错误

    我已经寻找这个问题的解决方案有一段时间了 这里是 我按照本教程从数据库自动生成 jax rs Web 服务 https netbeans org kb docs websvc rest html https netbeans org kb
  • 创建具有两个列表中的多个值的字典。将多个键组合为一个

    我有两个清单 lists a b c d e keys 18 18 3 4 5 我想要的是这样的字典 18 a b 3 c 4 d 5 e 我不断得到这个 18 a b c d e 3 a b c d e 4 a b c d e 5 a b
  • String.concat 比连接字符串的数组方法慢吗

    JavaScript 中的字符串是不可变的 通过网络和Stack Overflow 上也有 https stackoverflow com questions 51185 are javascript strings immutable d
  • C++ 当模板参数推导失败时

    为什么 C 不能确定我打算创建一个unique ptr a 用这个语法 a 之前已被声明为unique ptr a a unique ptr new A 必须包括在内似乎非常多余 a 这适用于我使用的大多数函数模板 为什么 unique p
  • 单个 LINQ 查询中生成的迭代次数

    我在使用LINQ的时候总是有一个疑问 以下代码生成了多少个迭代器 测试是一个列表 var result from t in test where t Length gt 0 t Length lt 5 orderby t 0 select
  • 在Rplot_ly中添加箱线图显着性指示线和星号

    用于向绘图添加水平显着性条形图 和星形 的 Rplot ly 命令是什么 的答案 如何绘制显着水平的箱线图 https stackoverflow com questions 29263046 how to draw the boxplot
  • C/C++波形快速显示

    我有兴趣在 Windows 和 Linux 上用 C 或 C 实现音频编辑器 我不知道如何在完全缩小的视图中足够快地显示波形 我不是在寻找有关快速帧缓冲区技术的信息 这是一个关于有效确定显示内容的算法和数据结构的问题 假设我希望能够编辑 2
  • Interface Builder 文件中的未知类。 Xcode 6 和 Swift

    我用 swift 启动了一个普通的主细节项目 如果我添加新的视图控制器并设置自定义类 则模块列表为空 并且无法选择模块 错误消息 Interface Builder 文件中存在未知类 如果我运行代码 就会出现在控制台中 如何设置故事板以了解
  • IE 中的下拉菜单隐藏在其他元素后面

    我已经在我的一个项目上安装了 site5 上的 Boldy 主题 但遇到了一个主要问题 在 Internet Explorer 8 或更低版本 中浏览时 顶部下拉菜单会显示在其他一些元素 主要内容滑块 H1 等 后面 我已经尝试了一切 从将
  • 在 Web 部署上应用 EF 迁移

    我正在使用 asp net core 2 我似乎找不到任何选项或任何关于如何将迁移应用到 Web 部署发布上的数据库的指南 这将在应用程序启动时迁移您的数据库 您可以从 Startup 类中调用它 using var context new
  • 即使应用程序关闭后,NotifyIcon 仍保留在托盘中,但在鼠标悬停时消失

    有很多问题都提出同样的疑问 解决这个问题的方法是设置 notifyIcon icon null并打电话Dispose在 FormClosing 事件中 在我的应用程序中 没有这样的表单 但有根据事件更新的通知图标 在创作时 我隐藏我的形式并
  • Kendo UI Grid - 在哪里寻找字体和图标

    我正处于学习 Kendo UI 的早期阶段 我已经完成网格工作并加载数据 但没有出现应出现在网格中的图像 图标 当我加载包含网格的页面时 出现以下 404 错误 错误消息没有告诉我期望在哪里找到这些文件 Kendo UI 在哪里寻找这些文件
  • 在悬停时添加 CSS 边框而不移动元素 [重复]

    这个问题在这里已经有答案了 我有一行在悬停时应用背景突出显示 jobs item hover background e1e1e1 border top 1px solid d0d0d0 但是 由于边框增加了 1px额外的到元素 它使其 移动
  • Swift 中闭包如何捕获值?

    我正在运行下面的代码 class Element var name String init name String self name name deinit print Element is deinitializing var elem
  • Get-ChildItem -force 报告“我的文档”文件夹和其他连接点上的“访问被拒绝”

    我有一个我编写的脚本来替换文件 我将参数传递给它以获取文件名以及要搜索的基本位置 工人线是 SubLocations Get ChildItem Path Startlocation Recurse include Filename For
  • 如何在基于paraview的python脚本中显示vtkUnstructedGrid?

    我在 Ubuntu 18 04 系统上安装 paraview 5 6 我想编写一个 python 脚本来显示 vtkUnstructedGrid import numpy as np from paraview simple import