文章目录
- 1. visual模块的继承关系
- 2. 基类CommonVisual的方法
- 2.1 获取对象信息
- 2.1.1 对象本身信息
- 2.1.2 对象的查找表
- 2.1.3 对象标量范围
- 2.1.4 对象缩略图
- 2.2 呈现对象
- 2.2.1 在窗口显示
- 1.2.2 对象可见性
- 2.2.3 对象颜色
- 2.2.4 对象透明度
- 2.3 添加标度条
- 2.3.1 2D标度条
- 2.3.2 3D标度条
- 2.4 未实装或阉割的功能
- 2.4.1 鼠标操作性
- 2.4.2 事件
- 2.4.3 相机设置
1. visual模块的继承关系
visual子模块包含了管理对象及其属性的可视化和外观的基类。
这些类可以单独实例化,但是没有用处。一般是由子类的实例调用它们封装的方法。
以下是继承自这个模块的类的子类:
创建一个球体和立方体,用于后续测试:
import vedo
# 半径为0.7的球体
s = vedo.Sphere(r=0.7)
# 立方体
c = vedo.Cube()
# 使用窗口展示图形,N表示渲染空间的数目,size控制窗口大小
vedo.show([s, c], N=2, size=(800, 300))
后面使用c
或s
来表示这些类或其子类实例化的对象。
2. 基类CommonVisual的方法
CommonVisual
封装的可视化相关的函数和属性,可以用来管理所有对象。
2.1 获取对象信息
2.1.1 对象本身信息
c.print()
打印对象本身
s.print()
c.print()
2.1.2 对象的查找表
c.LUT
以numpy格式返回对象的查找表。
查找表是VTK中用于将标量和颜色对应的映射表。
会返回一个列表,列表的长度表示设定的颜色数,列表中每个元素是颜色的rgb值和透明度值,范围在[0, 1]
。
# 含有红、绿、黄3个颜色的LUT值,透明度值都是1(不透明)
[[1. 0. 0. 1.]
[0. 1. 0. 1.]
[1. 1. 0. 1.]]
LUT
是内部的颜色映射器的数组展示,虽然可以使用数组直接给LUT
赋值,但是没有意义。一般在使用cmap
或build_lut
时,会在内部自动改写LUT。
2.1.3 对象标量范围
c.scalar_range()
设置或获取对象可视化的标量范围。
跟LUT
一样,可以设置,但是没实用。一般用来获取标量范围,然后据此进行相关操作。
2.1.4 对象缩略图
c.thumbnail()
创建对象的缩略图,并以数组的形式返回。
缩略图相当于展示窗口的截图,返回的数组表示这个截图的每个点的rgb颜色值。
具体参数:
zoom=1.25
,指定窗口缩放大小。size=(200, 200)
,指定截图的宽、高像素值。bg='white'
,指定物体空间的背景颜色。azimuth=0
,截图时相机旋转的方位角。elevation=0
,截图时相机提升的高度。axes=False
,截图是否带坐标系。
// 生成大小为5x5像素的缩略图数组
print(s.thumbnail(size=5, 5))
[[[255 255 255]
[223 223 223]
[196 192 193]
[255 255 255]
[255 255 255]]
...
[[255 255 255]
[223 223 223]
[191 191 191]
[255 255 255]
[255 255 255]]]
展示用的原图,和生成的缩略图转为像素图之后的图片:
2.2 呈现对象
2.2.1 在窗口显示
c.show(**options)
创建一个Plotter
类的实例,或者使用现存的最后一个实例来显示单个对象。
这个方法是vedo.plotter.show
的快捷方式。如果有超过一个对象需要显示,就得使用show(c1, c2, ..., options)
。
返回使用的Plotter
类的实例。
1.2.2 对象可见性
c.on()
打开对象的可见性。c.off()
关掉对象的可见性。c.toggle()
切换对象的可见性。
2.2.3 对象颜色
c.color(col, alpha=None, vmin=None, vmax=None)
设置一个颜色,或沿着标度值变化的一组颜色。
参数说明:
col
,颜色或颜色组;alpha
,列表,用于指定沿着标量范围变化的透明度;vmin
,指定标量范围的最小值;vmax
,指定标量范围的最大值;
目前只有PointsVisual
子类继承了这个方法,并且实现时只能直接指定一个颜色和透明度,无法设置颜色组。
2.2.4 对象透明度
c.alpha(alpha, vmin=None, vmax=None)
沿着标度值范围分配一系列的透明度。
当alpha=(0.0, 0.3, 0.9, 1)
,且标量范围在-10到150时,所有单元格的标量值,在接近-10的都会变透明,在1/4范围处的透明度是0.3,值接近150时不透明。
设置alpha=[(-5, 0), (35, 0.4), (123, 0.9)]
时,单元格值低于-5是透明的,高于123时是90%的不透明度。
只有PointsVisual
子类和ImageVisual
子类继承了这个方法,且只能指定或获取透明度,无法设置渐变的透明度。
2.3 添加标度条
2.3.1 2D标度条
c.add_scalarbar()
为对象附加一个2D的标度条。
2D标度条是画在窗口上的,不会随物体转动。
只有在对象颜色映射器不为空时,才能成功创建2D标度条,表示标量值对应的颜色变化。
具体参数如下:
title=""
,标度条的标题;pos=(0.775, 0.05)
,标度条左下角的位置坐标。也可以是[0, 1]
范围内的一对(x, y)
坐标,分别表示左下角和右上角的位置。title_yoffset=15
,标题和颜色标度条在垂直方向上的偏移值。size=(80, 400)
,像素值(宽, 高)
,表示标量条的尺寸。font_size=12
,标题和数值标签使用的字体大小。nlabels=None
,数值标签的数目。c=None
,标度条文字的颜色。horizontal=False
,是否水平放置标量条。use_alpha=True
,颜色栏本身的透明度。label_format=':6.3g'
数字标签的格式字符串,C格式。
# 按球体的y坐标的大小设定不同的颜色
s.cmap(["red", "yellow", "green"], s.vertices[:,1])
print(s.LUT)
s.add_scalarbar()
s.show()
输出LUT
[[0.99607843 0.11764706 0.12156863 1. ]
[1. 1. 0.21176471 1. ]
[0.01568627 0.49803922 0.0627451 1. ]]
展示图:
2.3.2 3D标度条
c.add_scalarbar3d()
与对象关联一个3D的标度条,并加到场景中。可以使用c.scalarbar
访问这个标度条。
具体参数如下:
title=""
,标度条的标题;pos=None
,参数未说明size=(0, 0)
,标度条的(厚度, 长度);title_font=""
,标题字体title_xoffset==-1.2
,标题和颜色标度条之间的水平间距;title_yoffset=0.0
,标题和颜色标度条之间的垂直间距;title_size=1.5
,参数未说明title_rotation=0.0
,标题的旋转角度;nlabels=9
,数字标签的个数;label_font=""
,标签的字体;label_size=1
,标签的缩放比例;label_offset=0.375
,数字标签和刻度之间的间隔;label_rotation=0
,标签旋转的角度;label_format=""
,浮点值和整值标签的格式;italic=0
,标签数字斜体;c=None
,标签数字颜色;draw_box=True
,在颜色条周围绘制边框;above_text=None
,参数未说明below_text=None
,参数未说明nan_text="NaN"
,参数未说明categories=None
,制作类别标度条,输入列表的格式为[value, color, alpha, textlabel]
;
2.4 未实装或阉割的功能
2.4.1 鼠标操作性
c.pickable(value=None)
设置或访问对象的可选取性(是否可以被鼠标选择)。c.draggable(value=None)
设置或访问对象的可拖拽性。
这两个值可以设置和获取成功,但是展示时没有实际效果。
2.4.2 事件
c.add_observer(event_name, func, priority)
添加一个回调函数,事件触发时被调用。c.invoke_event(event_name)
主动触发事件。
通过add_observer
添加事件,绑定回调函数后,可以通过invoke_event
触发这个事件。
事件名称可以任意填。但是它会发出警告:事件名称不合法,应该用VTK规定的事件名。
VTK中事件名是根据触发条件起的,如:KeyPress、MouseMove。但是即使填这些名字,在演示的窗口无法通过鼠标和键盘的操作触发事件。
2.4.3 相机设置
c.use_bounds(value=None)
设置当前相机在重置时是否忽略对象边界。
变换相机位置后,使用plotter.reset_camera
,在展示窗口无实际效果。