news 2026/4/18 20:02:42

Bottle 一条曲线通过旋转形成一个瓶子的mesh

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bottle 一条曲线通过旋转形成一个瓶子的mesh

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①围绕某个轴旋转进行模型生成


二:代码及注释

import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkCommonCore import vtkPoints from vtkmodules.vtkCommonDataModel import vtkCellArray, vtkPolyData from vtkmodules.vtkFiltersCore import vtkStripper, vtkTubeFilter from vtkmodules.vtkFiltersModeling import vtkRotationalExtrusionFilter from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() points = vtkPoints() points.InsertPoint(0, 0.01, 0.0, 0.0) points.InsertPoint(1, 1.5, 0.0, 0.0) points.InsertPoint(2, 1.5, 0.0, 3.5) points.InsertPoint(3, 1.25, 0.0, 3.75) points.InsertPoint(4, 0.75, 0.0, 4.00) points.InsertPoint(5, 0.6, 0.0, 4.35) points.InsertPoint(6, 0.7, 0.0, 4.65) points.InsertPoint(7, 1.0, 0.0, 4.75) points.InsertPoint(8, 1.0, 0.0, 5.0) points.InsertPoint(9, 0.2, 0.0, 5.0) lines = vtkCellArray() lines.InsertNextCell(10) # 创建一个新的单元(cell),需要参数指定这个单元需要多少个点 lines.InsertCellPoint(0) # 将这个点的ID添加到当前正在构建的单元中 lines.InsertCellPoint(1) lines.InsertCellPoint(2) lines.InsertCellPoint(3) lines.InsertCellPoint(4) lines.InsertCellPoint(5) lines.InsertCellPoint(6) lines.InsertCellPoint(7) lines.InsertCellPoint(8) lines.InsertCellPoint(9) profile = vtkPolyData() profile.SetPoints(points) profile.SetLines(lines) # 根据profile绕着某个轴进行旋转,获得一个完整的mesh extrude = vtkRotationalExtrusionFilter() extrude.SetInputData(profile) """ Resolution 控制 旋转拉伸时的分段数,也就是把 360° 拆分成多少个切片。 值越大,旋转生成的 3D 表面越平滑;值越小,表面就会显得棱角分明 """ extrude.SetResolution(60) """ extrude = vtkRotationalExtrusionFilter() extrude.SetInputData(profile) extrude.SetResolution(360) # 设置旋转后的 角度分辨率(采样数) extrude.SetTranslation(6) # 在旋转的同时沿着 Z 轴平移 6 个单位长度 extrude.SetDeltaRadius(1.0) # 表示在旋转过程中半径的变化量, 也就是每转一圈,物体的半径增加1个单位 extrude.SetAngle(2160.0) # 设置旋转的总角度 """ mapper = vtkPolyDataMapper() mapper.SetInputConnection(extrude.GetOutputPort()) bottle = vtkActor() bottle.SetMapper(mapper) bottle.GetProperty().SetColor(colors.GetColor3d("Mint")) """ vtkStripper 将一个网格中独立的多边形(通常是三角形或四边形)转换为三角形带(triangle strips)和多边形带(polygon strips) 方便渲染,但是在这个例子里,有没有这个区别不大,可以视为是一个优化方法。 """ stripper = vtkStripper() stripper.SetInputData(profile) # 将这条线进行膨胀并显示 tubes = vtkTubeFilter() tubes.SetInputConnection(stripper.GetOutputPort()) """ 下面这种写法,摒弃了stripper的优化,直接使用profile这个polydata也可以 """ tubes.SetInputConnection(stripper.GetOutputPort()) tubes.SetNumberOfSides(11) tubes.SetRadius(0.05) profileMapper = vtkPolyDataMapper() profileMapper.SetInputConnection(tubes.GetOutputPort()) profileActor = vtkActor() profileActor.SetMapper(profileMapper) profileActor.GetProperty().SetColor(colors.GetColor3d('Tomato')) renderer = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(renderer) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) renderer.AddActor(bottle) renderer.AddActor(profileActor) renderer.SetBackground(colors.GetColor3d('Burlywood')) renWin.SetSize(640, 480) renWin.SetWindowName('Bottle'); renWin.Render() renderer.GetActiveCamera().SetPosition(1, 0, 0) renderer.GetActiveCamera().SetFocalPoint(0, 0, 0) renderer.GetActiveCamera().SetViewUp(0, 0, 1) renderer.ResetCamera() renderer.GetActiveCamera().Azimuth(30) renderer.GetActiveCamera().Elevation(30) renWin.Render() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 8:10:50

GalTransl完全攻略:10分钟掌握AI游戏翻译黑科技

还在为日文Galgame看不懂而烦恼?想要亲手汉化心仪的游戏却苦于技术门槛?GalTransl正是为你量身打造的AI自动化翻译解决方案,让游戏汉化变得前所未有的简单高效。 【免费下载链接】GalTransl 支持GPT-3.5/GPT-4/Newbing/Sakura等大语言模型的G…

作者头像 李华
网站建设 2026/4/17 9:07:07

11、Unix文本编辑与文件管理全解析

Unix文本编辑与文件管理全解析 1. vi基础入门 在Unix系统中,vi是一款强大的文本编辑器。下面我们来详细了解如何使用vi创建和编辑文本文件。 - 创建新文件 :若要创建一个名为 sample 的新文件,可在终端输入以下命令: $ vi sample执行该命令后,屏幕会显示类似图4 …

作者头像 李华
网站建设 2026/4/18 16:45:27

vue基于Spring Boot的校园体育器材租赁管理系统_142e9vt2

目录具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持java、ThinkPHP、Node.js、Spring B…

作者头像 李华
网站建设 2026/4/18 4:08:28

全行业AI智能体方案!500+实战案例,从医疗到金融,一站式解锁应用思路

一、项目介绍:全行业AI智能体的“灵感与实战宝库” 在AI智能体技术全面爆发的当下,开发者和企业往往面临“场景落地难、框架选型迷、案例参考少”的三重困境。而GitHub上的500-AI-Agents-Projects项目,正是为破解这些痛点而生的开源资源合集。 该项目由ashishpatel26维护,…

作者头像 李华
网站建设 2026/4/17 12:15:15

硅橡胶密封胶703/704/705/706怎么选

卡夫特RTV硅橡胶K-703/704/705/706全系列产品解析与技术选型指南 一、产品矩阵与技术定位 型号核心特性耐温范围透明度典型应用场景703半流淌型,耐冷水性突出-60℃~200℃乳白色水下仪器密封、冷冻设备灌封704通用型,抗垂流优化-60℃~250℃乳白色/黑色车…

作者头像 李华
网站建设 2026/4/17 21:07:40

本地微调大语言模型全攻略:从安装PyTorch到导入Ollama,一步步实践!

简介 本文详细介绍了本地微调大语言模型的全流程,包括安装PyTorch并检查GPU兼容性、安装LLaMAFactory、下载Qwen模型、准备数据集、使用LoRA技术进行微调(包括unsloth优化)、测试效果、转换为GGUF格式并导入Ollama。整个过程提供了详细的命令…

作者头像 李华