news 2026/1/20 6:50:30

BooleanOperationPolyDataFilter 布尔运算的演示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BooleanOperationPolyDataFilter 布尔运算的演示

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①vtkTriangleFilter三角面化,②布尔运算


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkFiltersCore import vtkCleanPolyData, vtkTriangleFilter from vtkmodules.vtkFiltersGeneral import vtkBooleanOperationPolyDataFilter from vtkmodules.vtkFiltersSources import vtkSphereSource from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) if __name__ == '__main__': colors = vtkNamedColors() operation = "intersection" # "intersection" "difference" # 没有找到示例代码中示意图的mesh模型,故采用球体去生成展示模型 """ # 展示vtkTriangleFilter和vtkCleanPolyData的用法 poly1 = ReadPolyData(fn1) tri1 = vtkTriangleFilter() tri1.SetInputData(poly1) clean1 = vtkCleanPolyData() clean1.SetInputConnection(tri1.GetOutputPort()) clean1.Update() input1 = clean1.GetOutput() vtkTriangleFilter:把 vtkPolyData 中所有的多边形(四边形、多边形等)统一转换成三角形 vtkCleanPolyData: 作用主要是 清理 / 合并重复或无效的几何数据,让 vtkPolyData 更加规整 """ sphereSource1 = vtkSphereSource() sphereSource1.SetCenter(0.25, 0, 0) sphereSource1.SetThetaResolution(21) sphereSource1.SetPhiResolution(21) sphereSource1.Update() input1 = sphereSource1.GetOutput() sphereSource2 = vtkSphereSource() sphereSource2.Update() input2 = sphereSource2.GetOutput() input1Mapper = vtkPolyDataMapper() input1Mapper.SetInputData(input1) input1Mapper.ScalarVisibilityOff() input1Actor = vtkActor() input1Actor.SetMapper(input1Mapper) input1Actor.GetProperty().SetDiffuseColor(colors.GetColor3d('Tomato')) input1Actor.GetProperty().SetSpecular(0.6) input1Actor.GetProperty().SetSpecularPower(20) input1Actor.SetPosition(input1.GetBounds()[1] - input1.GetBounds()[0], 0, 0) input2Mapper = vtkPolyDataMapper() input2Mapper.SetInputData(input2) input2Mapper.ScalarVisibilityOff() input2Actor = vtkActor() input2Actor.SetMapper(input2Mapper) input2Actor.GetProperty().SetDiffuseColor(colors.GetColor3d('Mint')) input2Actor.GetProperty().SetSpecular(0.6) input2Actor.GetProperty().SetSpecularPower(20) input2Actor.SetPosition(-(input1.GetBounds()[1] - input1.GetBounds()[0]), 0, 0) booleanOperation = vtkBooleanOperationPolyDataFilter() if operation == "union": booleanOperation.SetOperationToUnion() elif operation == "intersection": booleanOperation.SetOperationToIntersection() else: booleanOperation.SetOperationToDifference() booleanOperation.SetInputData(0, input1) booleanOperation.SetInputData(1, input2) booleanOperationMapper = vtkPolyDataMapper() booleanOperationMapper.SetInputConnection(booleanOperation.GetOutputPort()) booleanOperationMapper.ScalarVisibilityOff() booleanOperationActor = vtkActor() booleanOperationActor.SetMapper(booleanOperationMapper) booleanOperationActor.GetProperty().SetDiffuseColor(colors.GetColor3d('Banana')) booleanOperationActor.GetProperty().SetSpecular(0.6) booleanOperationActor.GetProperty().SetSpecularPower(20) renderer = vtkRenderer() renderer.AddViewProp(input1Actor) renderer.AddViewProp(input2Actor) renderer.AddViewProp(booleanOperationActor) renderer.SetBackground(colors.GetColor3d('Silver')) renderWindow = vtkRenderWindow() renderWindow.AddRenderer(renderer) renderWindow.SetSize(640, 480) renderWindow.SetWindowName('BooleanOperationPolyDataFilter') viewUp = [0.0, 0.0, 1.0] position = [0.0, -1.0, 0.0] renderer.GetActiveCamera().SetViewUp(viewUp) renderer.GetActiveCamera().SetPosition(position) renderer.ResetCamera() renderer.GetActiveCamera().Dolly(1.4) renderer.ResetCameraClippingRange() renWinInteractor = vtkRenderWindowInteractor() renWinInteractor.SetRenderWindow(renderWindow) renderWindow.Render() renWinInteractor.Start()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/11 16:29:18

零基础跟我学做AI Agent(第1课:环境安装)

从今天开始,作者介绍一系列AI Agent(智能体)的开发或部署。需要的基础只是要对Python有个大概的了解,几乎是从0开始实践。涉及到的代码都会比较简单,一般不会超过50行。 一、Agent简介 AI Agent简称Agent,以…

作者头像 李华
网站建设 2025/12/15 11:24:06

2026年6大房产中介系统评测

在房产中介行业数字化转型加速的背景下,选择一款适配自身业务的管理系统成为提升运营效率、降低成本的关键。目前市场上的房产中介系统种类繁多,功能侧重点各有不同,让不少中介从业者难以抉择。本次评测聚焦6款主流房产中介系统,从…

作者头像 李华
网站建设 2026/1/18 1:39:55

12、Unix 文件管理全攻略

Unix 文件管理全攻略 1. 文件复制 在使用 cp 命令复制文件时,要特别注意路径名的准确性。如果使用 cp -R 时给出错误的路径名,可能会导致将目录树复制到自身,程序会一直运行直到文件系统被填满。 cp 命令复制文件时,新文件的所有权会变更为执行 cp 命令的用户。若…

作者头像 李华
网站建设 2026/1/19 16:42:43

13、在Unix系统中查找文件和信息的实用方法

在Unix系统中查找文件和信息的实用方法 在现代计算机的使用过程中,随着存储系统的不断增大,查找文件和信息成为了一项基本挑战。无论是文件和目录管理得井井有条、使用便于记忆的名称,还是存在大量随意命名的文件和目录,总会有需要根据文件内容、文件名或其他属性来查找文…

作者头像 李华
网站建设 2026/1/17 7:42:00

14、深入探索文件查找:从 `find` 到 Spotlight

深入探索文件查找:从 find 到 Spotlight 在操作系统中,高效地查找文件是一项重要的技能。本文将详细介绍 find 命令的使用方法,包括根据文件名、文件大小、权限和修改时间等条件进行查找,还会介绍 find 的好搭档 xargs 以及 Mac OS X 中的 Spotlight 功能。 1. …

作者头像 李华