- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我在 vtk
中所做的粗略解释:
vtkClipClosedSurface
关闭其中一个迷宫,以便我得到一个不再有开放表面的物体。 regular surface looks like this ,它看起来是一个封闭的表面 like this . vtkClipClosedSurface
从表面法线知道在哪里关闭表面,在哪里不关闭。问题是:我的结构的法线很好,它们都指向正确的方向。如果您仔细观察结构,您会注意到下部基本上是顶部的倒置,逐渐变化,全部在一个表面上。
vtkSmoothPolyDataFilter
,
vtkCleanPolyData
或
vtkPolyDataNormals
.我什至尝试用
vtkFeatureEdges
提取边界面,这导致了更糟糕的结果。偶
vtkFillHolesFilter
没有产生任何可接受的结果。我的表面看起来完美无瑕,很容易创建一个边界。
vtkFillHolesFilter
这导致结构内部的表面,而它们应该只占据 te 对象的边界。
mayavi.mlab.contour3d
创建曲面PolyData
通过提取 actor.mapper.input
tvtk
转换格式到正规 vtk
vtkClipClosedSurface
带有切掉部分结构的平面集合(平面集合与结构边界相同时会出现错误)import numpy as np
import vtk # VTK version 7.0
from mayavi import mlab # mayavi version 4.4.4
from mayavi.api import Engine, OffScreenEngine
from tvtk.api import tvtk
def schwarz_D(x, y, z, linear_term=0):
"""This is the function for the Schwarz Diamond level surface."""
return (np.sin(x) * np.sin(y) * np.sin(z) + np.sin(x) * np.cos(y) * np.cos(z) +
np.cos(x) * np.sin(y) * np.cos(z) + np.cos(x) * np.cos(y) * np.sin(z)) - linear_term * z
def plane_collection(xn, x, yn, y, zn, z):
"""Defines the 6 planes for cutting rectangular objects to the right size."""
plane1 = vtk.vtkPlane()
plane1.SetOrigin(x, 0, 0)
plane1.SetNormal(-1, 0, 0)
plane2 = vtk.vtkPlane()
plane2.SetOrigin(0, y, 0)
plane2.SetNormal(0, -1, 0)
plane3 = vtk.vtkPlane()
plane3.SetOrigin(0, 0, z)
plane3.SetNormal(0, 0, -1)
plane4 = vtk.vtkPlane()
plane4.SetOrigin(xn, 0, 0)
plane4.SetNormal(1, 0, 0)
plane5 = vtk.vtkPlane()
plane5.SetOrigin(0, yn, 0)
plane5.SetNormal(0, 1, 0)
plane6 = vtk.vtkPlane()
plane6.SetOrigin(0, 0, zn)
plane6.SetNormal(0, 0, 1)
plane_list = [plane4, plane1, plane5, plane2, plane6, plane3]
planes = vtk.vtkPlaneCollection()
for item in plane_list:
planes.AddItem(item)
return planes
[nx, ny, nz] = [2, 2, 8] # amount of unit cells
cell_size = 1
gradient_value = 0.04 # only values below 0.1 produce the desired geometry; this term is essential
x, y, z = np.mgrid[-cell_size*(nx + 1)/2:cell_size*(nx + 1)/2:100j,
-cell_size*(ny + 1)/2:cell_size*(ny + 1)/2:100j,
-cell_size*(nz + 1)/2:cell_size*(nz + 1)/2:100*2j] * np.pi / (cell_size/2)
# engine = Engine()
engine = OffScreenEngine() # do not start mayavi GUI
engine.start()
fig = mlab.figure(figure=None, engine=engine)
contour3d = mlab.contour3d(x, y, z, schwarz_D(x, y, z, gradient_value), figure=fig)
scene = engine.scenes[0]
actor = contour3d.actor.actors[0]
iso_surface = scene.children[0].children[0].children[0]
iso_surface.contour.minimum_contour = 0
iso_surface.contour.number_of_contours = 1
iso_surface.compute_normals = False
iso_surface.contour.auto_update_range = False
mlab.draw(fig)
# mlab.show() # enable if you want to see the mayavi GUI
polydata = tvtk.to_vtk(actor.mapper.input) # convert tvtkPolyData to vtkPolyData
# Move object to the coordinate center to make clipping easier later on.
center_coords = np.array(polydata.GetCenter())
center = vtk.vtkTransform()
center.Translate(-center_coords[0], -center_coords[1], -center_coords[2])
centerFilter = vtk.vtkTransformPolyDataFilter()
centerFilter.SetTransform(center)
centerFilter.SetInputData(polydata)
centerFilter.Update()
# Reverse normals in order to receive a closed surface after clipping
reverse = vtk.vtkReverseSense()
reverse.SetInputConnection(centerFilter.GetOutputPort())
reverse.ReverseNormalsOn()
reverse.ReverseCellsOn()
reverse.Update()
bounds = np.asarray(reverse.GetOutput().GetBounds())
clip = vtk.vtkClipClosedSurface()
clip.SetInputConnection(reverse.GetOutputPort())
clip.SetTolerance(10e-3)
# clip.TriangulationErrorDisplayOn() # enable to see errors for not watertight surfaces
clip.SetClippingPlanes(plane_collection(bounds[0] + cell_size/2, bounds[1] - cell_size/2,
bounds[2] + cell_size/2, bounds[3] - cell_size/2,
bounds[4] + cell_size/2, bounds[5] - cell_size/2))
clip.Update()
# Render the result
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(clip.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)
renderWindow.Render()
renderWindowInteractor.Start()
最佳答案
尝试使用 pymeshfix .我在生成的一些低分辨率 mandelbulb 中遇到了非常相似的问题。
您可能还想查看 pyvista,它是 vtk 的一个很好的 Python 包装器。
关于python - VTK 不能用 vtkClipClosedSurface 构造一个合适的闭合曲面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37833562/
单击位于阴影根内部的元素时出现空指针异常(已关闭) 尝试用 Java 脚本处理它: public WebElement getShadowRootElement(WebElement element)
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 3 年前。 Improve th
我开始了解 Javascript 中的原型(prototype)设计和闭包,但还不完全是这样。下面的示例中,我的两个对象,第二个对象似乎失去了范围/上下文并接管了第一个对象的身份。 function
我有一个 Ionic 应用程序,我正在尝试从闭包内部返回数据。控制台正确显示所有内容,但我似乎无法正确返回数据。我尝试了几种不同的变体,但没有成功。 $scope.callbackMethod = f
我正在编写一个程序,能够识别面部的以下特征: 眼睛是睁着还是闭着 嘴巴是张开还是闭合(最好是张开程度) 脸部转向的方向(左、右或正面) 与其从头开始开发此功能(这所以不是我的领域),我希望能够使用第三
我有一个错误,我不明白,我有一个json,我做了一个接口,当我试图循环它时,我在我的html中得到了一个错误。。JSON格式对我来说相当复杂。。谢谢。。图片中的错误。杰森。接口。服务。Ts.file。
我是一名优秀的程序员,十分优秀!