vtkpolydata图形着色

2020-06-10

颜色可以直接作为一种标量属性数据,设置到相应的点或者单元数据中,这是最直接的一种图形着色方式。

1.需求

根据vtkLookupTable为点设置相对应的颜色,在这里我们需要首先为点设置标量属性值。

2.代码

#include <vtkSmartPointer.h>
#include <vtkPolyData.h>
#include <vtkFloatArray.h>
#include <vtkCellData.h>
#include <vtkLookupTable.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

int main(){

	vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();

	pts->InsertNextPoint(0.0, 0.0, 0.0);
	pts->InsertNextPoint(1.0, 0.0, 0.0);
	pts->InsertNextPoint(1.0, 1.0, 0.0);
	pts->InsertNextPoint(0.0, 1.0, 0.0);
	pts->InsertNextPoint(2.0, 0.0, 0.0);

	vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();

	for (int i = 0; i < 5; i++) {
		vtkIdType pt[1] = { i };
		vertices->InsertNextCell(1, pt);
	}

	vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
	polyData->SetPoints(pts);
	polyData->SetVerts(vertices);

	//标量属性
	vtkSmartPointer<vtkFloatArray> cellScalars = vtkSmartPointer<vtkFloatArray>::New();

	for (int i = 0; i < 9; i++)	{
		cellScalars->InsertNextValue(i + 1); //九个索引
	}

	polyData->GetCellData()->SetScalars(cellScalars);

	vtkSmartPointer<vtkLookupTable> lut = vtkSmartPointer<vtkLookupTable>::New();
	lut->SetNumberOfTableValues(10);
	lut->Build();
	lut->SetTableValue(0, 0, 0, 0, 1);
	lut->SetTableValue(1, 0.8900, 0.8100, 0.3400, 1);
	lut->SetTableValue(2, 1.0000, 0.3882, 0.2784, 1);
	lut->SetTableValue(3, 0.9608, 0.8706, 0.7020, 1);
	lut->SetTableValue(4, 0.9020, 0.9020, 0.9804, 1);
	lut->SetTableValue(5, 1.0000, 0.4900, 0.2500, 1);

	vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();
	mapper->SetInputData(polyData);
	mapper->SetScalarRange(0, 5);
	mapper->SetLookupTable(lut);

	vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();
	actor->SetMapper(mapper);
	actor->GetProperty()->SetPointSize(3);

	vtkSmartPointer<vtkRenderer> render =vtkSmartPointer<vtkRenderer>::New();
	render->AddActor(actor);
	render->SetBackground(0.0, 0.0, 0.0);

	vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();
	rw->AddRenderer(render);
	rw->SetSize(320, 320);

	vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	rwi->SetRenderWindow(rw);
	rwi->Start();

	return 0;
}

3.结果
在这里插入图片描述

如果什么也没有显示可以用鼠标滚轮进行缩放一下
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VTKvtkPolyDataVTK中的一个重要接口,它用于表示和操作多边形数据。vtkPolyData的数据结构包含了顶点、线段、多边形等几何元素,并且支持属性数据的附加。通过vtkPolyData接口,我们可以进行各种几何操作,如创建、修改、查询和可视化多边形数据。 引用提到了vtkPolyData的重要性,掌握了vtkPolyData的数据结构和相关方法可以更好地理解VTK。这个接口的方法包括添加几何元素、修改属性数据、进行几何操作等,可以通过官方文档或相关教程学习和了解。 如果你想将vtkUnstructuredGrid转换为vtkPolyData,可以参考引用中提供的方法。这个过程涉及重新构建输入vtkPolyData数据的Mesh数据,具体的步骤可以在文章中找到。 另外,引用提供了一篇介绍VTK的文章,可以作为参考。VTK是一个开源的免费软件系统,主要用于三维计算机图形学、图像处理和可视化。它的内核是用C构建的,支持多种编程语言的调用,如Java、Tcl/Tk和Python。 总之,VTKvtkPolyData是用于表示和操作多边形数据的接口,可以通过学习相关文档和教程来深入了解其数据结构和方法。同时,可以通过转换方法将其他数据类型转换为vtkPolyData进行处理和可视化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [VTK-vtkPolyData解读](https://blog.csdn.net/qq_40041064/article/details/127959529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [VTK基础教程(1)- vtkPolyData 介绍](https://blog.csdn.net/qq_35769071/article/details/122671756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值