#ifndef VTKHSWPOLYGONWIDGET_H
#define VTKHSWPOLYGONWIDGET_H
/*
* ModuleName: vtkHSWPolygonWidget
* Description: 實現多邊形
* Author: hsw
* Date: 2020-03-22
*
*/
#include <vtkPoints.h>
#include <vtkUnstructuredGrid.h>
#include <vtkPolygon.h>
#include <vtkDataSetMapper.h>
#include <vtkSmartPointer.h>
class vtkHSWPolygonWidget
{
public:
vtkHSWPolygonWidget();
~vtkHSWPolygonWidget();
public:
// pointCnt: 多邊形點個數
// points: 每個點[x, y, z], points = [[x1, y1, z1], [x2, y2, z2]]
vtkSmartPointer<vtkDataSetMapper> createPolygon(int pointCnt, double* points);
private:
vtkSmartPointer<vtkUnstructuredGrid> _polygonGrid;
vtkSmartPointer<vtkPoints> _polygonPoints;
vtkSmartPointer<vtkPolygon> _polygon;
vtkSmartPointer<vtkDataSetMapper> _polygonMapper;
};
#endif // VTKHSWPOLYGONWIDGET_H
#include "vtkhswpolygonwidget.h"
vtkHSWPolygonWidget::vtkHSWPolygonWidget()
{
_polygonPoints = vtkSmartPointer<vtkPoints>::New ();
_polygon = vtkSmartPointer<vtkPolygon>::New ();
_polygonGrid = vtkSmartPointer<vtkUnstructuredGrid>::New();
_polygonMapper = vtkSmartPointer<vtkDataSetMapper>::New();
}
vtkHSWPolygonWidget::~vtkHSWPolygonWidget()
{
// TODO...
}
vtkSmartPointer<vtkDataSetMapper> vtkHSWPolygonWidget::createPolygon(int pointCnt, double *points)
{
if(pointCnt == 0)
{
return _polygonMapper;
}
// 幾何數據 + 拓撲數據
_polygonPoints->SetNumberOfPoints (pointCnt);
_polygon->GetPointIds()->SetNumberOfIds (pointCnt);
for (int i = 0; i < pointCnt; ++i)
{
_polygonPoints->SetPoint (i, points[i * 3 + 0], points[i * 3 + 1], points[i * 3 + 2]);
_polygon->GetPointIds ()->SetId (i, i);
}
_polygonGrid->Allocate (1, 1);
_polygonGrid->InsertNextCell(_polygon->GetCellType (), _polygon->GetPointIds ());
_polygonGrid->SetPoints (_polygonPoints);
_polygonMapper->SetInputData(_polygonGrid);
return _polygonMapper;
}