【VTK-Rendering::Core】第二期 vtkTextActor
2024-01-03 09:29:00
很高兴在雪易的CSDN遇见你?
VTK技术爱好者 QQ:870202403
前言
本文以vtkTextActor为起点,分享VTK中Text相关的内容,希望对各位小伙伴有所帮助!
感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!
你的点赞就是我的动力(^U^)ノ~YO
目录
1. vtkTextActor
? ? ? ? 用于展示文字的Actor,可以缩放,也可以不缩放。
?????????vtkTextActor可用于将文本注释放入窗口中。当TextScaleMode为NONE时,文本是固定字体,操作与vtkPolyDataMapper2D/vtkActor2D对相同。当TextScaleMode为VIEWPORT时,字体会调整大小,使其相对于呈现它的VIEWPORT保持一致的大小。当TextScaleMode为PROP时,字体会调整大小,使文本适合位置1和2坐标所定义的框。该类取代了已弃用的vtkScaledTextActor,并作为vtkTextMapper/vtkActor2D对的方便包装器。通过与此actor关联的vtkTextProperty设置文本属性/属性。其重要参数如下:
1.1 SetInput设置输入
//@{
/**
* Set the text string to be displayed. "\n" is recognized
* as a carriage return/linefeed (line separator).
* The characters must be in the UTF-8 encoding.
* Convenience method to the underlying mapper
*/
void SetInput(const char* inputString);
char* GetInput();
//@}
1.2 设置最小、最大尺寸
//@{
/** 设置该Actor所占用的最小像素
* Set/Get the minimum size in pixels for this actor.
* Defaults to 10,10.
* Only valid when TextScaleMode is PROP.
*/
vtkSetVector2Macro(MinimumSize, int);
vtkGetVector2Macro(MinimumSize, int);
//@}
//@{
/**设置/获取文本行的最大高度,作为分配给它的垂直区域的百分比
* 缩放文本actor。默认为1.0。
* Set/Get the maximum height of a line of text as a
* percentage of the vertical area allocated to this
* scaled text actor. Defaults to 1.0.
* Only valid when TextScaleMode is PROP.
*/
vtkSetMacro(MaximumLineHeight, float);
vtkGetMacro(MaximumLineHeight, float);
//@}
1.3 设置缩放模式
//@{
/**
* 设置文本的缩放方式。
* 如果设置为vtkTextActor::TEXT_SCALE_MODE_NONE,字体大小将由TextProperty中给定的大小固定。
* 如果设置为vtkTextActor::TEXT_SCALE_MODE_PROP,文本将被缩放到完全适合由位置1和2坐标指定的道具。
* 如果设置为vtkTextActor::TEXT_SCALE_MODE_VIEWPORT,文本将根据显示的viewport的大小进行缩放。
* Set how text should be scaled. If set to
* vtkTextActor::TEXT_SCALE_MODE_NONE, the font size will be fixed by the
* size given in TextProperty. If set to vtkTextActor::TEXT_SCALE_MODE_PROP,
* the text will be scaled to fit exactly in the prop as specified by the
* position 1 & 2 coordinates. If set to
* vtkTextActor::TEXT_SCALE_MODE_VIEWPORT, the text will be scaled based on
* the size of the viewport it is displayed in.
*/
vtkSetClampMacro(TextScaleMode, int, TEXT_SCALE_MODE_NONE, TEXT_SCALE_MODE_VIEWPORT);
vtkGetMacro(TextScaleMode, int);
void SetTextScaleModeToNone() { this->SetTextScaleMode(TEXT_SCALE_MODE_NONE); }
void SetTextScaleModeToProp() { this->SetTextScaleMode(TEXT_SCALE_MODE_PROP); }
void SetTextScaleModeToViewport() { this->SetTextScaleMode(TEXT_SCALE_MODE_VIEWPORT); }
//@}
enum
{
TEXT_SCALE_MODE_NONE = 0,
TEXT_SCALE_MODE_PROP,
TEXT_SCALE_MODE_VIEWPORT
};
1.4 设置文本对齐位置
//@{
/**
* Turn on or off the UseBorderAlign option.
* When UseBorderAlign is on, the bounding rectangle is used to align the text,
* which is the proper behavior when using vtkTextRepresentation
*/
vtkSetMacro(UseBorderAlign, vtkTypeBool);
vtkGetMacro(UseBorderAlign, vtkTypeBool);
vtkBooleanMacro(UseBorderAlign, vtkTypeBool);
//@}
//@{
/**
* This method is being deprecated. Use SetJustification and
* SetVerticalJustification in text property instead.
* Set/Get the Alignment point
* if zero (default), the text aligns itself to the bottom left corner
* (which is defined by the PositionCoordinate)
* otherwise the text aligns itself to corner/midpoint or centre
* @verbatim
* 6 7 8
* 3 4 5
* 0 1 2
* @endverbatim
* This is the same as setting the TextProperty's justification.
* Currently TextActor is not oriented around its AlignmentPoint.
*/
void SetAlignmentPoint(int point);
int GetAlignmentPoint();
//@}
1.5 设置文本方向
//@{
/**
* 围绕对齐点逆时针旋转。单位以度为单位,默认为0。
* text属性中的方向旋转纹理图中的文本。它可能不会给你想要的效果。
* Counterclockwise rotation around the Alignment point.
* Units are in degrees and defaults to 0.
* The orientation in the text property rotates the text in the
* texture map. It will proba ly not give you the effect you
* desire.
*/
void SetOrientation(float orientation);
vtkGetMacro(Orientation, float);
//@}
1.6 设置文字属性
//@{
/**
* Set/Get the text property.
*/
virtual void SetTextProperty(vtkTextProperty* p);
vtkGetObjectMacro(TextProperty, vtkTextProperty);
//@}
1.7 获取文字包围盒
/**
* Return the bounding box coordinates of the text in pixels.
* The bbox array is populated with [ xmin, xmax, ymin, ymax ]
* values in that order.
*/
virtual void GetBoundingBox(vtkViewport* vport, double bbox[4]);
/**
* Syntactic sugar to get the size of text instead of the entire bounding box.
*/
virtual void GetSize(vtkViewport* vport, double size[2]);
1.8 设置约束的字体大小
//@{
/**
* 根据设置的目标矩形,计算并设置合适的字体大小。
* 该方法的静态版本也可用于方便其他类(例如,小部件)。
* Set and return the font size required to make this mapper fit in a given
* target rectangle (width x height, in pixels). A static version of the
* method is also available for convenience to other classes (e.g., widgets).
*/
virtual int SetConstrainedFontSize(vtkViewport*, int targetWidth, int targetHeight);
static int SetConstrainedFontSize(vtkTextActor*, vtkViewport*, int targetWidth, int targetHeight);
//@}
/**
* 设置并返回使映射器数组的每个元素适合给定矩形(宽度x高度,以像素为单位)所需的字体大小。
* 此字体大小是适合此约束中最大映射器所需的最小大小。
* Set and return the font size required to make each element of an array
* of mappers fit in a given rectangle (width x height, in pixels). This
* font size is the smallest size that was required to fit the largest
* mapper in this constraint.
*/
static int SetMultipleConstrainedFontSize(vtkViewport*, int targetWidth, int targetHeight,
vtkTextActor** actors, int nbOfActors, int* maxResultingSize);
1.9 启用非线性缩放字体大小
/**
* 启用非线性缩放字体大小。这在与缩放文本结合使用时非常有用。
* 对于小窗口,您希望使用整个缩放文本区域。
* 对于较大的窗口,您需要将字体大小减小一些,以便不使用整个区域。
* 这些值修改计算的字体大小如下:newFontSize = pow(FontSize,指数)*pow(目标,1.0 -指数)
* 通常指 数应该在0.7左右,目标应该在10左右
* Enable non-linear scaling of font sizes. This is useful in combination
* with scaled text. With small windows you want to use the entire scaled
* text area. With larger windows you want to reduce the font size some so
* that the entire area is not used. These values modify the computed font
* size as follows:
* newFontSize = pow(FontSize,exponent)*pow(target,1.0 - exponent)
* typically exponent should be around 0.7 and target should be around 10
*/
virtual void SetNonLinearFontScale(double exponent, int target);
1.10 坐标转化方法
/**这只是在渲染过程中使用的一种简单的坐标转换方法。
* This is just a simple coordinate conversion method used in the render
* process.
*/
void SpecifiedToDisplay(double* pos, vtkViewport* vport, int specified);
/**
* This is just a simple coordinate conversion method used in the render
* process.
*/
void DisplayToSpecified(double* pos, vtkViewport* vport, int specified);
1.11 计算缩放字体比例
/**
* Compute the scale the font should be given the viewport. The result
* is placed in the ScaledTextProperty ivar.
*/
virtual void ComputeScaledFont(vtkViewport* viewport);
//@{
/**
* Get the scaled font. Use ComputeScaledFont to set the scale for a given
* viewport.
*/
vtkGetObjectMacro(ScaledTextProperty, vtkTextProperty);
//@}
/**
* Provide a font scaling based on a viewport. This is the scaling factor
* used when the TextScaleMode is set to VIEWPORT and has been made public for
* other components to use. This scaling assumes that the long dimension of
* the viewport is meant to be 6 inches (a typical width of text in a paper)
* and then resizes based on if that long dimension was 72 DPI.
*/
static float GetFontScale(vtkViewport* viewport);
结论:
感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!
你的赞赏是我的最最最最大的动力(^U^)ノ~YO
文章来源:https://blog.csdn.net/qq_40041064/article/details/135341912
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!