pcl+vtk(七)QVTKOpenGLNativeWidget中显示坐标轴

16 篇文章 5 订阅

为了方便观察图像的方向,位置以及旋转情况,想在窗口中添加一个坐标轴显示,并且这个坐标轴是随着窗口的旋转变动的,在网上找了很多例子,但是最后就是不显示坐标轴。

在此记录一下。

一、坐标轴相关类简单介绍

1.vtkAxesActor

SetPosition(double,double, double);设置坐标系的原点位置

void SetTotalLength(double x, double y, double z);设置坐标轴的总长度

void SetShaftType(int type);设置坐标轴的轴身类型(int type)
0:柱状轴身
1:线性轴身

如果类型为0:SetCylinderRadius(double):设置柱状轴半径

SetTipType(int type); 设置坐标轴的轴顶部类型
0:圆锥体
1:球体
如果类型为0:SetConeResolution(double);设置锥面数
                             SetConeRadius(double);设置锥半径
如果类型为1:SetSphereResolution(double);设置球面数
                             SetSphereRadius(double);设置球半径

SetAxisLabels(bool);是否显示标签

SetXAxisLabelText(const char *);
SetYAxisLabelText(const char *);
SetZAxisLabelText(const char *);
设置轴标签

GetXAxisShaftProperty
GetYAxisShaftProperty
GetZAxisShaftProperty
获取轴属性,返回vtkProperty可直接设置属性

GetXAxisTipProperty
GetYAxisTipProperty
GetZAxisTipProperty
获取轴顶部属性,返回vtkProperty可直接设置属性

2.vtkOrientationMarkerWidget

SetOrientationMarker(vtkProp *prop);设置坐标轴

SetInteractor(vtkRenderWindowInteractor* iren);设置交互器

SetViewport(double minX,double minY, double maxX, double maxY);用于指定在渲染窗口中显示方向标记部件的位置和大小。
minX:方向标记部件左下角相对于渲染窗口的横向位置,取值范围为[0.0, 1.0],其中0.0表示左侧,1.0表示右侧。
minY:方向标记部件左下角相对于渲染窗口的纵向位置,取值范围为[0.0, 1.0],其中0.0表示底部,1.0表示顶部。
maxX:方向标记部件右上角相对于渲染窗口的横向位置,取值范围为[0.0, 1.0],通常应保证maxX > minX。
maxY:方向标记部件右上角相对于渲染窗口的纵向位置,取值范围为[0.0, 1.0],通常应保证maxY > minY。

SetEnabled(bool);是否显示

SetInteractive(bool);是否可为交互式  1(是):InteractiveOn 0(否):InteractiveOff

默认为交互式

SetOutlineColor(double,double,double);设置外边框颜色

二、代码示例

 具体有关库的引用,main.cpp的修改,以及QVTKOpenGLNativeWidget控件的添加请看前面详细介绍的文章,下面只放了主要代码。

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include "vtkAutoInit.h"   // vtk初始化的方式
VTK_MODULE_INIT(vtkRenderingOpenGL2);   // 渲染
VTK_MODULE_INIT(vtkInteractionStyle);   // 相互做用方式
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);  //
VTK_MODULE_INIT(vtkRenderingFreeType);
#include <QWidget>
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include <vtkNew.h>
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>
#include "vtkConeSource.h"
#include "vtkCamera.h"
#include <vtkProperty.h>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

    vtkSmartPointer<vtkOrientationMarkerWidget> MarkerWidget;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();//在构造函数中进行初始化
    //显示
    vtkNew<vtkGenericOpenGLRenderWindow> renwindow;
    renwindow->AddRenderer(renderer);
    ui->vtk_widget->SetRenderWindow(renwindow.Get());

    // 显示坐标系的vtk组件
    vtkSmartPointer<vtkAxesActor> axes_actor = vtkSmartPointer<vtkAxesActor>::New();
    axes_actor->SetPosition(0, 0, 0);
    axes_actor->SetTotalLength(2, 2, 2);
    axes_actor->SetShaftType(0);
    axes_actor->SetCylinderRadius(0.03);
    axes_actor->SetAxisLabels(1);
    axes_actor->SetTipType(0);
    axes_actor->SetXAxisLabelText("xxx");
    axes_actor->GetXAxisShaftProperty()->SetColor(1,1,1);
    axes_actor->GetYAxisTipProperty()->SetColor(1,1,1);

    // 控制坐标系,使之随视角共同变化
    MarkerWidget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();
    MarkerWidget->SetOrientationMarker(axes_actor);
    MarkerWidget->SetInteractor(ui->vtk_widget->GetInteractor());
    MarkerWidget->SetViewport(0.0, 0.0, 0.2, 0.2);
    MarkerWidget->SetEnabled(1);
    MarkerWidget->SetOutlineColor(1,0,0);

    //锥
    vtkSmartPointer<vtkConeSource> Cone = vtkSmartPointer<vtkConeSource>::New();
    vtkSmartPointer<vtkPolyDataMapper> mapper_Cone = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper_Cone->SetInputConnection(Cone->GetOutputPort());

    vtkSmartPointer<vtkActor> actor_Cone = vtkSmartPointer<vtkActor>::New();
    actor_Cone->SetMapper(mapper_Cone);
    renderer->AddActor(actor_Cone);

    renderer->ResetCamera();
}

