如何在VTKi中绘制上托或环形曲面

时间:2019-04-29 00:48:18

标签: python vtk

我开始使用 vtki https://pypi.org/project/vtki)一个使用python的可视化工具包(VTK)的帮助程序模块。可视化用于快速原型制作的3D表面非常容易,但是与VTK相比有一些局限性。

我遇到的一个问题是可视化超环形曲面,我可以使用vtk.vtkParametricSuperToroid()类对VTK进行处理,但是我无法在vtki中找到类似的功能。 vtki仅提供简单的表面。

我想知道是否有人有使用vtki绘制超环面的经验。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我是PyVista的开发人员之一(以前是vtki-我们最近不得不更改名称):https://github.com/pyvista/pyvista,很高兴看到您一直在使用此软件!

目前,vtk.vtkParametricSuperToroid类目前未包装在PyVista中-我在此处创建了功能请求:https://github.com/pyvista/pyvista/issues/213

请随意在其中鸣叫,并向我们提供一些示例代码,说明如何创建和使用vtk.vtkParametricSuperToroid对象。

我们有几个包装所有VTK类的请求,这很容易满足这些要求,我们只需要一些帮助来理解所有其他非典型网格类型。

答案 1 :(得分:0)

因为vtkParametricSuperToroid类没有包装在PyVista中,所以我找到了另一种解决方案,并使用vista.StructuredGrid类来定义超环面。我创建了一个函数 supertorus ,并使用它与PyVista的vista.add_mesh()绘制了超环形曲面。

import vista
import numpy as np

def supertorus(yScale, xScale, Height, InternalRadius, Vertical, Horizontal):
    #  initial range for values used in parametric equation
    n = 100
    u = np.linspace(-np.pi, np.pi, n)
    t = np.linspace(-np.pi, np.pi, n)
    u, t = np.meshgrid(u, t)

    # a1: Y Scale <0, 2>
    a1 = yScale
    # a2: X Scale <0, 2>
    a2 = xScale
    # a3: Height <0, 5>
    a3 = Height
    # a4: Internal radius <0, 5>
    a4 = InternalRadius
    # e1: Vertical squareness <0.25, 1>
    e1 = Vertical
    # e2: Horizontal squareness <0.25, 1>
    e2 = Horizontal

    # Definition of parametric equation for supertorus
    x = a1 * (a4 + np.sign(np.cos(u)) * np.abs(np.cos(u)) ** e1) *\
        np.sign(np.cos(t)) * np.abs(np.cos(t)) ** e2
    y = a2 * (a4 + np.sign(np.cos(u)) * np.abs(np.cos(u)) ** e1) *\
        np.sign(np.sin(t)) * np.abs(np.sin(t)) ** e2
    z = a3 * np.sign(np.sin(u)) * np.abs(np.sin(u)) ** e1

    grid = vista.StructuredGrid(x, y, z)
    return grid