VTK顯示多邊形平面

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

 

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