vtk绘制折线

vtk绘制折线

  • 引言
  • 示例一
    • 开发环境
    • 项目结构
    • 示例代码
    • 运行结果
  • 示例二
    • 概况
    • 示例代码
    • 运行结果

引言

本文通过两种方式来绘制折线。示例一中通过vtkPolyLine来绘制折线;示例二中通过vtkLineSource来绘制折线,只不过示例二中折线是由一段一段的直线绘制,最后构成了一个折线。

示例一

开发环境

本文依旧采用QtCreator来创建空项目,其QtCreator的版本为4.11.2,Qt的版本是5.14.2。使用的vtk库版本为9.2。

项目结构

刚创建的空项目中只有一个空的pro文件。需要编写pro文件的内容,其内容为:
.pro

QT       += core#greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11 vtk9.2# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \main.cppSOUPDIR = $$PWD/../../SOUPdependency
vtk9.2 {contains(QT_ARCH, x86_64) {include($$SOUPDIR/vtk-9.2/vtk-9.2.pri)} else {include($$SOUPDIR/vtk-9.2-2017-omp-win32/vtk-9.2.pri)}DEFINES += vtkEventDataButton3D=vtkEventDataDevice3DDEFINES += vtkEventDataMove3D=vtkEventDataDevice3D
}# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

编写好pro文件之后,向项目中添加新文件main.cpp.
整个项目的结构如下:
在这里插入图片描述

示例代码

其main.cpp的代码如下:

#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyLine.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkLineSource.h>#include "vtkAutoInit.h"VTK_MODULE_INIT(vtkRenderingOpenGL2)//渲染
VTK_MODULE_INIT(vtkInteractionStyle)//交互样式
VTK_MODULE_INIT(vtkRenderingFreeType)//文本图像
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)//体素vtkNew<vtkPolyData> createBrokenLineByPolyLine()
{double dPoints[4][3] = {{3.2,7.4,7.0},{2.1,7.9,9.0},{12.3,6.4,7.5},{45.2,13.4,6.0}};vtkNew<vtkPoints> points;vtkNew<vtkPolyLine> polyLine;polyLine->GetPointIds()->SetNumberOfIds(4);for(int i = 0; i <4; ++i){points->InsertPoint(i,dPoints[i]);polyLine->GetPointIds()->SetId(i,i);}vtkNew<vtkCellArray> cellArray;cellArray->InsertNextCell(polyLine);vtkNew<vtkPolyData> polyData;polyData->SetPoints(points);polyData->SetLines(cellArray);return polyData;
}int main(int argc,char *argv[])
{vtkNew<vtkPolyData> polyData = createBrokenLineByPolyLine();vtkNew<vtkPolyDataMapper> mapper;mapper->SetInputData(polyData);vtkNew<vtkActor> actor;actor->SetMapper(mapper);actor->GetProperty()->SetColor(0.94,0.502,0.502);actor->GetProperty()->SetLineWidth(2.0);vtkNew<vtkRenderer> render;render->AddActor(actor);render->ResetCamera();vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(render);renderWindow->SetSize(400,400);renderWindow->Render();vtkNew<vtkRenderWindowInteractor> interactor;interactor->SetRenderWindow(renderWindow);interactor->Initialize();interactor->Start();return 0;
}

运行结果

在这里插入图片描述

示例二

概况

示例二也是创建的空项目,其开发环境同示例一,项目结构也同示例一。该示例实现的折线,由于是由三段的直线拼接而成,所以这里创建了三个vtkLineSource,将三个linesource分别设置到三个vtkPolyDataMapper中,又创建了三个vtkActor,将三个vtkPolyDataMapper指针对象分别设置到三个vtkActor指针对象中,其中三个vtkActor指针对象分别设置了其属性:直线的颜色。所以每段直线拥有自己的颜色。随后又将三个vtkActor对象一起添加到一个vtkRender中。

示例代码

这里只附上main.cpp的实现代码,其额外编写的pro文件内容同示例一。下面是main.cpp的实现代码:
main.cpp

#include <vtkNew.h>
#include <vtkPoints.h>
#include <vtkPolyLine.h>
#include <vtkCellArray.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkLineSource.h>#include "vtkAutoInit.h"VTK_MODULE_INIT(vtkRenderingOpenGL2)//渲染
VTK_MODULE_INIT(vtkInteractionStyle)//交互样式
VTK_MODULE_INIT(vtkRenderingFreeType)//文本图像
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)//体素vtkNew<vtkRenderer> createBrokeLineByLineSource()
{double dPoints[4][3] = {{3.2,7.4,7.0},{2.1,7.9,9.0},{12.3,6.4,7.5},{45.2,13.4,6.0}};vtkNew<vtkLineSource> lineSource1;lineSource1->SetPoint1(dPoints[0]);lineSource1->SetPoint2(dPoints[1]);lineSource1->Update();vtkNew<vtkLineSource> lineSource2;lineSource2->SetPoint1(dPoints[1]);lineSource2->SetPoint2(dPoints[2]);lineSource2->Update();vtkNew<vtkLineSource> lineSource3;lineSource3->SetPoint1(dPoints[2]);lineSource2->SetPoint2(dPoints[3]);lineSource3->Update();vtkNew<vtkPolyDataMapper> mapper1;mapper1->SetInputData(lineSource1->GetOutput());vtkNew<vtkPolyDataMapper> mapper2;mapper2->SetInputData(lineSource2->GetOutput());vtkNew<vtkPolyDataMapper> mapper3;mapper3->SetInputData(lineSource3->GetOutput());vtkNew<vtkActor> actor1;actor1->SetMapper(mapper1);actor1->GetProperty()->SetColor(0.125,0.698,0.67);vtkNew<vtkActor> actor2;actor2->SetMapper(mapper2);actor2->GetProperty()->SetColor(1,0.714,0.757);vtkNew<vtkActor> actor3;actor3->SetMapper(mapper3);actor3->GetProperty()->SetColor(0.12,0.56,1);vtkNew<vtkRenderer> render;render->AddActor(actor1);render->AddActor(actor2);render->AddActor(actor3);render->ResetCamera();return render;
}int main(int argc,char *argv[])
{vtkNew<vtkRenderer> render = createBrokeLineByLineSource();vtkNew<vtkRenderWindow> renderWindow;renderWindow->AddRenderer(render);renderWindow->SetSize(400,400);renderWindow->Render();vtkNew<vtkRenderWindowInteractor> interactor;interactor->SetRenderWindow(renderWindow);interactor->Initialize();interactor->Start();return 0;
}

