#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;
}