簡體   English   中英

VTK:使用 vtkDelaunay2D 渲染凹多邊形

[英]VTK: render concave polygon with vtkDelaunay2D

我想使用 vtkDelaunay2D 渲染一個凹多邊形。 我已經讀過它應該與 vtkDelaunay2D 一起使用,但事實並非如此。 為什么? 這是我的代碼:

import vtk

points = vtk.vtkPoints()

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

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

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

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()

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

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

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

結果如下所示:

結果

右側的三角形不應該存在。

那么為什么會這樣呢? 我該怎么做才能避免這種情況發生?

文檔(特別是Warning部分)來看,output 預計是凸的。

作為您示例的解決方法,減少過濾器的Offset值會導致您想要的結果(例如delaunay.SetOffset(0.1) )。 但由於它不是過濾器想要的,它可能會產生意想不到的結果。

您可以使用delaunay.SetSourceData(polyline)添加包含定義邊界的線的逆時針 polydata,然后獲得所需的結果:

在此處輸入圖像描述

但這僅在您假設您知道邊界時才有效

暫無
暫無

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

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