vtk创建圆柱体,合并polydata和vtkCylinderSource旋转朝向

1,vtkCylinderSource创建圆柱体默认会沿y轴方向,不能直接改变朝向,但是可以改actor的朝向

2,合并polydata没什么,可以直接合,也可以合完用vtkCleanPolyData清除掉重复的点,清楚前后效果如下

代码有点乱

int main(int, char* [])
{
	vtkNew<vtkNamedColors> colors;

	// Create a sphere
	vtkNew<vtkCylinderSource> cylinderSource;
	cylinderSource->SetCenter(0.0, 0.0, 0.0);
	cylinderSource->SetRadius(5.0);
	cylinderSource->SetHeight(6.0);
	cylinderSource->SetResolution(100);
	cylinderSource->Update();

	vtkSmartPointer<vtkPolyData> poly = cylinderSource->GetOutput();
	vtkIdType tuples = poly->GetPointData()->GetNumberOfTuples();
	vtkFloatArray* ColorField = vtkFloatArray::New();
	ColorField->SetName("ColorField");
	ColorField->SetNumberOfComponents(1);
	ColorField->SetNumberOfTuples(tuples);
	for (vtkIdType i = 0; i < tuples; i++)
	{
		ColorField->SetTuple1(i, 1);
	}
	poly->GetPointData()->AddArray(ColorField);
	
	//vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New();
	//writer->SetInputDataObject(poly);
	//writer->SetFileName("G:/cylinder.vtk");
	//writer->Update();
	
	//create next sphere
	vtkNew<vtkCylinderSource> cylinderSource2;
	cylinderSource2->SetCenter(0.0, 6.0, 0.0);
	cylinderSource2->SetRadius(5.0);
	cylinderSource2->SetHeight(6.0);
	cylinderSource2->SetResolution(100);
	cylinderSource2->Update();
	
	vtkSmartPointer<vtkPolyData> poly2 = cylinderSource2->GetOutput();
	vtkIdType tuples2 = poly2->GetPointData()->GetNumberOfTuples();
	vtkFloatArray* ColorField2 = vtkFloatArray::New();
	ColorField2->SetName("ColorField");
	ColorField2->SetNumberOfComponents(1);
	ColorField2->SetNumberOfTuples(tuples2);
	for (vtkIdType i = 0; i < tuples2; i++)
	{
		ColorField2->SetTuple1(i, 2);
	}
	poly2->GetPointData()->AddArray(ColorField2);

	//合并两个poly
	vtkSmartPointer<vtkAppendPolyData> appendFilter =
		vtkSmartPointer<vtkAppendPolyData>::New();
	appendFilter->AddInputData(poly);
	appendFilter->AddInputData(poly2);
	appendFilter->Update();

	// 清除掉重合的点
	vtkSmartPointer<vtkCleanPolyData> cleanFilter =
		vtkSmartPointer<vtkCleanPolyData>::New();
	cleanFilter->SetInputConnection(appendFilter->GetOutputPort());
	cleanFilter->Update();

	//vtkSmartPointer<vtkPolyData> lastOnePoly = appendFilter->GetOutput();
	vtkSmartPointer<vtkPolyData> lastOnePoly = cleanFilter->GetOutput();
	vtkSmartPointer<vtkPolyDataWriter> writer = vtkSmartPointer<vtkPolyDataWriter>::New();
	writer->SetInputDataObject(lastOnePoly);
	writer->SetFileName("G:/AppendCylinder.vtk");
	writer->Update();


	
	// Create a mapper and actor
	vtkNew<vtkPolyDataMapper> mapper;
	mapper->SetInputConnection(cylinderSource->GetOutputPort());
	vtkNew<vtkActor> actor;
	actor->GetProperty()->SetColor(colors->GetColor3d("Cornsilk").GetData());
	actor->SetMapper(mapper);

	//改变方向
	actor->RotateX(90);

	// Create a renderer, render window, and interactor
	vtkNew<vtkRenderer> renderer;
	vtkNew<vtkRenderWindow> renderWindow;
	renderWindow->SetWindowName("Cylinder");
	renderWindow->AddRenderer(renderer);
	vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
	renderWindowInteractor->SetRenderWindow(renderWindow);

	// Add the actor to the scene
	renderer->AddActor(actor);
	renderer->SetBackground(colors->GetColor3d("DarkGreen").GetData());

	// Render and interact
	renderWindow->Render();
	renderWindowInteractor->Start();

	return EXIT_SUCCESS;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值