VTK 中画直线的方法汇总(三) C++ code

在软件界面上点击小工具来画线或角度,一般是通过vtkWidget来做。

(四)vtkLineWidget2 画直线

vtkLineWidget 2可用于软件界面的交互,在经过初始化的情况下,用户可通过按键或鼠标的方式来操作相应widget在窗口中的位置或状态。

//method 4 vtkLineWidget2
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include

int main(int argc, char *argv[])
{
	// A renderer and render window
	vtkSmartPointer renderer =
		vtkSmartPointer::New();
	vtkSmartPointer renderWindow =
		vtkSmartPointer::New();
	renderWindow->AddRenderer(renderer);

	// An interactor
	vtkSmartPointer renderWindowInteractor =
		vtkSmartPointer::New();
	renderWindowInteractor->SetRenderWindow(renderWindow);

	vtkSmartPointer lineRepresentation =
		vtkSmartPointer::New();
	lineRepresentation->GetEndPointProperty()->SetColor(1, 0, 0);
	lineRepresentation->GetEndPoint2Property()->SetColor(0, 0, 1);
	//lineRepresentation->DistanceAnnotationVisibilityOn();//距离注释

	vtkLineWidget2* lineWidget1 = vtkLineWidget2::New();
	lineWidget1->SetInteractor(renderWindowInteractor);
	lineWidget1->SetRepresentation(lineRepresentation);
	lineWidget1->On();

	renderWindow->Render();
	renderWindowInteractor->Initialize();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

结果:

VTK 中画直线的方法汇总(三) C++ code_第1张图片 vtklinewidget2

vtkLineWidget2 的demo中,用户可以通过鼠标移至端点或白线位置对它们进行相应的位置操作。

 

(五)vtkDistanceWidget 画线段

vtkDistanceWidget 的交互非常方便,在进行VTK界面功能开发时,可在借用vtkDistanceWidget的交互方式的同时,去掉不需要的东西(比如注释或分段点),从而在此基础上进行拓展开发。

//method 5 vtkDistanceWidget
#include 
#include 
#include 
#include 
#include 
#include 

int main(int, char *[])
{
    // A renderer and render window
    vtkSmartPointer renderer =
        vtkSmartPointer::New();
    vtkSmartPointer renderWindow =
        vtkSmartPointer::New();
    renderWindow->AddRenderer(renderer);

    // An interactor
    vtkSmartPointer renderWindowInteractor =
        vtkSmartPointer::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    vtkSmartPointer distanceWidget =
        vtkSmartPointer::New();
    distanceWidget->SetInteractor(renderWindowInteractor);
    distanceWidget->CreateDefaultRepresentation();
    static_cast(distanceWidget->GetRepresentation())
        ->SetLabelFormat("%-#6.3g mm");

    //static_cast(distanceWidget->GetRepresentation())->SetNumberOfRulerTicks(NULL);
    去掉线上的分段点
    //static_cast(distanceWidget->GetRepresentation())->SetLabelFormat("%");
    去掉注释

    renderWindow->Render();
    renderWindowInteractor->Initialize();
    renderWindow->Render();
    distanceWidget->On();

    // Begin mouse interaction
    renderWindowInteractor->Start();

    return EXIT_SUCCESS;
}
VTK 中画直线的方法汇总(三) C++ code_第2张图片 vtkdistancewidget VTK 中画直线的方法汇总(三) C++ code_第3张图片 no ticks or annotations

 

你可能感兴趣的:(VTK,vtkLineWidget2,source,code,C++)