VTK ( 004) 基础 坐标轴
VTK ( 004) 基础 坐标轴
主要是
QVTKOpenGLNativeWidget添加坐标轴,vtkOrientationMarkerWidget在SetInteractor方法中要vtkNew<vtkGenericOpenGLRenderWindow> renwindow,然后renwindow->GetInteractor();
添加坐标轴
vtkSmartPointer<vtkAxesActor> actorAxes=
vtkSmartPointer<vtkAxesActor>::New();
actorAxes->SetPosition(0, 0, 0); // 设置坐标轴的位置
actorAxes->SetTotalLength(10, 10, 10); // 设置坐标轴的总长度
actorAxes->SetShaftType(0); // 设置轴的类型
actorAxes->SetAxisLabels(0); // 设置是否显示轴标签
actorAxes->SetCylinderRadius(0.02); // 设置轴的圆柱半径
坐标轴小部件
完整例子 1(vtkRenderWindow)
#include <vtkSmartPointer.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkAxesActor.h>
#include <vtkOrientationMarkerWidget.h>
int main(int argc, char *argv[])
{
// 创建一个渲染器
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
// 创建一个渲染窗口
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
// 创建一个渲染窗口交互器
vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);
// 创建一个坐标轴演员
vtkSmartPointer<vtkAxesActor> iconActor = vtkSmartPointer<vtkAxesActor>::New();
iconActor->SetTotalLength(1.0, 1.0, 1.0); // 设置轴的长度
iconActor->SetShaftType(0); // 设置轴的类型为直线
iconActor->SetAxisLabels(1); // 显示轴标签
iconActor->SetCylinderRadius(0.02); // 设置轴的圆柱半径
// 创建一个方向标小部件
vtkSmartPointer<vtkOrientationMarkerWidget> orientationWidget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();
orientationWidget->SetOutlineColor(0.9300, 0.5700, 0.1300); // 设置轮廓颜色
orientationWidget->SetInteractor(interactor); // 设置交互器
orientationWidget->SetOrientationMarker(iconActor); // 设置方向标演员
orientationWidget->SetViewport(0.0, 0.0, 0.1, 0.1); // 设置方向标的位置和大小
orientationWidget->SetEnabled(1); // 启用方向标小部件
orientationWidget->InteractiveOn(); // 开启交互模式
// 设置背景颜色
renderer->SetBackground(0.1, 0.2, 0.3); // 深蓝色背景
// 初始化渲染窗口交互器
renderWindow->Render();
interactor->Initialize();
// 开始交互
interactor->Start();
return EXIT_SUCCESS;
}
完整例子 2(QVTKOpenGLNativeWidget)
/**
* 下面两个在头文件中已经声明
* QVTKOpenGLNativeWidget *m_qvtkWidget = nullptr;
* vtkSmartPointer<vtkOrientationMarkerWidget> MarkerWidget = nullptr;
*/
m_qvtkWidget = new QVTKOpenGLNativeWidget();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); // 在构造函数中进行初始化
// 显示
vtkNew<vtkGenericOpenGLRenderWindow> renwindow;
renwindow->AddRenderer(renderer);
m_qvtkWidget->setRenderWindow(renwindow.Get());
// 添加到 ui中
ui->verticalLayout->addWidget(m_qvtkWidget, 1);
// 显示坐标系的vtk组件
vtkSmartPointer<vtkAxesActor> axes_actor = vtkSmartPointer<vtkAxesActor>::New();
axes_actor->SetPosition(0, 0, 0); // 设置坐标轴的位置
axes_actor->SetTotalLength(2, 2, 2); // 设置坐标轴的长度
axes_actor->SetShaftType(0); // 设置坐标轴的类型,0表示圆柱体,1表示线段
axes_actor->SetCylinderRadius(0.03); // 设置坐标轴的圆柱体半径
axes_actor->SetAxisLabels(1); // 设置坐标轴的标签
axes_actor->SetTipType(0); // 设置坐标轴的箭头长度
axes_actor->SetXAxisLabelText("xxx"); // 设置X轴标签
axes_actor->SetYAxisLabelText("yyy"); // 设置Y轴标签
axes_actor->SetZAxisLabelText("zzz"); // 设置Z轴标签
axes_actor->GetXAxisShaftProperty()->SetColor(1, 1, 1); // 设置X轴颜色
// 控制坐标系,使之随视角共同变化
MarkerWidget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();
MarkerWidget->SetOrientationMarker(axes_actor);
MarkerWidget->SetInteractor(renwindow->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();

浙公网安备 33010602011771号