VTK可视化之符号化
- vtkGlyph3D是一个符号化的算法工具
- vtkGlyph3D类可以创建一个具有大小、方向和颜色的符号,并支持图形缩放、着色、设置空间姿态等
- 输入对象中的每个点都可以用符号来可视化
- vtkGlyph3D 对象符号被配置使用点属性法矢量作为方向向量
- 也可以使用SetVectorModeToUseVector()方法用矢量数据代替法矢量
- 根据矢量值的大小,按比例绘制符号的大小。
- vtkGlyph3D对象需要接受两个输入:几何数据点集合、
Glyph
图形数据(vtkPolyData数据)。几何数据点集合来自求完法向量的图像,Glyph
图形数据用于在点集合处显示法向量。
Demo1 给符号标记颜色
- 创建点集
- 创建3维的unsigned char矢量数组
- 将点集设置给多边形数据集对象,并将属性数组设置为点集的属性
- 创建符号对象,设置符号形状数据,及被标记的多边形数据,关键点是按比例,标量或矢量/法向量的幅度值来设置符号的颜色SetColorModeToColorByScalar
- 设置符号的比例则需打开glyph3D->ScalingOff();并调用SetScaleModeToScaleByScalar
#include <vtkSmartPointer.h>
#include <vtkPointData.h>
#include <vtkCubeSource.h>
#include <vtkPolyData.h>
#include <vtkPoints.h>
#include <vtkGlyph3D.h>
#include <vtkCellArray.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkUnsignedCharArray.h>
int main()
{
// 创建点集,用于被标记
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0,0,0);
points->InsertNextPoint(5,0,0);
points->InsertNextPoint(10,0,0);
// 创建一个三维的字符型标量数组
vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
colors->SetName("colors");
colors->SetNumberOfComponents(3);//设置每个元素的维度
colors->SetNumberOfTuples(3);//设置元素的个数
unsigned char r[3] = {255,0,0};
unsigned char g[3] = {0,255,0};
unsigned char b[3] = {0,0,255};
colors->SetTuple3(0,r[0],r[1],r[2]);
colors->SetTuple3(1,g[0],g[1],g[2]);
colors->SetTuple3(2,b[0],b[1],b[2]);
/*
// 创建一个一维的浮点型标量数组 -- 作为颜色属性
vtkSmartPointer<vtkFloatArray> scales = vtkSmartPointer<vtkFloatArray>::New();
scales->SetName("scales");
scales-&