opencascade AIS_ColorScale源码学习 自定义多颜色刻度、颜色条 原创
类AIS_ColorScale
用于绘制自定义颜色刻度的类。
颜色刻度由矩形颜色条(由固定数量的颜色区间组成)、可选标签和标题构成。标签可以放置在区间的边界处,也可以放置在每个区间的中间。颜色和标签可以自动定义或由用户设置。自动标签根据刻度的数值范围、刻度类型(对数或普通)计算,并按照指定的格式字符串进行格式化。
示例源码
方法
AIS_ColorScale()
AIS_ColorScale::AIS_ColorScale()
默认构造函数。
AcceptDisplayMode()
virtual Standard_Boolean AIS_ColorScale::AcceptDisplayMode(const Standard_Integer theMode) const inline override virtual
如果指定的显示模式受支持,则返回 true。
重写自 PrsMgr_PresentableObject。
ColorRange()
void AIS_ColorScale::ColorRange(Quantity_Color & theMinColor, Quantity_Color & theMaxColor) const inline
返回对应于最小值和最大值的颜色范围,默认为蓝色到红色。
Compute()
virtual void AIS_ColorScale::Compute(const Handle< PrsMgr_PresentationManager > & thePrsMgr, const Handle< Prs3d_Presentation > & thePresentation, const Standard_Integer theMode) override virtual
计算呈现效果。
实现自 PrsMgr_PresentableObject。
ComputeSelection()
virtual void AIS_ColorScale::ComputeSelection(const Handle< SelectMgr_Selection > &, const Standard_Integer) inline override virtual
计算选择 - 对颜色刻度未实现。
实现自 SelectMgr_SelectableObject。
FindColor() [1/3]
static Standard_Boolean AIS_ColorScale::FindColor(const Standard_Real theValue, const Standard_Real theMin, const Standard_Real theMax, const Standard_Integer theColorsCount, const Graphic3d_Vec3d & theColorHlsMin, const Graphic3d_Vec3d & theColorHlsMax, Quantity_Color & theColor) static
根据传递的值计算颜色;如果值在范围内则返回 true,否则返回 false。
FindColor() [2/3]
static Standard_Boolean AIS_ColorScale::FindColor(const Standard_Real theValue, const Standard_Real theMin, const Standard_Real theMax, const Standard_Integer theColorsCount, Quantity_Color & theColor) inline static
根据传递的值计算颜色;如果值在范围内则返回 true,否则返回 false。
FindColor() [3/3]
Standard_Boolean AIS_ColorScale::FindColor(const Standard_Real theValue, Quantity_Color & theColor) const
根据传递的值计算颜色;如果值在范围内则返回 true,否则返回 false。
Format()
const TCollection_AsciiString& AIS_ColorScale::Format() const inline
返回文本的格式。
GetBreadth()
Standard_Integer AIS_ColorScale::GetBreadth() const inline
返回颜色条的宽度,默认为 0(例如,应该在显示前由用户显式设置)。
GetColors() [1/2]
const Aspect_SequenceOfColor& AIS_ColorScale::GetColors() const inline
返回用户指定的颜色。
GetColors() [2/2]
void AIS_ColorScale::GetColors(Aspect_SequenceOfColor & theColors) const
返回用户指定的颜色。
GetColorType()
Aspect_TypeOfColorScaleData AIS_ColorScale::GetColorType() const inline
返回颜色类型,默认为 Aspect_TOCSD_AUTO。Aspect_TOCSD_AUTO - 在红色和蓝色之间的值 Aspect_TOCSD_USER - 用户从颜色图中指定的颜色。
GetFormat()
const TCollection_AsciiString& AIS_ColorScale::GetFormat() const inline
返回数字的格式,默认为 “%.4g”。类似于 printf() 函数的格式。如果 GetLabelType() 为 TOCSD_AUTO,则使用。
GetHeight()
Standard_Integer AIS_ColorScale::GetHeight() const inline
返回颜色条的高度,默认为 0(例如,应该在显示前由用户显式设置)。
GetIntervalColor()
Quantity_Color AIS_ColorScale::GetIntervalColor(const Standard_Integer theIndex) const
根据索引返回用户指定的颜色(从 1 开始)。如果索引超出颜色图范围,则返回默认颜色。
GetLabel()
TCollection_ExtendedString AIS_ColorScale::GetLabel(const Standard_Integer theIndex) const
根据索引返回用户指定的标签。索引范围从 1 到 GetNumberOfIntervals(),如果 IsLabelAtBorder() 为 true,则范围为 1 到 GetNumberOfIntervals() + 1。如果标签未定义,则返回空字符串。
GetLabelPosition()
Aspect_TypeOfColorScalePosition AIS_ColorScale::GetLabelPosition() const inline
返回标签相对于填充颜色矩形的位置,默认为 Aspect_TOCSP_RIGHT。
GetLabels()
void AIS_ColorScale::GetLabels(TColStd_SequenceOfExtendedString & theLabels) const
返回用户指定的标签。
GetLabelType()
Aspect_TypeOfColorScaleData AIS_ColorScale::GetLabelType() const inline
返回标签类型,默认为 Aspect_TOCSD_AUTO。Aspect_TOCSD_AUTO - 作为区间边界值的标签 Aspect_TOCSD_USER - 使用用户指定的标签。
GetMax()
Standard_Real AIS_ColorScale::GetMax() const inline
返回颜色刻度的最大值,默认为 1.0。
GetMin()
Standard_Real AIS_ColorScale::GetMin() const inline
返回颜色刻度的最小值,默认为 0.0。
GetNumberOfIntervals()
Standard_Integer AIS_ColorScale::GetNumberOfIntervals() const inline
返回颜色刻度区间的数量,默认为 10。
GetPosition()
void AIS_ColorScale::GetPosition(Standard_Real & theX, Standard_Real & theY) const inline
返回颜色刻度的左下角位置,默认为 0x0。
GetRange()
void AIS_ColorScale::GetRange(Standard_Real & theMin, Standard_Real & theMax) const inline
返回颜色刻度的最小值和最大值,默认为 0.0 到 1.0。
GetSize()
void AIS_ColorScale::GetSize(Standard_Integer & theBreadth, Standard_Integer & theHeight) const inline
返回颜色条的大小,默认为 0 和 0(例如,应该在显示前由用户显式设置)。
GetTextHeight()
Standard_Integer AIS_ColorScale::GetTextHeight() const inline
返回文本标签的字体高度,默认为 20。
GetTitle()
const TCollection_ExtendedString& AIS_ColorScale::GetTitle() const inline
返回颜色刻度的标题字符串,默认为空字符串。
GetTitlePosition()
Aspect_TypeOfColorScalePosition AIS_ColorScale::GetTitlePosition() const inline
返回颜色刻度标题的位置,默认为 Aspect_TOCSP_LEFT。
GetXPosition()
Standard_Integer AIS_ColorScale::GetXPosition() const inline
返回颜色刻度的左侧位置,默认为 0。
GetYPosition()
Standard_Integer AIS_ColorScale::GetYPosition() const inline
返回颜色刻度的底部位置,默认为 0。
HueMax()
Standard_Real AIS_ColorScale::HueMax() const inline
返回对应于最大值的色调角度,默认为 0(红色)。
HueMin()
Standard_Real AIS_ColorScale::HueMin() const inline
返回对应于最小值的色调角度,默认为 230(蓝色)。
HueRange()
void AIS_ColorScale::HueRange(Standard_Real & theMinAngle, Standard_Real & theMaxAngle) const inline
返回对应于最小值和最大值的色调角度范围,默认为 230 到 0(蓝色到红色)。
hueToValidRange()
static Standard_Real AIS_ColorScale::hueToValidRange(const Standard_Real theHue) inline static
将色调移至有效范围。亮度和饱和度应在有效范围 [0.0, 1.0] 内指定,但色调可能超出 Quantity_Color 范围,以指定插值的所需范围。
IsLabelAtBorder()
Standard_Boolean AIS_ColorScale::IsLabelAtBorder() const inline
返回 TRUE,如果标签放置在颜色区间的边界处,默认为 TRUE。自动生成的标签将显示在确切的位置:
- 连接两个相邻区间的值(TRUE)
- 区间中间的值(FALSE)
IsLogarithmic()
Standard_Boolean AIS_ColorScale::IsLogarithmic() const inline
返回 TRUE,如果颜色刻度具有对数区间,默认为 FALSE。
IsReversed()
Standard_Boolean AIS_ColorScale::IsReversed() const inline
返回 TRUE,如果标签和颜色按反序使用,默认为 FALSE。
- 正常,底部到顶部顺序,最小值在底部,最大值在顶部。
- 反序,顶部到底部顺序,最大值在底部,最小值在顶部。
IsSmoothTransition()
Standard_Boolean AIS_ColorScale::IsSmoothTransition() const inline
返回 TRUE,如果邻近区间之间的颜色过渡应该线性插值,默认为 FALSE。
Labels()
const TColStd_SequenceOfExtendedString& AIS_ColorScale::Labels() const inline
返回用户指定的标签。
MakeUniformColors()
static Aspect_SequenceOfColor AIS_ColorScale::MakeUniformColors(Standard_Integer theNbColors, Standard_Real theLightness, Standard_Real theHueFrom, Standard_Real theHueTo) static
生成具有相同亮度值的颜色序列,使用 CIE Lch 色彩空间中的色调值在指定范围内分布。颜色在范围内均匀分布,以使相邻颜色之间的感知差异相同。对于每种颜色,使用适合 sRGB 色域的最大彩度值。
参数
theNbColors - 要生成的颜色数量
theLightness - 要使用的亮度值(0 为黑)
SetBreadth()
void AIS_ColorScale::SetBreadth ( const Standard_Integer theBreadth )
inline
设置颜色条的宽度。
SetColorRange()
void AIS_ColorScale::SetColorRange ( const Quantity_Color & theMinColor,
const Quantity_Color & theMaxColor
)
inline
设置对应于最小值和最大值的颜色范围。
SetColors()
void AIS_ColorScale::SetColors ( const Aspect_SequenceOfColor & theSeq )
设置颜色刻度的颜色。序列长度应等于 GetNumberOfIntervals() 的返回值。
SetColorType()
void AIS_ColorScale::SetColorType ( const Aspect_TypeOfColorScaleData theType )
inline
设置颜色类型。Aspect_TOCSD_AUTO - 在红色和蓝色之间的值;Aspect_TOCSD_USER - 用户从颜色图中指定的颜色。
SetFormat()
void AIS_ColorScale::SetFormat ( const TCollection_AsciiString & theFormat )
inline
设置颜色刻度的自动标签格式规范。
SetHeight()
void AIS_ColorScale::SetHeight ( const Standard_Integer theHeight )
inline
设置颜色条的高度。
SetHueRange()
void AIS_ColorScale::SetHueRange ( const Standard_Real theMinAngle,
const Standard_Real theMaxAngle
)
inline
设置对应于最小值和最大值的色调角范围。有效角度范围为 [0, 360],详细信息见 Quantity_Color 和 Quantity_TOC_HLS。
SetIntervalColor()
void AIS_ColorScale::SetIntervalColor ( const Quantity_Color & theColor,
const Standard_Integer theIndex
)
设置指定区间的颜色。请注意,列表会自动调整大小以包括指定的索引。
参数
- theColor:要设置的颜色值
- theIndex:范围为 [1, GetNumberOfIntervals()] 的索引;如果指定为 -1,则附加到列表末尾
SetLabel()
void AIS_ColorScale::SetLabel ( const TCollection_ExtendedString & theLabel,
const Standard_Integer theIndex
)
设置索引处的颜色刻度标签。请注意,列表会自动调整大小以包括指定的索引。
参数
- theLabel:新标签文本
- theIndex:范围为 [1, GetNumberOfIntervals()] 或 [1, GetNumberOfIntervals() + 1](如果 IsLabelAtBorder() 为 true);如果指定为负索引,则标签附加到列表末尾
SetLabelAtBorder()
void AIS_ColorScale::SetLabelAtBorder ( const Standard_Boolean theOn )
inline
设置是否在颜色区间的边界处放置标签(默认值为 TRUE)。如果设置为 False,标签将绘制在颜色区间中而不是边界上。
SetLabelPosition()
void AIS_ColorScale::SetLabelPosition ( const Aspect_TypeOfColorScalePosition thePos )
inline
设置颜色刻度标签相对于颜色条的位置。
SetLabels()
void AIS_ColorScale::SetLabels ( const TColStd_SequenceOfExtendedString & theSeq )
设置颜色刻度标签。序列长度应等于 GetNumberOfIntervals() 的返回值,或者如果 IsLabelAtBorder() 为 true,则等于 GetNumberOfIntervals() + 1。如果序列长度与区间数不匹配,则这些标签将被视为“自由”标签,并位于与标签数量对应的虚拟区间中(IsLabelAtBorder() 标志在正常情况下具有相同效果)。
SetLabelType()
void AIS_ColorScale::SetLabelType ( const Aspect_TypeOfColorScaleData theType )
inline
设置标签类型。Aspect_TOCSD_AUTO - 作为区间边界值的标签;Aspect_TOCSD_USER - 使用用户指定的标签。
SetLogarithmic()
void AIS_ColorScale::SetLogarithmic ( const Standard_Boolean isLogarithmic )
inline
设置颜色刻度是否具有对数区间。
SetMax()
void AIS_ColorScale::SetMax ( const Standard_Real theMax )
inline
设置颜色刻度的最大值。
SetMin()
void AIS_ColorScale::SetMin ( const Standard_Real theMin )
inline
设置颜色刻度的最小值。
SetNumberOfIntervals()
void AIS_ColorScale::SetNumberOfIntervals ( const Standard_Integer theNum )
设置颜色刻度的区间数。
SetPosition()
void AIS_ColorScale::SetPosition ( const Standard_Integer theX,
const Standard_Integer theY
)
inline
设置颜色刻度的位置。
SetRange()
void AIS_ColorScale::SetRange ( const Standard_Real theMin,
const Standard_Real theMax
)
设置颜色刻度的最小值和最大值。请注意,值的顺序将被忽略 - 如果需要,最小值和最大值将被交换。应调用 ::SetReversed() 以交换显示顺序。
SetReversed()
void AIS_ColorScale::SetReversed ( const Standard_Boolean theReverse )
inline
设置是否反转标签和颜色的顺序。
SetSize()
void AIS_ColorScale::SetSize ( const Standard_Integer theBreadth,
const Standard_Integer theHeight
)
inline
设置颜色条的大小。
SetSmoothTransition()
void AIS_ColorScale::SetSmoothTransition ( const Standard_Boolean theIsSmooth )
inline
设置是否进行平滑颜色过渡。
SetTextHeight()
void AIS_ColorScale::SetTextHeight ( const Standard_Integer theHeight )
inline
设置颜色刻度文本的高度。
SetTitle()
void AIS_ColorScale::SetTitle ( const TCollection_ExtendedString & theTitle )
inline
设置颜色刻度的标题字符串。
SetTitlePosition()
void AIS_ColorScale::SetTitlePosition ( const Aspect_TypeOfColorScalePosition thePos )
inline
设置颜色刻度标题的位置。
SetUniformColors()
void AIS_ColorScale::SetUniformColors ( Standard_Real theLightness,
Standard_Real theHueFrom,
Standard_Real theHueTo
)
inline
通过在 CIE Lch 颜色空间中具有相同亮度值的颜色来填充颜色刻度,这些颜色按色调分布,并在连续颜色之间具有感知上均匀的差异。参数说明见 MakeUniformColors()。
SetXPosition()
void AIS_ColorScale::SetXPosition ( const Standard_Integer theX )
inline
设置颜色刻度的左侧位置。
SetYPosition()
void AIS_ColorScale::SetYPosition ( const Standard_Integer theY )
inline
设置颜色刻度的底部位置。
TextHeight()
Standard_Integer AIS_ColorScale::TextHeight ( const TCollection_ExtendedString & theText ) const
返回文本的高度。
参数
- theText:要计算高度的文本。
TextSize()
void AIS_ColorScale::TextSize ( const TCollection_ExtendedString & theText,
const Standard_Integer theHeight,
Standard_Integer & theWidth,
Standard_Integer & theAscent,
Standard_Integer & theDescent
) const
TextWidth()
Standard_Integer AIS_ColorScale::TextWidth ( const TCollection_ExtendedString & theText ) const
返回文本的宽度。
参数
- theText:要计算宽度的文本。
使用示例
以下是一个示例代码,展示如何使用 AIS_ColorScale
类及其一些方法。这个示例包括设置颜色刻度的各种属性,如宽度、高度、颜色范围、标签等。
#include <AIS_ColorScale.hxx>
#include <Aspect_SequenceOfColor.hxx>
#include <Quantity_Color.hxx>
#include <TCollection_AsciiString.hxx>
#include <TCollection_ExtendedString.hxx>
int main() {
// 创建一个颜色刻度对象
Handle(AIS_ColorScale) colorScale = new AIS_ColorScale();
// 设置颜色条的宽度和高度
colorScale->SetBreadth(20);
colorScale->SetHeight(200);
// 设置颜色范围
Quantity_Color minColor(Quantity_NOC_RED);
Quantity_Color maxColor(Quantity_NOC_BLUE);
colorScale->SetColorRange(minColor, maxColor);
// 设置颜色刻度的颜色
Aspect_SequenceOfColor colors;
colors.Append(Quantity_Color(Quantity_NOC_RED));
colors.Append(Quantity_Color(Quantity_NOC_GREEN));
colors.Append(Quantity_Color(Quantity_NOC_BLUE));
colorScale->SetColors(colors);
// 设置标签格式
TCollection_AsciiString format("%.2f");
colorScale->SetFormat(format);
// 设置区间数量
colorScale->SetNumberOfIntervals(5);
// 设置标签
TCollection_ExtendedString label1("Low");
TCollection_ExtendedString label2("Medium");
TCollection_ExtendedString label3("High");
colorScale->SetLabel(label1, 1);
colorScale->SetLabel(label2, 3);
colorScale->SetLabel(label3, 5);
// 设置标签位置
colorScale->SetLabelPosition(Aspect_TOCSP_LEFT);
// 设置标题
TCollection_ExtendedString title("Temperature Scale");
colorScale->SetTitle(title);
// 设置颜色刻度的位置
colorScale->SetPosition(10, 10);
// 设置颜色刻度的文本高度
colorScale->SetTextHeight(12);
// 显示颜色刻度
// 此处应有显示颜色刻度的代码,具体取决于所使用的3D图形环境,如Open CASCADE等。
return 0;
}
在这个示例中,我们执行了以下操作:
- 创建一个
AIS_ColorScale
对象。 - 设置颜色条的宽度和高度。
- 设置颜色范围,从红色到蓝色。
- 设置颜色刻度的具体颜色,红色、绿色和蓝色。
- 设置标签格式为小数点后两位。
- 设置颜色刻度的区间数量为5。
- 设置颜色刻度的标签,分别在第1、3和5个区间上。
- 设置标签的位置在颜色条的左侧。
- 设置颜色刻度的标题为 “Temperature Scale”。
- 设置颜色刻度的位置。
- 设置颜色刻度文本的高度。
这个示例展示了如何配置一个 AIS_ColorScale
对象以满足特定需求。显示颜色刻度的代码将依赖于具体的3D图形环境,如Open CASCADE等,需要根据具体环境进行实现。
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)