- vtkDistanceWidget:用于在二维平面上测量两点之间的距离。
- vtkAngleWidget:用于在平面的角度测量。
AngleWidget
感觉这都是 2D控件
#include <vtkActor.h>
#include <vtkAngleWidget.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
int main(int, char*[])
{
vtkNew<vtkNamedColors> colors;
// A renderer and render window
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> renderWindow;
renderWindow->AddRenderer(renderer);
renderWindow->SetWindowName("AngleWidget");
// An interactor
vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
renderWindowInteractor->SetRenderWindow(renderWindow);
vtkNew<vtkAngleWidget> angleWidget;
angleWidget->SetInteractor(renderWindowInteractor);
angleWidget->CreateDefaultRepresentation();
// Render
renderer->SetBackground(colors->GetColor3d("MidnightBlue").GetData());
renderWindow->Render();
renderWindowInteractor->Initialize();
renderWindow->Render();
angleWidget->On();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
vtkDistanceWidget
vtkDistanceWidget 3D测试 不能真正的落在 3D模型上,这个问题挺意外;感觉可以修改源码,但时间有限,暂时没有空看;
这个是vtkDistanceWidget
vDistanceWidget
明显可以看到它的点不能落到 模型上;理论上这个修改源码可以实现;
Code:
vtkDistanceWidget* distanceWidget = vtkDistanceWidget::New();
distanceWidget->SetInteractor(m_renderWindows[i]->GetInteractor());
vtkDistanceRepresentation3D* representation = vtkDistanceRepresentation3D::New();
distanceWidget->SetRepresentation(representation);
distanceWidget->SetPriority(0.9);
static_cast<vtkDistanceRepresentation*> (distanceWidget->GetRepresentation())->SetLabelFormat("%-#6.3g px");
distanceWidget->ManagesCursorOn();
distanceWidget->On();
使用 vtkLineWidget 实现
vtkDistanceWidget vtkLineWidge
这个自己判断 了一下,点击的点能不能落到模型上,如果没有落到不处理;