当前位置: 首页 > news >正文

3D数据过滤为2D数据集并渲染


开发环境

  1. Windows 11 家庭中文版
  2. Microsoft Visual Studio Community 2019
  3. VTK-9.3.0.rc0
  4. vtk-example
  5. 参考代码

代码逻辑:初始化数据集points -> 添加数据集到polydata -> 通过vtkVertexGlyphFilter过滤(带顶点、单元数据)polydata为顶点数据 -> 添加过滤后2D数据到vtkPolyDataMapper2D -> 添加到vtkActor2D


Actor2D:

#include <vtkActor2D.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper2D.h>
#include <vtkProperty2D.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkVertexGlyphFilter.h>int main(int, char*[])
{vtkNew<vtkNamedColors> colors;vtkNew<vtkPoints> points;points->InsertNextPoint(10, 10, 0);points->InsertNextPoint(100, 100, 0);points->InsertNextPoint(200, 200, 0);/*VtkPolyData 是一个数据对象,它是 vtkDataSet 的具体实现。VtkPolyData 表示由顶点、直线、多边形和/或三角形条组成的几何结构。点和单元属性值(例如,标量、向量等)也被表示。*/vtkNew<vtkPolyData> polydata;polydata->SetPoints(points);std::cout << "NumberOfCells: " << polydata->GetNumberOfCells() << std::endl;//0 此时还没有指定cellstd::cout << "NumberOfPoints: " << polydata->GetNumberOfPoints() << std::endl;//3/*这个过滤器丢弃输入中的所有单元格,并在每个点上用一个顶点替换它们。这个过滤器的预期用途大致相当于 vtkGlyph3D 过滤器,只不过这个过滤器是专门针对具有许多顶点的数据的,这使得渲染结果比字形过滤器更快,更少混乱。这个过滤器可以采用图形或点集作为输入。*/vtkNew<vtkVertexGlyphFilter> glyphFilter;glyphFilter->SetInputData(polydata);//vtkDataObject->vtkPolyDataglyphFilter->Update();/*VtkPolyDataMapper 是一个将多边形数据(即 vtkPolyData)映射到图形原语的类。VtkPolyDataMapper 作为特定于设备的多边形数据映射器的超类,它实际上执行到渲染/图形硬件/软件的映射。vtkPolyDataMapper用来把输入的数据进行转换为几何图元(点、线、多边形)进行渲染VtkPolyDataMapper2D 是一个映射器,它将3D 多边形数据(vtkPolyData)渲染到2D图像平面(即渲染器的 viewport)上。默认情况下,通过忽略 vtkPolyData 中3D 点的 z坐标,并将 x-y 值作为本地显示值(即像素坐标) ,将3D 数据转换为2D 数据。*/vtkNew<vtkPolyDataMapper2D> mapper;mapper->SetInputConnection(glyphFilter->GetOutputPort());mapper->Update();//VtkActor2D 与 vtkActor 类似,但是它用于二维图像和注释。vtkNew<vtkActor2D> actor;actor->SetMapper(mapper);actor->GetProperty()->SetColor(colors->GetColor3d("Gold").GetData());actor->GetProperty()->SetPointSize(8);// Create a renderer, render window, and interactor.vtkNew<vtkRenderer> renderer;vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(renderer);vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;renderWindowInteractor->SetRenderWindow(renderWindow);// Add the actor to the scenerenderer->AddActor(actor);renderer->SetBackground(colors->GetColor3d("DarkSlateGray").GetData());renderWindow->SetSize(300, 300);renderWindow->SetWindowName("Actor2D");// Render and interactrenderWindow->Render();renderWindowInteractor->Start();return EXIT_SUCCESS;
}
http://www.lryc.cn/news/213871.html

相关文章:

  • 第十一章 ObjectScript 系统宏(二)
  • 跨境电商大作战:2023黑色星期五准备指南
  • 我的天!阿里云服务器居然比腾讯云优惠1元!
  • 鸡尾酒学习——未命名(芒果口味)
  • modbusTCP【C#】
  • 解决Linux Debian12系统中安装VirtualBox虚拟机无法使用USB设备的问题
  • Spring事务失效的几种情况及其解决方案
  • libgdx实现淡入淡出过渡
  • linux 出现Access-Your-Private-Data.desktop README.txt
  • 新生儿积食:原因、科普和注意事项
  • 看完这个,别说你还找不到免费好用的配音软件
  • 多种方法解决leetcode经典题目-LCR 155. 将二叉搜索树转化为排序的双向链表, 同时弄透引用变更带来的bug
  • C/C++ 实现UDP发送或接收组播消息,并可指定接收发送网卡
  • 纬创出售印度子公司给塔塔集团,结束iPhone代工业务 | 百能云芯
  • vue手机项目如何控制手电筒打开与关闭
  • 电商课堂|5分钟了解电商数据分析完整流程,建议收藏!
  • Redis测试新手入门教程
  • Linux内核是如何创建进程?
  • IDEA 使用技巧
  • 安防监控项目---web网页通过A9控制Zigbee终端节点的风扇
  • Ubuntu 22.04 在登录界面循环
  • 【C++ 系列文章 -- 程序员考试 201805 下午场 C++ 专题 】
  • Python如何使用datetime模块进行日期和时间的操作
  • flutter之bloc使用详解
  • 记一次 .NET 某工厂无人车调度系统 线程爆高分析
  • 高等数学啃书汇总重难点(九)多元函数微分法及其应用
  • Vue3前端100个必要的知识点
  • CCS3列表和超链接样式
  • vue手机项目如何控制蓝牙连接
  • 遥遥领先,免费开源的django4-vue3项目