当前位置: 首页 > news >正文

ConstrainedDelaunay2D 顺逆时针限制三角剖分

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①平面生成Delaunay2D注意事项,②如何生成一个带空洞的平面


二:代码及注释

import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonCore import ( vtkMinimalStandardRandomSequence, vtkPoints ) from vtkmodules.vtkCommonDataModel import ( vtkCellArray, vtkPolyData, vtkPolygon ) from vtkmodules.vtkFiltersCore import vtkDelaunay2D from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() rng = vtkMinimalStandardRandomSequence() rng.SetSeed(0) gridSize = 10 points = vtkPoints() for x in range(gridSize): for y in range(gridSize): d1 = rng.GetValue() / 2.0 - 0.25 rng.Next() d2 = rng.GetValue() / 2.0 - 0.25 rng.Next() points.InsertNextPoint(x+d1, y+d2, 0) aPolyData = vtkPolyData() aPolyData.SetPoints(points) aCellArray = vtkCellArray() # vtkPolyGon 多边形单元 aPolygon = vtkPolygon() """ 下面索引的顺序是顺时针的 顺时针定义的内部多边形被视为孔洞,剖分会避开此区域,源代码写法是这样的 aPolygon.GetPointIds().InsertNextId(22) aPolygon.GetPointIds().InsertNextId(23) aPolygon.GetPointIds().InsertNextId(24) aPolygon.GetPointIds().InsertNextId(25) aPolygon.GetPointIds().InsertNextId(35) aPolygon.GetPointIds().InsertNextId(45) aPolygon.GetPointIds().InsertNextId(44) aPolygon.GetPointIds().InsertNextId(43) aPolygon.GetPointIds().InsertNextId(42) aPolygon.GetPointIds().InsertNextId(32) """ aPolygon.GetPointIds().SetNumberOfIds(10) aPolygon.GetPointIds().SetId(0, 22) aPolygon.GetPointIds().SetId(1, 23) aPolygon.GetPointIds().SetId(2, 24) aPolygon.GetPointIds().SetId(3, 25) aPolygon.GetPointIds().SetId(4, 35) aPolygon.GetPointIds().SetId(5, 45) aPolygon.GetPointIds().SetId(6, 44) aPolygon.GetPointIds().SetId(7, 43) aPolygon.GetPointIds().SetId(8, 42) aPolygon.GetPointIds().SetId(9, 32) """ 下面的索引的顺序是逆时针的 逆时针定义的外部多边形会被视为外部边界,只在这里面发生三角剖分 aPolygon.GetPointIds().InsertNextId(32) aPolygon.GetPointIds().InsertNextId(42) aPolygon.GetPointIds().InsertNextId(43) aPolygon.GetPointIds().InsertNextId(44) aPolygon.GetPointIds().InsertNextId(45) aPolygon.GetPointIds().InsertNextId(35) aPolygon.GetPointIds().InsertNextId(25) aPolygon.GetPointIds().InsertNextId(24) aPolygon.GetPointIds().InsertNextId(23) aPolygon.GetPointIds().InsertNextId(22) """ aCellArray.InsertNextCell(aPolygon) boundary = vtkPolyData() boundary.SetPoints(points) boundary.SetPolys(aCellArray) delaunay = vtkDelaunay2D() delaunay.SetInputData(aPolyData) # 提供待剖分的100个点 delaunay.SetSourceData(boundary) # 提供了约束信息,根据约束信息的顺逆时针决定是不剖分还是只剖分这个不分 # Visualize meshMapper = vtkPolyDataMapper() meshMapper.SetInputConnection(delaunay.GetOutputPort()) meshActor = vtkActor() meshActor.SetMapper(meshMapper) meshActor.GetProperty().EdgeVisibilityOn() meshActor.GetProperty().SetEdgeColor(colors.GetColor3d('Peacock')) meshActor.GetProperty().SetInterpolationToFlat() boundaryMapper = vtkPolyDataMapper() boundaryMapper.SetInputData(boundary) boundaryActor = vtkActor() boundaryActor.SetMapper(boundaryMapper) boundaryActor.GetProperty().SetColor(colors.GetColor3d('Raspberry')) boundaryActor.GetProperty().SetLineWidth(3) boundaryActor.GetProperty().EdgeVisibilityOn() boundaryActor.GetProperty().SetEdgeColor(colors.GetColor3d('Red')) boundaryActor.GetProperty().SetRepresentationToWireframe() # Create a renderer, render window, and interactor renderer = vtkRenderer() renderWindow = vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindowInteractor = vtkRenderWindowInteractor() renderWindowInteractor.SetRenderWindow(renderWindow) # Add the actor to the scene renderer.AddActor(meshActor) renderer.AddActor(boundaryActor) renderer.SetBackground(colors.GetColor3d('Mint')) # Render and interact renderWindow.SetSize(640, 480) renderWindow.SetWindowName('ConstrainedDelaunay2D') renderWindow.Render() renderWindowInteractor.Start() if __name__ == '__main__': main()
http://www.gsyq.cn/news/158194.html

相关文章:

  • AI 测试真正的分水岭,正在从“会不会用模型”走向“能不能跑稳系统”
  • UUD白羊座蓝牙音箱MX02拆解:音质与设计的平衡
  • Win10下安装TensorFlow 2.3.0 GPU版本完整教程
  • Docker中配置Stable Diffusion WebUI与TensorRT
  • 揭秘Open-AutoGLM本地化难题:5个关键步骤实现零延迟AI响应
  • 梯度下降法:优化算法核心解析
  • 俄罗斯电商开店工具测评?2025俄罗斯电商选品技巧? - 栗子测评
  • 领导力建议经验分享 从知道到做到:可落地的领导力框架
  • 在寒武纪MLU上快速运行PyTorch指南
  • 制氮机哪家好?2025优质制氮机生产厂家盘点 - 栗子测评
  • 在docker中部署influxdb
  • PyTorch多GPU训练全指南:单机到多机并行
  • Miniconda构建医学影像AI环境实战
  • Miniconda运行SadTalker生成说话头像
  • 数字悼念馆:当AI成为逝者的回声,我们如何不迷失在技术的镜像中?
  • 3D 医学扫描同时显示患者的皮肤、骨骼的 3D 模型(通过等值面提取),以及三个正交切片
  • Win10下TensorFlow-GPU 2.2.0安装指南
  • 2025激光切管机厂家测评:激光切管机哪家好大盘点 - 栗子测评
  • 小米开源MiMo-V2-Flash:打破大模型成本想象的技术密码
  • Mx_yolo本地训练与K210模型移植实战
  • 软件测试环境搭建及测试过程
  • RDA在旅游行业的创新:行程数据资产化如何重塑个性化服务?
  • 为什么90%的海外团队仍选择非Open-AutoGLM方案?真相令人震惊
  • 海外上线原生 APP的流程
  • 太原门头设计制作哪个公司有售后保障
  • 2025年信誉好的甲醛检测品牌企业推荐:实力强的甲醛检测公司有哪些? - mypinpai
  • PyTorch中GPU使用与性能优化全解析
  • 构建高效数字化系统,一站式活动与表单管理系统源码
  • Open-AutoGLM与H2O、AutoGluon、Google Cloud AutoML全面PK(数据说话)
  • PyTorch GPU显存释放与高效训练技巧