VTK图像处理颜色映射(三)
颜色映射的操作对象是数据集中的标量属性。它是一种常用的 标量算法。它会根据数据集中各个部分不同的标量值,对各个部分上不同的颜色。与此相关的另一种上色方法是控制演员的颜色属性,但这样整个图形只有单一的颜色,这显然没有颜色映射方法灵活。
下面会介绍一下:
ScalarBar的用法,可以根据自己的需要来设置scalarBar的属性。
ScalarBar和lookupTable结合使用方法
1 ScalarBar的用法
virtual int IsA(const char * type) 如果此类与指定类的类型(或子类)相同,则返回1。
void PrintSelf(ostream&os,vtkIndent indent) print调用的方法打印有关对象的信息,包括超类。
int HasTranslucentPolygonalGeometry() 这个道具有一些半透明的多边形几何形状吗?
void ReleaseGraphicsResources(vtkWindow *) 释放此actor所使用的所有图形资源。
virtual void GetScalarBarRect(int rect [4],vtkViewport * viewport) 使用视口坐标中标量条的尺寸填充rect。
void ShallowCopy(vtkProp * prop) vtkProp的浅拷贝。
int RenderOpaqueGeometry(vtkViewport * viewport) 将标量栏和注释文本绘制到屏幕上。
int RenderTranslucentPolygonalGeometry(vtkViewport *) 将标量栏和注释文本绘制到屏幕上。…
int RenderOverlay(vtkViewport * viewport) 将标量栏和注释文本绘制到屏幕上
virtual void SetLookupTable(vtkScalarsToColors *) 设置/获取要使用的查找表。
virtual vtkScalarsToColors * GetLookupTable() 设置/获取要使用的查找表。
virtual void SetUseOpacity(vtkTypeBool) 显示不透明度。
virtual GetUseOpacity() 获取不透明度。
virtual void UseOpacityOn() 显示不透明度。
virtual void UseOpacityOff()不显示不透明度。.
virtual void SetMaximumNumberOfColors(int) 设置/获取要显示的最大标量条段数。
virtual int GetMaximumNumberOfColors() 设置/获取要显示的最大标量条段数。
virtual void SetNumberOfLabels(int) 设置/获取要显示的刻度标签数。
virtual int GetNumberOfLabels() 设置/获取要显示的刻度标签数。
virtual void SetOrientation(int) 控制标量栏的方向。
virtual int GetOrientation()获取标量栏的方向。
void SetOrientationToHorizontal() 控制标量栏的方向。水平
void SetOrientationToVertical() 控制标量栏的方向。垂直
virtual void SetTitleTextProperty(vtkTextProperty * p) 设置/获取标题文本属性。
virtual vtkTextProperty * GetTitleTextProperty() 设置/获取标题文本属性。
virtual void SetLabelTextProperty(vtkTextProperty * p) 设置/获取标签文本属性
virtual vtkTextProperty * GetLabelTextProperty() 设置/获取标签文本属性。
virtual void SetAnnotationTextProperty(vtkTextProperty * p) 设置/获取注释文本属性。
virtual vtkTextProperty * GetAnnotationTextProperty() 设置/获取注释文本属性。
virtual void SetLabelFormat(const char *) 设置/获取在标量栏上打印标签的格式
virtual char* GetLabelFormat() 设置/获取在标量栏上打印标签的格式。
virtual void SetTitle(const char *) 设置/获取标量栏的标题。
virtual char* GetTitle() 设置/获取标量栏的标题。.
virtual void SetComponentTitle(const char *) 设置/获取所选组件的标题。
virtual char* GetComponentTitle() 设置/获取所选组件的标题。
virtual void SetTextureGridWidth(double) 设置纹理网格的宽度。
virtual double GetTextureGridWidth() 设置纹理网格的宽度。
vitrual vtkTexturedActor2D * GetTextureActor() 获取纹理actor。
virtual void SetTextPosition(int) 标题和刻度标记是否应在标量栏之前?这是沿垂直于标量条长轴的视口坐标方向测量的,而不是读取方向。
virtual int GetTextPosition() 获取标记位置
virtual void SetTextPositionToPrecedeScalarBar() 标题和刻度标记是否应在标量栏之前?这是沿垂直于标量条长轴的视口坐标方向测量的,而不是读取方向。
virtual void SetTextPositionToSucceedScalarBar()
virtual void SetMaximumWidthInPixels(int) 设置/获取最大宽度和高度(以像素为单位)。
virtual int GetMaximumWidthInPixels() 设置/获取最大宽度和高度(以像素为单位)。
virtual void SetMaximumHeightInPixels(int) 设置/获取最大宽度和高度(以像素为单位)。
virtual int GetMaximumHeightInPixels() 设置/获取最大宽度和高度(以像素为单位)。
virtual void SetAnnotationLeaderPadding(double) 设置/获取标量栏和文本注释之间的填充。
虚拟双GetAnnotationLeaderPadding() 设置/获取标量栏和文本注释之间的填充。
virtual void SetDrawAnnotations(vtkTypeBool) 设置/获取是否应呈现文本注释。
virtual vtkTypeBool GetDrawAnnotations() 设置/获取是否应呈现文本注释。
virtual void DrawAnnotationsOn() 设置/获取是否应呈现文本注释。
virtual void DrawAnnotationsOff() 设置/获取是否应呈现文本注释。
virtual void SetDrawNanAnnotation(vtkTypeBool) 设置/获取是否应呈现NaN注释。
virtual vtkTypeBool GetDrawNanAnnotation() 设置/获取是否应呈现NaN注释。
virtual void DrawNanAnnotationOn() 设置/获取是否应呈现NaN注释。
virtual void DrawNanAnnotationOff() 设置/获取是否应呈现NaN注释。
virtual void SetDrawBelowRangeSwatch(bool) 设置/获取是否应渲染下面的范围样本。
virtual bool GetDrawBelowRangeSwatch() 设置/获取是否应渲染下面的范围样本。
virtual void DrawBelowRangeSwatchOn() 设置/获取是否应渲染下面的范围样本。
virtual void DrawBelowRangeSwatchOff() 设置/获取是否应渲染下面的范围样本。
virtual void SetBelowRangeAnnotation(const char *) 设置/获取“低于范围”值的注释文本。
virtual char* GetBelowRangeAnnotation() 设置/获取“低于范围”值的注释文本。
virtual void SetDrawAboveRangeSwatch(bool) 设置/获取是否应渲染高于范围的样本。
virtual bool GetDrawAboveRangeSwatch() 设置/获取是否应渲染高于范围的样本。
virtual void DrawAboveRangeSwatchOn() 设置/获取是否应渲染高于范围的样本。
虚拟void DrawAboveRangeSwatchOff() 设置/获取是否应渲染高于范围的样本。
virtual void SetAboveRangeAnnotation(const char *) 设置/获取“Above Range Swatch”值的注释文本。
virtual char* GetAboveRangeAnnotation() 设置/获取“Above Range Swatch”值的注释文本。
virtual void SetFixedAnnotationLeaderLineColor(vtkTypeBool) 设置/获取将注释与值连接的引线应如何着色。
virtual vtkTypeBool GetFixedAnnotationLeaderLineColor() 设置/获取将注释与值连接的引线应如何着色。
virtual void FixedAnnotationLeaderLineColorOn() 设置/获取连接annotati的引导线的方式
virtual vtkTypeBool GetFixedAnnotationLeaderLineColor() 设置/获取将注释与值连接的引线应如何着色。
virtual void FixedAnnotationLeaderLineColorOn() 设置/获取将注释与值连接的引线应如何着色。
virtual void FixedAnnotationLeaderLineColorOff() 设置/获取将注释与值连接的引线应如何着色。
virtual void SetNanAnnotation(const char *) 设置/获取“NaN”值的注释文本。
virtual char* GetNanAnnotation() 设置/获取“NaN”值的注释文本。
virtual void SetAnnotationTextScaling(vtkTypeBool) 设置/获取是否应使用视口缩放注释标签。
virtual vtkTypeBool GetAnnotationTextScaling() 设置/获取是否应使用视口缩放注释标签。
virtual void AnnotationTextScalingOn() 设置/获取是否应使用视口缩放注释标签。
virtual void AnnotationTextScalingOff() 设置/获取是否应使用视口缩放注释标签。
virtual void SetDrawBackground(vtkTypeBool) 设置/获取是否应在标量栏周围绘制背景。
virtual vtkTypeBool GetDrawBackground() 设置/获取是否应在标量栏周围绘制背景。
virtual void DrawBackgroundOn() 设置/获取是否应在标量栏周围绘制背景。
virtual void DrawBackgroundOff() 设置/获取是否应在标量栏周围绘制背景。
virtual void SetDrawFrame(vtkTypeBool) 设置/获取是否应在标量栏周围绘制框架。
virtual vtkTypeBool GetDrawFrame() 设置/获取是否应在标量栏周围绘制框架。
virtual void DrawFrameOn() 设置/获取是否应在标量栏周围绘制框架。
virtual void DrawFrameOff() 设置/获取是否应在标量栏周围绘制框架。
virtual void SetDrawColorBar(vtkTypeBool) 设置/获取是否应绘制颜色条。
virtual vtkTypeBool GetDrawColorBar() 设置/获取是否应绘制颜色条。
virtual void DrawColorBarOn() 设置/获取是否应绘制颜色条。
virtual void DrawColorBarOff() 设置/获取是否应绘制颜色条。
virtual void SetDrawTickLabels(vtkTypeBool) 设置/获取是否应绘制刻度标签。
virtual vtkTypeBool GetDrawTickLabels() 设置/获取是否应绘制刻度标签。
virtual void DrawTickLabelsOn() 设置/获取是否应绘制刻度标签
virtual void DrawTickLabelsOff() 设置/获取是否应绘制刻度标签。
virtual void SetBackgroundProperty(vtkProperty2D * p) 设置/获取背景属性。
virtual vtkProperty2D * GetBackgroundProperty() 设置/获取背景属性。
virtual void SetFrameProperty(vtkProperty2D * p) 设置/获取框架属性。
virtual vtkProperty2D * GetFrameProperty() 设置/获取框架属性。
virtual int GetTextPad() 设置/获取文本框周围的填充量。
virtual void SetTextPad(int) 设置/获取文本框周围的填充量。
virtual int GetVerticalTitleSeparation() 当方向为垂直时,设置/获取标题和条形之间的边距(以像素为单位)。
virtual void SetVerticalTitleSeparation(int) 当方向为垂直时,设置/获取标题和条形之间的边距(以像素为单位)。
virtual double GetBarRatio() 设置/获取相对于窗口小部件框架的颜色条的粗细。
virtual void SetBarRatio(double) 设置/获取相对于窗口小部件框架的颜色条的粗细。
virtual double GetTitleRatio() 设置/获取标题高度与刻度标签高度的比率(仅在“方向”为“水平”时使用)
virtual void SetTitleRatio(double) 设置/获取标题高度与刻度标签高度的比率(仅在“方向”为“水平”时使用)
virtual void SetUnconstrainedFontSize(bool) 设置/获取标题和标签的字体大小是否不受约束。
virtual bool GetUnconstrainedFontSize() 设置/获取标题和标签的字体大小是否不受约束。
virtual void UnconstrainedFontSizeOn() 设置/获取标题和标签的字体大小是否不受约束。
virtual void UnconstrainedFontSizeOff() 设置/获取标题和标签的字体大小是否不受约束。
2 ScalarBar和lookupTable结合使用方法
//可以根据颜色标量值在scalarBar中建立一个颜色查找表
//建立lookupTable
vtkLookupTable *lut = vtkLookupTable::New();
//设置颜色映射的数目
lut->SetNumberOfTableValues(100);
//设置颜色映射的范围
lut->SetTableRange(0,10);
lut->Build();
……
-------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
//定义一个颜色标量并把颜色标量转换成颜色
vtkUnsignedCharArray *cellData = vtkUnsignedCharArray::New();
cellData->SetNumberOfComponents(3);
for (auto it = vtkCells.begin(); it != vtkCells.end(); it++)
{
//cout << "id: " << it->first << " " << "d: " << it->second<< endl;
d = it->second;
//get the rgb value from lut table according to the distance value
lut->GetColor(static_cast(d), rgb);
//convert the d value to rgb value
for (size_t j = 0; j < 3; j++)
{
ucrgb[j] = static_cast(rgb[j] * 255);
}
cellData->InsertTuple(it->first, ucrgb);
}
polyData->GetCellData()->SetScalars(cellData);
……
vtkScalarBarActor *scalarBar = vtkScalarBarActor::New();
//scalarBar->SetLookupTable(boneMapper->GetLookupTable());
scalarBar->SetLookupTable(lut);
//设置标题
scalarBar->SetTitle("Distance(mm)");
//设置颜色范围的分段数目
scalarBar->SetNumberOfLabels(6);
……
renderer->AddActor2D(scalarBar);