vs做网站怎样添加图片梵客家装口碑怎么样

张小明 2025/12/31 16:52:04
vs做网站怎样添加图片,梵客家装口碑怎么样,建盏的好坏怎么区分,沈阳seo搜索引擎VTK实战#xff1a;vtkPolyData单元的增/删/改全攻略#xff08;附可运行C Demo#xff09; 在VTK三维可视化开发中#xff0c;vtkPolyData是处理表面网格#xff08;如三角形、四边形曲面#xff09;的核心数据结构#xff0c;其本质是“点集合#xff08;Points…VTK实战vtkPolyData单元的增/删/改全攻略附可运行C Demo在VTK三维可视化开发中vtkPolyData是处理表面网格如三角形、四边形曲面的核心数据结构其本质是“点集合Points 单元集合Cells”——单元不存储点坐标仅存储点的索引。实际开发中如地质建模补全断层网格、工业零件网格修正、医学影像模型编辑对单元的“增、删、改”是高频需求。本文基于VTK官方接口规范从零讲解vtkPolyData中增加单元、替换单元、替换单元指定点关联、删除特定单元的实现方法所有接口均来自VTK源码无编造并提供可直接编译运行的C Demo确保内容准确、落地性强。一、核心前提理解vtkPolyData的Editable属性所有修改单元的操作都依赖Editable属性——这是VTK为性能优化设置的“编辑开关”。1. 官方接口定义// 开启/关闭编辑模式修改单元必须开启voidvtkPolyData::SetEditable(boolflag);// 获取当前编辑状态boolvtkPolyData::GetEditable();2. 关键说明vtkPolyData默认Editablefalse只读模式内部会优化内存布局此时修改单元的操作会静默失效不报错但无效果执行单元增/删/改前必须调用SetEditable(true)开启编辑模式操作完成后建议恢复Editablefalse恢复性能优化。二、核心功能详解单元的增/改/删功能1增加单元InsertNextCell1. 官方接口两种常用形式VTK支持直接传入单元对象或传入单元类型点索引数组两种方式增加单元核心接口如下// 方式1传入已构建的单元对象如vtkTriangle、vtkQuadvtkIdType vtkPolyData::InsertNextCell(vtkCell*cell);// 方式2传入单元类型 点索引数组更高效vtkIdType vtkPolyData::InsertNextCell(intcellType,vtkIdType npts,vtkIdType*ptIds);参数说明cellType单元类型如VTK_TRIANGLE三角形、VTK_QUAD四边形、VTK_LINE线npts单元包含的点数量如三角形传3四边形传4ptIds单元关联的点索引数组必须是已存在的点ID返回值新增单元的ID从0开始递增。2. 使用场景给现有网格补全缺失的单元如地质曲面的断层缺口补三角面手动构建新的网格单元如从0创建简单几何体。功能2替换单元中指定点关联ReplaceCellPoint1. 官方接口定义修改单个单元中“指定位置的点索引”局部修改无需替换整个单元/** * param cellId 要修改的单元ID * param subId 单元内点的位置索引如三角形的0/1/2四边形的0/1/2/3 * param newPointId 新的点索引必须是Points中已存在的点ID */voidvtkPolyData::ReplaceCellPoint(vtkIdType cellId,intsubId,vtkIdType newPointId);2. 使用场景微调单元形态如修正单个三角形的一个顶点位置修复网格中“错误关联点”的单元如断层网格中某单元误关联了非地层点。功能3替换整个单元ReplaceCell1. 官方接口定义用新的单元对象完全替换原有单元适合批量修改单元的点关联/** * param cellId 要替换的目标单元ID * param newCell 新的单元对象类型需与原单元兼容如三角形替换三角形 */voidvtkPolyData::ReplaceCell(vtkIdType cellId,vtkCell*newCell);2. 使用场景彻底替换错误单元如将畸形三角形单元换成规整的三角形单元类型微调如将四边形单元拆分为两个三角形后替换原单元。功能4删除特定单元RemoveCell/DeleteCellVTK提供两种删除单元的方式需根据场景选择1. 直接删除RemoveCell官方接口/** * 直接从单元集合中移除指定ID的单元后续单元ID会自动前移 * param cellId 要删除的单元ID */voidvtkPolyData::RemoveCell(vtkIdType cellId);2. 标记删除DeleteCell RemoveDeletedCells官方接口// 标记单元为“待删除”不会立即移除仅打标记voidvtkPolyData::DeleteCell(vtkIdType cellId);// 清理所有标记为“待删除”的单元需手动调用voidvtkPolyData::RemoveDeletedCells();3. 场景对比单次删除少量单元用RemoveCell直接、高效批量删除多个单元用DeleteCellRemoveDeletedCells减少内存频繁重排性能更优。三、完整可运行Demo单元增/删/改全流程1. 功能演示流程构建基础vtkPolyData含2个三角形单元开启编辑模式演示“增加四边形单元”演示“替换单元中指定点关联”演示“替换整个单元”演示“删除特定单元”每一步打印网格信息验证操作效果。2. 完整C代码#includevtkSmartPointer.h#includevtkPolyData.h#includevtkPoints.h#includevtkTriangle.h#includevtkQuad.h#includevtkCellArray.h#includeiostream// 辅助函数打印vtkPolyData的点和单元信息voidPrintPolyDataInfo(vtkPolyData*polyData,conststd::stringstep){std::cout\n step std::endl;// 打印点信息std::cout点总数polyData-GetNumberOfPoints()std::endl;for(vtkIdType i0;ipolyData-GetNumberOfPoints();i){doublept[3];polyData-GetPoint(i,pt);std::cout 点i(pt[0], pt[1], pt[2])std::endl;}// 打印单元信息std::cout单元总数polyData-GetNumberOfCells()std::endl;for(vtkIdType i0;ipolyData-GetNumberOfCells();i){vtkCell*cellpolyData-GetCell(i);std::cout 单元i类型cell-GetClassName()关联点;for(intj0;jcell-GetNumberOfPoints();j){std::coutcell-GetPointId(j) ;}std::coutstd::endl;}}intmain(){// 步骤1构建基础vtkPolyData // 1.1 创建点集合4个基础点vtkSmartPointervtkPointspointsvtkSmartPointervtkPoints::New();points-InsertNextPoint(0.0,0.0,0.0);// 点0points-InsertNextPoint(1.0,0.0,0.0);// 点1points-InsertNextPoint(0.0,1.0,0.0);// 点2points-InsertNextPoint(1.0,1.0,0.0);// 点3// 1.2 创建2个三角形单元// 单元0关联点0、1、2vtkSmartPointervtkTriangletri0vtkSmartPointervtkTriangle::New();tri0-GetPointIds()-SetId(0,0);tri0-GetPointIds()-SetId(1,1);tri0-GetPointIds()-SetId(2,2);// 单元1关联点1、3、2vtkSmartPointervtkTriangletri1vtkSmartPointervtkTriangle::New();tri1-GetPointIds()-SetId(0,1);tri1-GetPointIds()-SetId(1,3);tri1-GetPointIds()-SetId(2,2);// 1.3 构建单元集合并绑定到vtkPolyDatavtkSmartPointervtkCellArraycellsvtkSmartPointervtkCellArray::New();cells-InsertNextCell(tri0);cells-InsertNextCell(tri1);vtkSmartPointervtkPolyDatapolyDatavtkSmartPointervtkPolyData::New();polyData-SetPoints(points);polyData-SetPolys(cells);// 三角形/四边形属于Polys类型PrintPolyDataInfo(polyData,初始状态);// 步骤2开启编辑模式 polyData-SetEditable(true);std::cout\n编辑模式状态(polyData-GetEditable()?已开启:未开启)std::endl;// 步骤3增加单元插入四边形单元 // 3.1 新增一个点点4用于四边形单元vtkIdType newPtIdpoints-InsertNextPoint(2.0,1.0,0.0);std::cout\n新增点IDnewPtId坐标(2.0, 1.0, 0.0)std::endl;// 3.2 构建四边形单元关联点1、3、4、2vtkIdType quadPtIds[]{1,3,4,2};// 四边形的4个点索引vtkIdType newCellIdpolyData-InsertNextCell(VTK_QUAD,4,quadPtIds);std::cout新增四边形单元IDnewCellIdstd::endl;PrintPolyDataInfo(polyData,增加四边形单元后);// 步骤4替换单元中指定点关联 // 替换单元0三角形的subId2的点原索引2为点4polyData-ReplaceCellPoint(0,2,4);PrintPolyDataInfo(polyData,替换单元0的subId2点后);// 步骤5替换整个单元 // 5.1 构建新的三角形单元关联点0、3、4vtkSmartPointervtkTrianglenewTrivtkSmartPointervtkTriangle::New();newTri-GetPointIds()-SetId(0,0);newTri-GetPointIds()-SetId(1,3);newTri-GetPointIds()-SetId(2,4);// 5.2 替换单元1为新三角形polyData-ReplaceCell(1,newTri);PrintPolyDataInfo(polyData,替换单元1为新三角形后);// 步骤6删除特定单元 // 6.1 直接删除单元2四边形单元polyData-RemoveCell(2);PrintPolyDataInfo(polyData,删除单元2四边形后);// 可选批量删除示例标记单元1为待删除再清理// polyData-DeleteCell(1);// polyData-RemoveDeletedCells();// PrintPolyDataInfo(polyData, 批量删除单元1后);// 步骤7恢复只读模式 polyData-SetEditable(false);std::cout\n编辑模式状态(polyData-GetEditable()?已开启:已关闭)std::endl;return0;}3. 编译配置CMakeLists.txtcmake_minimum_required(VERSION 3.10) project(PolyDataCellEditDemo) # 查找VTK库需提前安装VTK 8.2兼容VTK9.x find_package(VTK REQUIRED COMPONENTS vtkCommonCore vtkCommonDataModel ) include(${VTK_USE_FILE}) # 编译可执行文件 add_executable(PolyDataCellEditDemo main.cpp) # 链接VTK库 target_link_libraries(PolyDataCellEditDemo ${VTK_LIBRARIES})4. 编译运行说明环境要求VTK 8.2建议VTK9.x、CMake 3.10、C11以上编译器编译命令mkdirbuildcdbuild cmake..make-j4# Windows下用nmake或Visual Studio编译运行结果控制台会打印每一步的点/单元信息验证增删改效果。四、核心避坑指南新手必看1. 编辑模式必须开启所有单元修改操作前务必调用SetEditable(true)——否则修改会静默失效这是新手最常犯的错误。2. 点索引不能越界ReplaceCellPoint/InsertNextCell中使用的点ID必须是vtkPolyData-GetPoints()中已存在的ID即小于GetNumberOfPoints()否则会触发内存越界崩溃。3. 单元类型需匹配三角形单元VTK_TRIANGLE必须关联3个点四边形VTK_QUAD必须关联4个点否则会导致拓扑错误SetPolys()用于存储面单元三角形、四边形SetLines()用于线单元SetVerts()用于顶点单元不可混用。4. 删除单元后的ID变化RemoveCell(cellId)会直接移除单元后续单元的ID会自动前移如删除ID2的单元后原ID3的单元会变为ID2批量操作时需注意ID同步。5. 大网格优化批量增加单元时优先使用InsertNextCell(int cellType, vtkIdType npts, vtkIdType* ptIds)比传入单元对象更高效批量删除单元时优先用DeleteCellRemoveDeletedCells减少内存重排次数。五、总结vtkPolyData的单元增/删/改是三维网格编辑的基础能力核心要点如下编辑开关所有修改前必须开启Editabletrue操作后恢复false增加单元用InsertNextCell支持单元对象/类型点索引两种方式修改单元局部改点用ReplaceCellPoint整体替换用ReplaceCell删除单元单次删除用RemoveCell批量删除用DeleteCellRemoveDeletedCells核心原则点索引必须有效、单元类型需匹配操作后验证网格拓扑。本文的Demo覆盖了日常开发中90%的单元编辑场景你可基于此扩展到地质建模、工业设计等具体业务中如补全断层网格、修正零件模型单元。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

口碑营销成功案例简短优化方案数学2023版电子版

YOLO目标检测API设计规范:构建易用服务接口的原则 在智能制造、智慧城市和自动驾驶等前沿领域,视觉感知正从“可有可无”走向“核心驱动”。面对海量视频流与实时决策需求,如何将强大的AI模型转化为稳定可靠的服务能力,成为工程落…

张小明 2025/12/31 16:52:05 网站建设

ps如何做网站轮播图wordpress应用和lamp

系统程序文件列表 项目功能;用户,教师,乐器简介,乐器类型,乐器培训,培训报名 开题报告内容 SpringBoot乐器培训管理系统开题报告 一、选题背景与意义 (一)选题背景 随着音乐教育的普及和人们对艺术修养重视程度的提升,乐器培训行业迎来了…

张小明 2025/12/31 16:52:03 网站建设

抚州网站建设网站网页建设一般多少钱

清华镜像源加速PyTorch安装:让深度学习环境搭建快如闪电 在人工智能实验室的深夜,你是否也经历过这样的场景?——刚配置好服务器,兴致勃勃地运行 pip install torch,结果看着终端里龟速爬行的进度条,一杯咖…

张小明 2025/12/31 16:52:02 网站建设

凡客诚品现在还有吗做神马seo快速排名软件

据迁移工具种类繁多,覆盖不同场景(数据库、文件、云服务、系统等)。以下分类介绍主流工具: 一、数据库迁移工具 通用数据库迁移 AWS DMS:AWS Database Migration Service,支持同构/异构数据库迁移&#xff…

张小明 2025/12/31 16:52:03 网站建设

口腔医院网站开发怎样做外贸网站推广

文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言 🌞博主介绍:✌全网粉丝15W,CSDN特邀作者、211毕业、高级全…

张小明 2025/12/31 16:52:05 网站建设

公司网站域名是什么怎么抄别人的wordpress主题

3573: 买卖股票的最佳时机Ⅴ思路:状态机(买卖股票问题)dfs(i,j,0) 表示在 prices[0] 到 prices[i] 中完成至多 j 笔交易,第 i 天结束时未持有股票的最大利润。dfs(i,j,1) 表示在 prices[0] 到 prices[i] 中完成至多 j 笔交易&…

张小明 2025/12/31 16:52:06 网站建设