Widget::~Widget()
{
    delete ui;
}

 效果展示:

需要注意:我一开始的死活不显示坐标轴,找了一整天这个问题,然后把  vtkSmartPointer<vtkOrientationMarkerWidget> MarkerWidget;的定义放到头文件之后就显示出来了,看到有一种说法是MarkerWidget被析够了。如果有知道的网友欢迎评论告知!

 

资源见https://download.csdn.net/download/m0_67254672/88955839?spm=1001.2014.3001.5501

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: vtk8.0.0编译好的库是一个用于可视化和图像处理的开源软件库。这个库是基于C++语言开发的,可以在各种操作系统和各种编译器上使用。在这种情况下,我们假设您是在Windows操作系统上使用Qt 5.9、Visual Studio 2015和PCL 1.8.1来编译和使用vtk8.0.0库。 首先,您需要确保您安装了Qt 5.9,这是一个跨平台的应用程序和UI开发框架。您可以从Qt的官方网站上下载并安装最新版本的Qt 5.9。 接下来,您需要安装Visual Studio 2015,这是一个强大的集成开发环境(IDE),用于编写和调试C++代码。您可以从微软官方网站上下载并安装Visual Studio 2015。 然后,您需要安装PCL 1.8.1,这是一个用于点云处理的开源库。您可以从PCL的官方网站上下载并安装最新版本的PCL 1.8.1。 最后,您需要将vtk8.0.0库与Qt 5.9、Visual Studio 2015和PCL 1.8.1集成在一起。首先,在Visual Studio 2015的项目设置添加vtk8.0.0的头文件路径和库文件路径。然后,在您的项目代码包含vtk的头文件,并链接vtk的库文件。 在编译和构建您的项目时,您需要确保选择正确的编译配置,以便使用Qt 5.9、Visual Studio 2015和PCL 1.8.1进行构建。 以上是使用vtk8.0.0库的一般步骤。根据您的具体项目需求,您可能需要进一步的配置和调整。希望这些信息对您有所帮助! ### 回答2: vtk8.0.0编译好的库适用于Qt5.9,VS2015,PCL1.8.1和VTK8.0版本。 首先,vtk8.0.0编译好的库是指已经经过编译,并可用于开发的库文件。该库文件包含了VTK(Visualization Toolkit,可视化工具包)的功能和特性,可以用于构建和展示3D图像、可视化数据等。 Qt5.9是一个跨平台应用程序开发框架,可以用于创建图形界面和进行应用程序开发vtk8.0.0编译好的库与Qt5.9兼容,因此可以在Qt应用程序使用该库实现丰富的3D可视化功能。 VS2015是一个开发环境,适用于Windows操作系统。vtk8.0.0编译好的库是基于VS2015编译的,所以可以在该环境下使用该库进行开发PCL1.8.1是点云库(Point Cloud Library)的一个版本。vtk8.0.0编译好的库与PCL1.8.1兼容,可以使用该库来处理和可视化点云数据。 综上所述,vtk8.0.0编译好的库适用于Qt5.9,VS2015,PCL1.8.1和VTK8.0版本,可以在这些环境使用vtk编译好的库开发和展示3D可视化功能。 ### 回答3: vtk8.0.0 编译好的库是基于以下工具和版本编译的:qt5.9、vs2015、pcl1.8.1以及vtk8.0。 vtk8.0.0是Visualization Toolkit的一个版本,它是一个开源的跨平台的3D图像处理和可视化库。它提供了丰富的功能和工具,用于处理和分析3D数据,并通过高质量的图形输出显示结果。 编译库使用的Qt版本为5.9。Qt是一个跨平台的应用程序开发框架,它提供了一套易于使用的工具和类库,用于开发图形用户界面应用程序。Qt 5.9的使用可以为vtk8.0.0库提供更强的功能和更好的用户体验。 在编译过程,使用了VS2015作为集成开发环境(IDE)。VS2015是由微软开发的一个功能强大的集成开发环境,用于开发Windows平台上的应用程序。它提供了丰富的开发工具和调试功能,可以方便地进行代码编写和调试。 此外,编译还使用了pcl1.8.1。PCL(Point Cloud Library)是一个开源的用于点云处理的库,它提供了一系列的算法和工具,用于处理和分析点云数据。PCL 1.8.1提供了vtk8.0.0库所需的点云处理功能和支持。 综上所述,vtk8.0.0编译好的库是基于qt5.9、vs2015、pcl1.8.1和vtk8.0的。使用这些工具和库,可以轻松地进行3D图像处理和可视化开发,并获得高质量的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值