簡體   English   中英

VTK:使用 vtkDelaunay2D 創建多邊形和孔不起作用

[英]VTK: creating polygon and a hole with vtkDelaunay2D not working

我想在 VTK 中渲染一個帶有孔的多邊形。 我發現 vtkDelaunay2D class 應該可以解決問題。 我按照這里的教程vtkDelaunay2D 示例,它工作得很好。

之后我嘗試用不同的洞創建一個不同的多邊形。 而且我不明白為什么它不起作用,我想知道我必須改變什么。

應該看起來像這樣 這就是它應該的樣子。 現實 這就是它在現實中的樣子。

這是我使用的代碼:

import vtk
import random

points = vtk.vtkPoints()

ls = [
    [2, 2], [-2, 2], [-2, -2], [2, -2], 
    [5, 5], [-5, 5], [-8, 0], [-5, -5], [5, -5], [8, 0],
    [10, 10], [-10, 10], [-10, -10], [10, -10]
]
for x, y in ls:
    points.InsertNextPoint(x, y, 0)

aPolyData = vtk.vtkPolyData()
aPolyData.SetPoints(points)


aCellArray = vtk.vtkCellArray()

cPolygon = vtk.vtkPolygon()
start = 0
for idd in range(start, start + 4):
    cPolygon.GetPointIds().InsertNextId(idd)
aCellArray.InsertNextCell(cPolygon)

boundary = vtk.vtkPolyData()
boundary.SetPoints(aPolyData.GetPoints())
boundary.SetPolys(aCellArray)

delaunay = vtk.vtkDelaunay2D()
delaunay.SetInputData(aPolyData)
delaunay.SetSourceData(boundary)

################################## Actors etc:
meshMapper = vtk.vtkPolyDataMapper()
meshMapper.SetInputConnection(delaunay.GetOutputPort())

colors = vtk.vtkNamedColors()

meshActor = vtk.vtkActor()
meshActor.SetMapper(meshMapper)
meshActor.GetProperty().EdgeVisibilityOn()
meshActor.GetProperty().SetEdgeColor(colors.GetColor3d("Peacock"))
meshActor.GetProperty().SetInterpolationToFlat()


boundaryMapper = vtk.vtkPolyDataMapper()
boundaryMapper.SetInputData(boundary)

boundaryActor = vtk.vtkActor()
boundaryActor.SetMapper(boundaryMapper)
boundaryActor.GetProperty().SetColor(colors.GetColor3d("Raspberry"))
boundaryActor.GetProperty().SetLineWidth(3)
boundaryActor.GetProperty().EdgeVisibilityOn()
boundaryActor.GetProperty().SetEdgeColor(1, 1, 0)
boundaryActor.GetProperty().SetRepresentationToWireframe()

renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)

renderer.AddActor(meshActor)
renderer.AddActor(boundaryActor)
renderer.SetBackground(colors.GetColor3d("Mint"))

renderWindow.SetSize(640, 480)
renderWindow.Render()
renderWindowInteractor.Start()

據我所知,它應該可以工作。 就像在示例中一樣,我創建了一組點,在前 4 個點(應該是孔)周圍定義一個邊界,然后渲染它。

改變

for idd in range(start, start + 4):

進入

for idd in reversed(range(start, start + 4)):

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM