Vtk裁剪功能之平面裁剪vtkClipClosedSurface(vtk小记)

1.原理分析

对你的三维图形,使用一个平面切下去,然后保留一半。

确定一个平面:使用法向量和一个三维坐标点可以确定一个平面

原始图像

切一刀

切两刀,又一半

切三刀,又一半

源代码

#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkClipClosedSurface.h>
#include <vtkDataSetMapper.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPlane.h>
#include <vtkPlaneCollection.h>
#include <vtkPolyData.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkXMLPolyDataReader.h>int main(int argc, char* argv[])
{vtkNew<vtkNamedColors> colors;// PolyData to processvtkSmartPointer<vtkPolyData> polyData;if (argc > 1){vtkNew<vtkXMLPolyDataReader> reader;reader->SetFileName(argv[1]);reader->Update();polyData = reader->GetOutput();}else{// Create a spherevtkNew<vtkSphereSource> sphereSource;sphereSource->SetThetaResolution(20);sphereSource->SetPhiResolution(11);sphereSource->Update();polyData = sphereSource->GetOutput();}auto center = polyData->GetCenter();vtkNew<vtkPlane> plane1;plane1->SetOrigin(center[0], center[1], center[2]);plane1->SetNormal(0.0, -1.0, 0.0);vtkNew<vtkPlane> plane2;plane2->SetOrigin(center[0], center[1], center[2]);plane2->SetNormal(0.0, 0.0, 1.0);vtkNew<vtkPlane> plane3;plane3->SetOrigin(center[0], center[1], center[2]);plane3->SetNormal(-1.0, 0.0, 0.0);vtkNew<vtkPlaneCollection> planes;planes->AddItem(plane1);planes->AddItem(plane2);planes->AddItem(plane3);vtkNew<vtkClipClosedSurface> clipper;clipper->SetInputData(polyData);clipper->SetClippingPlanes(planes);clipper->SetActivePlaneId(2);clipper->SetScalarModeToColors();clipper->SetClipColor(colors->GetColor3d("Banana").GetData());clipper->SetBaseColor(colors->GetColor3d("Tomato").GetData());clipper->SetActivePlaneColor(colors->GetColor3d("SandyBrown").GetData());vtkNew<vtkDataSetMapper> clipMapper;clipMapper->SetInputConnection(clipper->GetOutputPort());vtkNew<vtkActor> clipActor;clipActor->SetMapper(clipMapper);clipActor->GetProperty()->SetColor(1.0000, 0.3882, 0.2784);clipActor->GetProperty()->SetInterpolationToFlat();// Create graphics stuff//vtkNew<vtkRenderer> ren1;ren1->SetBackground(colors->GetColor3d("SteelBlue").GetData());vtkNew<vtkRenderWindow> renWin;renWin->AddRenderer(ren1);renWin->SetSize(512, 512);renWin->SetWindowName("ClipClosedSurface");vtkNew<vtkRenderWindowInteractor> iren;iren->SetRenderWindow(renWin);// Add the actors to the renderer, set the background and size//ren1->AddActor(clipActor);// Generate an interesting view//ren1->ResetCamera();ren1->GetActiveCamera()->Azimuth(120);ren1->GetActiveCamera()->Elevation(30);ren1->GetActiveCamera()->Dolly(1.0);ren1->ResetCameraClippingRange();renWin->Render();iren->Initialize();iren->Start();return EXIT_SUCCESS;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/572003.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中如何进行多表查询

目录 一、子查询 1.什么是子查询 2.注意事项 二、联结查询 1.什么是联结 2.内部联结&#xff08;等值联结&#xff09; ①WHERE语句 ②ON语句 3.自联结 4.自然联结 5.外部联结 三、组合查询 1.什么是组合查询 2.UNION规则 *本节涉及概念来源于图灵程序设计丛书&a…

【jenkins+cmake+svn管理c++项目】Windows环境安装以及工具配置

一、目标和环境 目标&#xff1a;搭建一个jenkins环境&#xff0c;实现jenkins调用cmake和svn和VS编译c项目&#xff0c;并将生成的库上传svn。 环境&#xff1a;win10虚拟机&#xff08;练习流程用&#xff0c;正式用的话还是放到服务器&#xff09;&#xff0c;VS2017. 二、…

文件编辑命令—vim

1.vim vim 是vi的升级版本.vi 文件名(vi方向键用不了) vim 的官方网站 (welcome home : vim online) 自己也说 vim 是一个程序开发工具而不是文字处理软件。 2.安装vim sudo apt install vim 如果出错了:apt update:刷新软件源; 出现"无法获得锁 之类的"sudo rm 文件…

Linux 的 app :一般到哪里下载 ?(**)

利用 appimagetool 工具对开发好的项目进行打包 &#xff08;***带笔记*&#xff09; https://blog.csdn.net/ken2232/article/details/131313613 1. 首选&#xff0c;直接通过 OS发行版的官网仓库&#xff1a;简单、方便&#xff1b;可能相对最可靠。 如&#xff1a; sudo a…

如何用全身动作捕捉设备升级虚拟仿真实训室?

伴随着“科教强国”、“科教兴国”建设&#xff0c;数字化转型影响着职业教育未来&#xff0c;全身动作捕捉设备搭建数字人实训室&#xff0c;可以有效升级虚拟仿真实训室及相关建设&#xff0c;让实训教学体系更加完善。 以全身动作捕捉设备为主导的虚拟仿真实训室&#xff0…

RHCE-3-远程登录服务

简介 概念 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系统前面一样 功能: 分享主机的运算能力 服务器类型&#xff1a;有限…

0.96寸OLED屏调试 ----(三)

所需设备&#xff1a; 1、USB 转 SPI I2C 适配器&#xff1b;内附链接 2、0.96寸OLED显示模块&#xff1b; 备注&#xff1a;专业版、升级版都适用&#xff1b; 经过前面两期的介绍&#xff0c;大家应该对OLED显示模块有了大致的了解&#xff0c;今天先来参插一下调试界面&…

第44期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

稀碎从零算法笔记Day27-LeetCode:螺旋矩阵

题型&#xff1a;矩阵(二维数组)、边界问题 链接&#xff1a;54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 很有趣的…

三、阅读器开发--4、阅读器目录、全文搜索功能开发

1、阅读器目录 1.1、实现目录 先实现目录的布局 定义一个蒙版&#xff0c;充满整个屏幕浮在阅读器上方&#xff0c;左侧为目录右侧为背景&#xff0c;目录下方包含一个tab&#xff0c;点击后会切换不同的内容&#xff0c;这里tab是目录、书签&#xff0c;这里可以通过如下的…

优思学院|鱼骨图、因果图可以用Minitab给制吗?

鱼骨图分析法&#xff0c;又被称作因果图或石川图&#xff0c;在职场工作中或者生活上都具有重要的应用价值。对懂得六西格玛的人来说&#xff0c;鱼骨图可以说是最基本的工具。 即使不用什么特别的软件&#xff0c;只需要一个PowerPoint模板&#xff0c;同样可以制作出让老板…

vscode c++环境配置

1.基础软件安装 安装Visual Studio Code. 安装C拓展。点击在vscode界面最左侧的Extensions图标&#xff08;打开快捷键&#xff1a;ctrlshiftX&#xff09;&#xff0c;搜索“C/C”&#xff0c;点击进行安装。 确保已安装gcc. 一般ubuntu系统会预装gcc.在终端窗口中输入如下…