vtk 多边形绘制 vtkPolygon 三角形 矩形 多边形

  vtk 可以通过 vtkPolygon 绘制 三角形 矩形 多边形

目录

  vtk 可以通过 vtkPolygon 绘制 三角形 矩形 多边形

效果:

 源码:


效果:

三角形

 矩形:

多边形:

 源码:

#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType)
#include <vtkSmartPointer.h>
#include <vtkNew.h>
#include <vtkUnstructuredGrid.h>
#include <vtkDataSetMapper.h>
#include <vtkPoints.h>
#include <vtkPolygon.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkTriangleFilter.h>
#include <vtkTriangle.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
 
 
vtkSmartPointer<vtkPolyData>  GetTriangle()
{
	const int num_points = 3;
	double top_left[num_points][3] = { {1.0, 0.0, 0.0}, {0.0, 0.0, 0.0},{0.0, 1.0, 0.0}  };
	vtkNew<vtkPoints> points;
	vtkNew<vtkPolygon> polygon;
	polygon->GetPointIds()->SetNumberOfIds(num_points);
	for (size_t i = 0; i < num_points; i++) {
		points->InsertNextPoint(top_left[i]);
		polygon->GetPointIds()->SetId(i, i);
	}

	vtkNew<vtkCellArray> cells;
	cells->InsertNextCell(polygon);

	vtkNew<vtkPolyData> polygonPolyData;
	polygonPolyData->SetPoints(points);
	polygonPolyData->SetPolys(cells);

	vtkNew<vtkTriangleFilter> filter;
	filter->SetInputData(polygonPolyData);
	filter->Update();
	vtkNew<vtkPolyData> poly;
	poly->DeepCopy(filter->GetOutput());
	return poly;
}

vtkSmartPointer<vtkPolyData> GetCubePolyData()
{
	const int num_points = 4;
	double top_left[num_points][3] = { {0.0, 0.0, 0.0}, {0.0, 1.0, 0.0},{1.0, 1.0, 0.0},{1.0, 0.0, 0.0} };
	vtkNew<vtkPoints> points;
	vtkNew<vtkPolygon> polygon;
	polygon->GetPointIds()->SetNumberOfIds(num_points);
	for (size_t i = 0; i < num_points; i++) {
		points->InsertNextPoint(top_left[i]);
		polygon->GetPointIds()->SetId(i, i);
	}

	vtkNew<vtkCellArray> cells;
	cells->InsertNextCell(polygon);

	vtkNew<vtkPolyData> polygonPolyData;
	polygonPolyData->SetPoints(points);
	polygonPolyData->SetPolys(cells);

	//vtkNew<vtkTriangleFilter> filter;
	//filter->SetInputData(polygonPolyData);
	//filter->Update();

	vtkNew<vtkPolyData> poly;
	poly->DeepCopy(polygonPolyData );
	return poly;

}

vtkSmartPointer<vtkPolyData> GetPolygonPolyData()
{
	const int num_points = 5;
	double top_left[num_points][3] = { {0.5,0.5,0}, {1,0,0},{1,1,0},{0,1,0},{0,0,0} };
	vtkNew<vtkPoints> points;
	vtkNew<vtkPolygon> polygon;
	polygon->GetPointIds()->SetNumberOfIds(num_points);
	for (size_t i = 0; i < num_points; i++) {
		points->InsertNextPoint(top_left[i]);
		polygon->GetPointIds()->SetId(i, i);
	}

	vtkNew<vtkCellArray> cells;
	cells->InsertNextCell(polygon);

	vtkNew<vtkPolyData> polygonPolyData;
	polygonPolyData->SetPoints(points);
	polygonPolyData->SetPolys(cells);

	vtkNew<vtkPolyData> poly;
	poly->DeepCopy(polygonPolyData);
	return poly;

}

int main()
{

	vtkSmartPointer<vtkPolyData> poly = GetPolygonPolyData();// GetCubePolyData();//GetTriangle();
	vtkNew<vtkPolyDataMapper> mapper;
	mapper->SetInputData(poly);

	vtkNew<vtkActor> actor;
	actor->SetMapper(mapper);
	// SetRepresentationToWireframe可以开启显示边框线
	actor->GetProperty()->SetRepresentationToWireframe();

	vtkNew<vtkRenderer> renderer;
	renderer->AddActor(actor);
	renderer->SetBackground(0, 0, 0);

	vtkNew<vtkRenderWindow> renderWindow;
	renderWindow->AddRenderer(renderer);
	renderWindow->SetSize(800, 800);
	renderWindow->SetWindowName("vtkTriangleFilter");

	vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
	renderWindowInteractor->SetRenderWindow(renderWindow);

	renderWindow->Render();
	renderWindowInteractor->Initialize();
	renderWindowInteractor->Start();
 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值