定义VTKPolyDataMapper的中心

时间:2019-02-14 07:43:25

标签: c++ qt vtk opencascade

我有一个导入STEP文件的应用程序,并将几何图形转换为OpenCascade对象。然后,通过VTK查看器将该对象可视化。

这是代码(C ++,QT):

导入STEP文件并将其转换为OpenCascade对象

QString pathFileName = "component.step" ;
STEPControl_Reader reader;
reader.ReadFile(pathFileName.toStdString().c_str());
reader.NbRootsForTransfer();
reader.TransferRoots();
TopoDS_Shape shape;
shape = reader.OneShape();
BRepTools::Clean(shape);

使用VTK可视化形状

IVtkOCC_Shape::Handle shapeImpl = new IVtkOCC_Shape(shape);
vtkSmartPointer<IVtkTools_ShapeDataSource> DS = vtkSmartPointer<IVtkTools_ShapeDataSource>::New();
DS->SetShape(shapeImpl);

vtkSmartPointer<vtkPolyDataMapper> Mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
Mapper->SetInputConnection(DS->GetOutputPort());
vtkSmartPointer<vtkActor> Actor = vtkSmartPointer<vtkActor>::New();
Actor->SetMapper(Mapper);

vtkSmartPointer<vtkRenderer> Renderer = vtkSmartPointer<vtkRenderer>::New();
Renderer->AddActor(Actor);

结果显示在这里:

enter image description here

这还不错,但是坐标轴很远,正如我们看到的是否可以放大:

enter image description here

如果我打印了映射器的中心,则会得到以下值:

  

X:0

     

Y:172.333

     

Z:0

我想将“ Y”设置为cero,但由于该类的“中心”属性受到保护,因此我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

vtkAxesActor *axes = vtkAxesActor::New();
vtkOrientationMarkerWidget *widget = vtkOrientationMarkerWidget::New();
widget->SetDefaultRenderer(renderer);
widget->SetOrientationMarker(axes);
widget->SetInteractor(ren);
widget->EnabledOn();

如果添加这样的代码,则可以在左下角看到坐标轴。