直线与面片同时可视化(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

相关文章

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

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

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

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

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

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

求空间直线与平面的交点

若直线不与平面平行,将存在交点。如下图所示,已知直线L过点m(m1,m2,m3),且方向向量为VL(v1,v2,v3),平面P过点n(n1,n2,n3),且法线方向向量为VP(vp1,vp2,vp3),求得直线与平面的交点O的坐标(x,y,z): 将直线方程写成参数方程形式,即有: x = m1+ v1 * t y = m2+ v2 * t

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

「大数据分析」图形可视化,如何选择大数据可视化图形?

​图形可视化技术,在大数据分析中,是一个非常重要的关键部分。我们前期通过数据获取,数据处理,数据分析,得出结果,这些过程都是比较抽象的。如果是非数据分析专业人员,很难清楚我们这些工作,到底做了些什么事情。即使是专业人员,在不清楚项目,不了解业务规则,不熟悉技术细节的情况下。要搞清楚我们的大数据分析,这一系列过程,也是比较困难的。 我们在数据处理和分析完成后,一般来说,都需要形成结论报告。怎样让大

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能,但它与其他Python库(如Matplotlib和Seaborn)无缝集成,允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法: 1. 使用Matplotlib Pandas中的plot()方法实际上是基于Matplotlib的,你可以使用它来绘制各种基本图表,例如折线图、柱状图、散点图等。 import pandas

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

005:VTK世界坐标系中的相机和物体

VTK医学图像处理---世界坐标系中的相机和物体 左侧是成像结果                                                    右侧是世界坐标系中的相机与被观察物体 目录 VTK医学图像处理---世界坐标系中的相机和物体 简介 1 在三维空间中添加坐标系 2 世界坐标系中的相机 3 世界坐标系中vtkImageData的参数 总结:

n条直线最多能划分出多少个平面?

N条直线,两两相交,其交点各不不同,则产生的交点数目为N个数中取2个数的组合; 同时,也只有这种情况下(两两相交,也交点不同),分割的平面数最多, 数目为: 2 + (N-1)(N+2)/2.  这里求最少平面数没有意义,因为最少平面数就是N+1, 即N条直线两两平行的时候,分割的平面最少。 举例: 1条直线分割平面数最多为2; a1 = 2 2条直线分割平面数最多为4;