vtkCookieCutter测试

9 篇文章 1 订阅

vtkCookieCutter

效果图
plan:
在这里插入图片描述

vtkCookieCutter:用一个或多个多边形切割二维平面上定义的vtkPolyData。
这里只设置了一个多边形进行切割

void CookieCutter() 
{
	//设置底图平面面
	vtkSmartPointer<vtkPlaneSource> plane = vtkSmartPointer< vtkPlaneSource>::New();
	plane->SetCenter(0.5, 0.5, 0.0);//平面中心的位置
	plane->SetOrigin(0, 0, 0);//三个点中的起点
	plane->SetPoint1(1, 0, 0);//三个点中的终点1
	plane->SetPoint2(0, 1, 0);//三个点中的终点2
	plane->SetXResolution(25);x方向上分成25段(相当于x方向有25个格子)
	plane->SetYResolution(25);//y方向有25个格子
	plane->Update();

   
	vtkSmartPointer<vtkPolyDataWriter> w1_glyphData = vtkSmartPointer<vtkPolyDataWriter>::New();
	w1_glyphData->SetFileName("plan.vtk");
	w1_glyphData->SetInputData(plane->GetOutput());
	w1_glyphData->Update();
	w1_glyphData->Write();


	//  loops相当于闭合线
	vtkSmartPointer<vtkPolyData> loops = vtkSmartPointer< vtkPolyData>::New();
	vtkSmartPointer<vtkPoints> loopPts = vtkSmartPointer< vtkPoints>::New();
	vtkSmartPointer<vtkCellArray> loopPolys = vtkSmartPointer< vtkCellArray>::New();
	loops->SetPoints(loopPts);
	loops->SetPolys(loopPolys);

	loopPts->SetNumberOfPoints(4);
	loopPts->SetPoint(0, 0.5, 1.0, 0.0);
	loopPts->SetPoint(1, 0, 0.5, 0.0);
	loopPts->SetPoint(2, 0.5, 0.0, 0.0);
	loopPts->SetPoint(3, 1.0, 0.5, 0.0);

	loopPolys->InsertNextCell(4);
	loopPolys->InsertCellPoint(0);
	loopPolys->InsertCellPoint(1);
	loopPolys->InsertCellPoint(2);
	loopPolys->InsertCellPoint(3);

	vtkSmartPointer<vtkPolyDataWriter> w1 = vtkSmartPointer<vtkPolyDataWriter>::New();
	w1->SetFileName("closedLine.vtk");
	w1->SetInputData(loops);
	w1->Update();
	w1->Write();



	// 裁剪结果
	vtkSmartPointer<vtkCookieCutter> cookie = vtkSmartPointer< vtkCookieCutter>::New();	
	cookie->SetInputConnection(plane->GetOutputPort());
	cookie->SetLoopsData(loops);
	cookie->Update();

	vtkSmartPointer<vtkPolyDataWriter> w1_cookie = vtkSmartPointer<vtkPolyDataWriter>::New();
	w1_cookie->SetFileName("new_cookie.vtk");
	w1_cookie->SetInputData(cookie->GetOutput());
	w1_cookie->Update();
	w1_cookie->Write();


	vtkSmartPointer<vtkTriangleFilter> filter = vtkSmartPointer<vtkTriangleFilter>::New();
	filter->SetInputData(cookie->GetOutput());
	filter->Update();
	
	vtkSmartPointer<vtkPolyDataWriter> w1_cookieTrianglefilter = vtkSmartPointer<vtkPolyDataWriter>::New();
	w1_cookieTrianglefilter->SetFileName("cookieTrianglefilter.vtk");
	w1_cookieTrianglefilter->SetInputData(filter->GetOutput());
	w1_cookieTrianglefilter->Update();
	w1_cookieTrianglefilter->Write();


	//裁剪后三角剖分
	vtkSmartPointer<vtkDelaunay2D> delanuy = vtkSmartPointer<vtkDelaunay2D>::New();
	delanuy->SetInputData(cookie->GetOutput());
	delanuy->Update();

	vtkSmartPointer<vtkPolyDataWriter> w1_cookieDelanut = vtkSmartPointer<vtkPolyDataWriter>::New();
	w1_cookieDelanut->SetFileName("cookieDelanuy.vtk");
	w1_cookieDelanut->SetInputData(delanuy->GetOutput());
	w1_cookieDelanut->Update();
	w1_cookieDelanut->Write();


	vtkSmartPointer<vtkPolyData> cookie_3D = vtkSmartPointer<vtkPolyData>::New();
	vtkSmartPointer<vtkPoints> newpoints = vtkSmartPointer<vtkPoints>::New();
	
	
	vtkSmartPointer<vtkPolyData> inputPolyData = delanuy->GetOutput();
	vtkPoints *inputpoints = inputPolyData->GetPoints();
	int npts = inputpoints->GetNumberOfPoints();
	double *x;
	for (int i = 0; i < npts; i++) {
		x = inputpoints->GetPoint(i);	
		x[2] = vtkMath::Random(0.0, 0.2);
		newpoints->InsertNextPoint(x[0], x[1],x[2]);
	}
	cookie_3D->SetPoints(newpoints);

	vtkSmartPointer<vtkPolyDataWriter> beforeWrite = vtkSmartPointer<vtkPolyDataWriter>::New();
	beforeWrite->SetFileName("cookie_3D.vtk");
	beforeWrite->SetInputData(cookie_3D);
	beforeWrite->Update();
	beforeWrite->Write();
}

输出结果:
plan:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

*Heygirl

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值