直线与面片同时可视化(VTK)

2023-11-03 20:10
文章标签 可视化 直线 面片 vtk

本文主要是介绍直线与面片同时可视化(VTK),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路:将面片与直线同时放入一个对象中

#include <vtkAutoInit.h> 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCellArray.h>
#include <vtkFloatArray.h>
#include <vtkPointData.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkInteractorStyleTrackballActor.h>
#include <vtkExtractEdges.h>
#include<vector>
using namespace std;
typedef vtkActorCollection* vtkActorCollection_Array;#include <vtkLine.h>#include <vtkCellData.h>
#include <vtkProperty.h>
#include<vtkPolyLine.h>
#include<vtkLineSource.h>
#include<vtkDataSetMapper.h>
struct mypoint3d
{double x;double y;double z;
};vtkSmartPointer<vtkDataSetMapper>  Creatline(mypoint3d p1, mypoint3d p2)
{vtkSmartPointer<vtkLineSource> lineSource = vtkSmartPointer<vtkLineSource>::New();double pp1[3] = { p1.x, p1.y, p1.z };double pp2[3] = { p2.x, p2.y, p2.z };lineSource->SetPoint1(pp1);lineSource->SetPoint2(pp2);lineSource->Update();vtkSmartPointer<vtkDataSetMapper> line_mapper =vtkSmartPointer<vtkDataSetMapper>::New();line_mapper->SetInputConnection(lineSource->GetOutputPort());return line_mapper;
}int main()
{int i;//(1)构建立方体对象int cube_numberpoints = 8;float cube_x[8][3] = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 0, 1 }, { 0, 0, 1 }, { 0, 1, 0 }, { 1, 1, 0 }, { 1, 1, 1 }, { 0, 1, 1 } };vtkIdType cube_pts[6][4] = { { 0, 1, 2, 3 }, { 4, 5, 6, 7 }, { 2, 3, 7, 6 }, { 1, 0, 4, 5 }, { 0, 4, 7, 3 }, { 1, 2, 6, 5 } };vtkPolyData *cube = vtkPolyData::New();vtkCellArray *cube_polys = vtkCellArray::New();vtkFloatArray *cube_scalars = vtkFloatArray::New();vtkPoints *cube_points = vtkPoints::New();for (i = 0; i < cube_numberpoints; i++)//将点出入到点集容器中{cube_points->InsertPoint(i, cube_x[i]);}//6个面片,每个面片由4个点构成for (i = 0; i < 6; i++){cube_polys->InsertNextCell(4, cube_pts[i]);}for (i = 0; i < 8; i++){cube_scalars->InsertTuple1(i, i);}//接下来就开始了VTK的pipeline流程。cube->SetPoints(cube_points);cube->SetPolys(cube_polys);//cube->GetPointData()->SetScalars(cube_scalars);可以不显示颜色vtkExtractEdges *cube_extract = vtkExtractEdges::New();cube_extract->SetInputData(cube);vtkPolyDataMapper *cube_mapEdges = vtkPolyDataMapper::New();cube_mapEdges->SetInputConnection(cube_extract->GetOutputPort());cube_mapEdges->SetScalarVisibility(0);vtkActor *edgeActor = vtkActor::New();edgeActor->SetMapper(cube_mapEdges);edgeActor->VisibilityOn();vtkPolyDataMapper *cube_Mapper = vtkPolyDataMapper::New();cube_Mapper->SetInputData(cube);cube_Mapper->SetScalarRange(0, 1);//构建完立方体//(2)开始绘制线段//float cube_x[8][3] = { { 0, 0, 0 }, { 1, 0, 0 }, { 1, 0, 1 }, { 0, 0, 1 }, //{ 0, 1, 0 }, { 1, 1, 0 }, { 1, 1, 1 }, { 0, 1, 1 } };vector<vtkSmartPointer<vtkDataSetMapper>> lines;vtkSmartPointer<vtkDataSetMapper> temp;mypoint3d p1, p2, p3, p4, p5, p6, p7, p8;p1.x = 0; p1.y = 0; p1.z = 0;p2.x = 1; p2.y = 0; p2.z = 0;p3.x = 1; p3.y = 0; p3.z = 1;p4.x = 0; p4.y = 0; p4.z = 1;p5.x = 0; p5.y = 1; p5.z = 0;p6.x = 1; p6.y = 1; p6.z = 0;p7.x = 1; p7.y = 1; p7.z = 1;p8.x = 0; p8.y = 1; p8.z = 1;temp = Creatline(p1, p2); lines.push_back(temp);temp = Creatline(p1, p4); lines.push_back(temp);temp = Creatline(p1, p5); lines.push_back(temp);temp = Creatline(p2, p3); lines.push_back(temp);temp = Creatline(p2, p6); lines.push_back(temp);temp = Creatline(p3, p4); lines.push_back(temp);temp = Creatline(p3, p7); lines.push_back(temp);temp = Creatline(p4, p8); lines.push_back(temp);temp = Creatline(p5, p6); lines.push_back(temp);temp = Creatline(p5, p8); lines.push_back(temp);temp = Creatline(p6, p7); lines.push_back(temp);temp = Creatline(p7, p8); lines.push_back(temp);//(3)开始添加直线与立方体//  cube_Mapper与line_mappervtkRenderer *renderer = vtkRenderer::New();//添加立方体vtkActor *cube_Actor = vtkActor::New();cube_Actor->SetPosition(0, 0, 0);cube_Actor->SetMapper(cube_Mapper);cube_Actor->GetProperty()->SetColor(0, 0, 1);renderer->AddActor(cube_Actor);//添加直线//12条直线for (int i = 0; i < lines.size(); i++){vtkActor *lineActor = vtkActor::New();lineActor->SetMapper(lines[i]);lineActor->GetProperty()->SetColor(0, 1, 0);lineActor->GetProperty()->SetLineWidth(2);renderer->AddActor(lineActor);}vtkCamera *camera = vtkCamera::New();camera->SetPosition(1, 1, 1);camera->SetFocalPoint(0, 0, 0);vtkRenderWindow *reWin = vtkRenderWindow::New();reWin->AddRenderer(renderer);vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(reWin);renderer->SetActiveCamera(camera);renderer->ResetCamera();renderer->SetBackground(0, 1, 1);reWin->SetSize(300, 300);reWin->Render();iren->Initialize();iren->Start();return 0;}

 

这篇关于直线与面片同时可视化(VTK)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340588

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业