VTK顯示圓圈

#ifndef VTKHSWCIRCLEWIDGET_H
#define VTKHSWCIRCLEWIDGET_H

/*
 * ModuleName: vtkHSWCircleWidget
 * Description: 實現圓形
 * Author: hsw
 * Date: 2020-03-22
 *
 */

#include <vtkSmartPointer.h>
#include <vtkDiskSource.h>
#include <vtkDataSetMapper.h>
#include <vtkTransform.h>
#include <vtkTransformPolyDataFilter.h>

class vtkHSWCircleWidget
{
public:
    vtkHSWCircleWidget();
    ~vtkHSWCircleWidget();
public:
    // center: 中心點
    // radius:
    vtkSmartPointer<vtkDataSetMapper> createCircle(double* center, double radius, double* rotate, int thetaRes, int thetaRes2);
};

#endif // VTKHSWCIRCLEWIDGET_H

 

#include "vtkhswcirclewidget.h"

vtkHSWCircleWidget::vtkHSWCircleWidget()
{

}

vtkHSWCircleWidget::~vtkHSWCircleWidget()
{

}

vtkSmartPointer<vtkDataSetMapper> vtkHSWCircleWidget::createCircle(double *center, double radius, double *rotate, int thetaRes, int thetaRes2)
{
    vtkSmartPointer<vtkDiskSource> disk = vtkSmartPointer<vtkDiskSource>::New();
    disk->SetCircumferentialResolution (thetaRes);
    disk->SetInnerRadius (radius - 0.15);
    disk->SetOuterRadius (radius + 0.15);
    disk->SetCircumferentialResolution (thetaRes2);

    // An alternative to <vtkDiskSource> could be <vtkRegularPolygonSource> with <vtkTubeFilter>
    // vtkSmartPointer<vtkRegularPolygonSource> circle = vtkSmartPointer<vtkRegularPolygonSource>::New();
    // circle->SetRadius (coefficients.values[2]);
    // circle->SetNumberOfSides (100);
    // vtkSmartPointer<vtkTubeFilter> tube = vtkSmartPointer<vtkTubeFilter>::New();
    // tube->SetInput (circle->GetOutput());
    // tube->SetNumberOfSides (25);
    // tube->SetRadius (0.001);

    vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New ();
    transform->Identity ();
    transform->Translate (center);
    transform->RotateX(rotate[0]);
    transform->RotateY(rotate[1]);
    transform->RotateZ(rotate[2]);

    vtkSmartPointer<vtkTransformPolyDataFilter> transformFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New ();
    transformFilter->SetTransform (transform);
    transformFilter->SetInputConnection (disk->GetOutputPort());
    // transformFilter->Update ();

    vtkSmartPointer<vtkDataSetMapper> circleMapper = vtkSmartPointer<vtkDataSetMapper>::New();

    circleMapper->SetInputConnection(transformFilter->GetOutputPort());

    return circleMapper;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章