ActiViz学习点滴(六)——显示文字(2D & 3D)

在之前的程序中加入2D文字显示程序段

            vtkTextActor textActor = vtkTextActor.New();

            //public class vtkActor2D : vtkProp
            //vtkActor2D - 绘制二维数据的Actor
            //vtkActor2D类似于vtkActor,但它用于二维图像和注释。
            //vtkActor2D有一个位置,但不使用类似vtkActor的变换矩阵

            //(有关定位vtkActor2D的信息,请参阅超类vtkProp)。
            //vtkActor2D具有对执行渲染的vtkMapper2D对象的引用。   

            //

            //public class vtkTextActor : vtkActor2D         
            //vtkTextActor-显示文本的角色。按比例还是不按比例
            //vtkTextActor可用于将文本注释放置到窗口中。
            //当TextScaleMode为NONE时,文本为固定字体,

            //操作与vtkPolyDataMapper2D/vtkActor2D对相同。
            //当TextScaleMode为VIEWPORT时,字体会调整大小,

            //以便相对于渲染它的VIEWPORT保持一致的大小。
            //当TextScaleMode为PROP时,字体会调整大小,使文本适合由位置1和2坐标定义的框。
            //此类替换了不推荐使用的vtkScaledTextActor类,

            //并且此类可以充当vtkTextMapper/vtkActor2D对的方便包装器。
            //通过与此Actor关联的vtkTextProperty设置文本属性。

            //

            //public static vtkTextActor New();
            //在视图坐标系中使用矩形实例化对象。


            textActor.GetTextProperty().SetFontSize(30);
            //public virtual vtkTextProperty GetTextProperty();
            //获取文本属性          
            //public class vtkTextProperty : vtkObject
            //vtkTextProperty-表示文本属性。
            //vtkTextProperty是表示文本属性的对象。
            //可以设置的主要属性有颜色、不透明度、字体大小、

            //字体水平和垂直对齐、粗体/斜体/阴影样式。          
            //public virtual void SetFontSize(int _arg);
            //设置字体大小,以点为单位

            textActor.SetDisplayPosition(50,30);
            //设置道具在2D显示坐标系中的位置。
            textActor.GetTextProperty().SetColor(1, 0, 1);
            //设置文本颜色
            textActor.SetInput("ActiViz");
            //设置要显示的文本字符串。“\n”被识别为回车/换行符(行分隔符)。
            //字符必须采用ISO-8859-1编码。底层映射器的便捷方法

            textActor.GetTextProperty().SetBold(1);
            //启用/禁用文本粗体显示。
            textActor.GetTextProperty().SetItalic(1);
            //启用/禁用文本斜体。
            textActor.GetTextProperty().SetShadow(1);
            //启用/禁用文本阴影。

            VTKrenderer.AddActor(textActor);

程序运行结果如下,

        (1)vtkTextActor对象不支持中文输入。

        (2)SetDisplayPosition()方法使用的是Display坐标,参数为像素,表示的是输出文本的左下角坐标。

        (3)二维文字不随View坐标即Camera一起运动。

修改以上程序,增加显示3D文字的程序段

            vtkVectorText text3D = new vtkVectorText();
            //创建多边形文本
            text3D.SetText("VTK");
            //设置要绘制的文本。

            vtkPolyDataMapper text3DMapper = vtkPolyDataMapper.New();
            text3DMapper.SetInputConnection(text3D.GetOutputPort());

            vtkActor text3DActor = new vtkActor();
            text3DActor.SetMapper(text3DMapper);
            text3DActor.SetScale(1, 1, 1);                   
            //设定Actor的比例。在X、Y和Z轴上独立执行缩放。零是非法的,将用一代替。
            text3DActor.SetPosition(1, 0, 0);                   
            //设置道具在3D世界坐标系中的位置。(文字左下角坐标)
            text3DActor.GetProperty().SetColor(0.0, 0.0, 0.0);      

            VTKrenderer.AddActor(text3DActor);   

程序执行结果如下:

        1.vtkVectorText类不支持中文输入。

        2.vtkVectorText类的vtkActor对象(三维文字)会随视点变化

以上程序当使用鼠标控制三维物体旋转时,三维文字“VTK”也会随之旋转,如果希望不论视点如何变换,都能看到文字的正面,那就要用到“告示板”技术了。所谓“告示板”,就是在三维控件中三维物体使用一个固定的面,面向视点,当视角变化时,该面也对应发生旋转,始终面向视点。VTK封装了vtkFollower类,可以简便的实现告示板效果。修改以上三维文本显示程序如下,其中数据源与映射部分程序没有变化,Actor部分程序需要修改

            vtkFollower text3DActor = new vtkFollower();
            //vtkFollower-始终面对摄影机的vtkActor的子类
            //vtkFollower是vtkActor的一个子类,它始终面向其指定的摄影机。
            //更具体地说,它不会改变其位置或比例,但会不断更新其方向,

            //使其正面朝上并面向摄影机。这通常用于场景中的文本标签。
            //所有可以对Actor进行的调整也将对vtkFollower生效。

            text3DActor.SetMapper(text3DMapper);
            text3DActor.SetScale(1, 1, 1);                   
            text3DActor.SetPosition(1, 0, 0);                   
            text3DActor.GetProperty().SetColor(0.0, 0.0, 0.0);
            text3DActor.SetCamera(VTKrenderer.GetActiveCamera());
            //将相机设置为跟随。如果没有设置,那么vtkFollower将不知道跟随谁。

            VTKrenderer.AddActor(text3DActor);

运行修改后的程序,黑色文本“VTK”始终面向摄像机

修改以上程序中3D文本设置语句,可以加入换行符,以输入多行文本。但文本在3D世界坐标系中的位置貌似是以第一行文本左下角坐标为准

text3D.SetText("VTK\r\nActiViz");

程序运行结果如下:

还可以旋转3D文本,增加以下旋转语句

            text3DActor.SetPosition(1, 0, 0);

            text3DActor.SetOrigin(0, 0, 0);
            //设置3D道具的原点。这是发生所有旋转的点。
            text3DActor.RotateZ(90);

程序运行结果如下,注意,使用SetOrigin()方法设置的原点不是3D世界坐标,而是相对于文本位置的坐标(前面使用SetPosition()方法设置的位置坐标)

 例如,我将旋转点设置语句修改如下

            text3DActor.SetPosition(1, 0, 0);

            text3DActor.SetOrigin(4, 0, 0);

程序执行结果如下

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值