当前位置: 首页 > 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.jsqmd.com/news/143934/

相关文章:

  • AI 测试真正的分水岭,正在从“会不会用模型”走向“能不能跑稳系统”
  • win10找回自带的windows照片查看器——打开jpg、png、gif、psd其他格式的图片
  • 【资深架构师亲授】Open-AutoGLM生产级部署方案:高并发下的稳定性优化秘诀
  • 2025年度成都万象城优质餐厅排行榜:值得打卡的万象城可口美食餐饮企业有哪些? - 工业设备
  • 在docker中部署influxdb
  • 2025杭州民办高中师资揭秘:这几所杭州民办高中口碑好 - 栗子测评
  • FreeBSD 11.0-RELEASE 发布亮点与升级指南
  • 软著信息如何查询?怎么辨别软著证书真伪? - 还在做实验的师兄
  • 锂电池连接器厂家?2025防水连接器公司推荐榜单 - 栗子测评
  • 手写汉字对比
  • 2025年有实力的海关数据品牌企业推荐:比较不错的海关数据品牌企业有哪些? - 工业品网
  • Win10下安装TensorFlow 2.3.0 GPU版本完整教程
  • 今天来和大家聊一个当下科技领域特别火爆的概念——AI Agent!
  • YOLO动态链接库的编译与调用详解
  • 2025年12月读写器厂家推荐,rfid读写器、超高频读写器、超高频rfid读写器厂家选择指南 - 品致汇
  • 3D 医学扫描同时显示患者的皮肤、骨骼的 3D 模型(通过等值面提取),以及三个正交切片
  • C语言如何编译成可执行文件?五大步骤详解
  • 【Open-AutoGLM实战排错手册】:从CORS到跨域,彻底解决网页调用难题
  • 2025激光切管机厂家测评:激光切管机哪家好大盘点 - 栗子测评
  • 矩阵乘向量的本质:基底变换与线性组合
  • 2025年AI大模型工程师终极学习指南:全网首发实战项目+资源大合集,不可错过!
  • 为什么90%的海外团队仍选择非Open-AutoGLM方案?真相令人震惊
  • 内推专场】 京东/滴滴/网易/OPPO等名企测试岗位开放,覆盖北上广深杭!
  • 太原门头设计制作哪个公司有售后保障
  • 构建高效数字化系统,一站式活动与表单管理系统源码
  • 以空间为核心的高敏感仓储智能管控与决策推演关键技术研究
  • 海外上线原生 APP的流程
  • 2025年信誉好的甲醛检测品牌企业推荐:实力强的甲醛检测公司有哪些? - mypinpai
  • PyTorch中GPU使用与性能优化全解析
  • 2025德国留学机构口碑榜单 - 栗子测评