运行结果

在这里插入图片描述

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

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

相关文章

Prometheus+Grafana普罗米修斯搭建+监控MySQL

PrometheusGrafana普罗米修斯搭建监控MySQL 一&#xff0c;Prometheus 1.什么是Prometheus&#xff1f; ​ Prometheus 是 Cloud Native Computing Foundation 的一个监控系统项目, 集采集、监控、报警等特点于一体。 ​ Prometheus主要受启发于Google的Brogmon监控系统&…

h5手写签名示例

前言 业务中需要用户进行签字&#xff0c;如何让用户在手机端进行签字&#xff1f; 示例如下 代码已分享至Gitee: https://gitee.com/lengcz/qianming 原示例&#xff1a; https://www.jq22.com/jquery-info13488 H5实现手写签字 创建一个html页面 <!DOCTYPE html> …

计算机网络--网络编程(1)

简单认识一下传输层中的UDP和TCP&#xff1a; TCP&#xff1a;有链接&#xff0c;可靠传输&#xff0c;面向字节流&#xff0c;全双工 UDP&#xff1a;无连接&#xff0c;不可靠传输&#xff0c;面向数据报&#xff0c;全双工 有链接类似于打电话&#xff0c;通了就是有链接。…

在Linux上顺理成章在Windows上令人费解的事情你都知道吗?

&#x1f4a2;分享一些在Linux上顺理成章但在Windows上令人费解的事情有哪些你都知道吗? 权限管理&#xff1a;在Linux上&#xff0c;权限管理非常直观&#xff0c;并且可以通过命令行轻松地进行。而在Windows上&#xff0c;权限管理更加复杂&#xff0c;需要使用安全主体和权…

【Linux】ubuntu20.04上使用xrdp协议时使用不同的桌面环境,在xfce和gnome上转换

一、问题背景 笔者在按照网上一篇文章配置xrdp远程桌面服务后&#xff0c;发现得到的桌面是xfce&#xff0c;而不是笔者熟悉的原生gnome桌面。 因为感觉到别扭&#xff0c;所以我还是决定换一下。 二、解决办法 2.1 编辑主目录的.xsessionrc文件 创建或编辑名为 .xsessionr…

基于深度学习的高精度人脸口罩检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度人脸口罩检测识别系统可用于日常生活中或野外来检测与定位人脸口罩目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的人脸口罩目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

Python:通过飞书API接口发送通知消息

通过飞书发送应用消息&#xff0c;及时收到线上异常消息 总的来说&#xff0c;飞书消息发送的前戏&#xff0c;要比企业微信和钉钉稍复杂 相关连接 官网 https://www.feishu.cn/管理后台 https://www.feishu.cn/admin开放平台 https://open.feishu.cn/ 参数准备 首先&…

关于jetBrains的插件translation的使用

文章目录 前言国内使用问题关于无法翻译问题关于无法语音解析问题关于百度翻译Api获取关于百度引擎的invalid account(未解决)关于阿里翻译Api获取关于阿里翻译引擎Wrong request parameter(未解决)有道翻译Api关于有道Ip Address错误(未解决) 前言 translation是一个非常好用…

二.《UE4奥丁》解密哈希ID

哈希表概念 1.相信大家经常在UE4或者UE5游戏逆向中遇到下面的代码段 $ > > 41:8B42 0C > mov eax,dword ptr ds:[r10C] > $4 > 3B05 AE589B04 > cmp eax,dword ptr ds:[7FF7B68B74F4] …

spring boot 整合EasyPoi导入导出,下载模版功能

引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version><relativePath/> <!-- lookup parent from repository --></…

IIS安装localhost显示下载,urlrewrite设置

1.取消ftp服务勾选 2. ping localhost ping 127.0.0.1 如果显示 &#xff1a;&#xff1a;1 则需要禁用ipv6 在注册表 找到并单击下面的注册表子项&#xff1a; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ 双击“DisabledComponents”以修…

Redis通信协议、过期回收策略

Redis通信协议-RESP协议 Redis是一个CS架构的软件&#xff0c;通信一般分两步&#xff08;不包括pipeline和PubSub&#xff09;&#xff1a; 客户端&#xff08;client&#xff09;向服务端&#xff08;server&#xff09;发送一条命令 服务端解析并执行命令&#xff0c;返回…