Python的3D可视化库【vedo】模块简介和功能概览
文章目录
vedo是Python实现的一个用于辅助科学研究的3D可视化库,旨在为相关科研工作者提供到手即用的3D建模工具。
vedo基于VTK
和numpy
实现,可以用来构建3D对象、点云,并进行科学分析。
参考:vedo官方文档
1. vedo和它支持的功能简介
vedo是用于3D对象和点云的科学分析的python模块。基于VTK和numpy实现。
1.1 安装vedo
使用pip安装vedo最新版本:
pip install vedo
安装完成后,新建py文件,输入下述代码进行测试:
import vedo
vedo.Cone().show(axes=1).close()
运行该文件,弹窗会显示3D场景如图:
弹窗中可以通过鼠标左键拖动,显示图形不同方位;
使用右键拖动或滚轮可以缩放图形;
使用鼠标中键可以平移图形;
Ctrl+鼠标左键,可以旋转图形。
1.2 命令行接口
vedo库包含了命令行接口,安装后可以直接在命令行使用。
查看vedo的命令行帮助:
vedo --help
1.3 导出3D文件
在弹出的3D场景窗口,按E
键,可以把当前的3D场景保存为一个普通的numpy文件。按F
键可以导出为html网页。
numpy文件保存了场景中的图形信息,可以快速地被vedo读取(参考vedo的file_id
模块)。
html文件能在浏览器打开3D场景进行交互。
1.4 文件格式转换
使用命令行转换3D文件的格式:
# 将obj格式转为ply格式
vedo --convert bunny.obj --to ply
2. vedo模块功能概览
2.1 绘制和渲染
visual
管理可视化、对象及其属性的显示的基类
类或方法 | 说明 |
---|---|
CommonVisual |
管理所有对象的公共可见项的类 |
PointsVisual |
管理点对象的可见项的类 |
VolumeVisual |
管理体积对象的可见项的类 |
MeshVisual |
管理体积对象的可见项的类 |
ImageVisual |
管理所有对象的公共可见项的类 |
Actor2D |
对vtkActor2D 的封装 |
LightKit |
光工具套件,包括3种光源,主光灯、补光灯、头灯 |
plotter
3D渲染
类或方法 | 说明 |
---|---|
Plotter |
管理对象的主类 |
show |
在空白页创建Plotter 实例,并展示给定的对象 |
close |
关闭最后创建的Plotter |
colors
定义和显示颜色
类或方法 | 说明 |
---|---|
printc |
使用各种颜色输出内容到终端 |
printd |
输出关于环境的调试信息。局部变量会输出它们的当前值。 |
get_color |
将其它格式的颜色转换为(r,g,b) 格式 |
get_color_name |
找最接近的颜色的名称 |
color_map |
将数值映射到色阶 |
build_palette |
通过在HSV或RGB空间线性插值生成N个颜色 |
build_lut |
在查找表中生成颜色 |
dolfin
FEniCS/Dolfin库的支持
类或方法 | 说明 |
---|---|
plot |
绘制对象。输入的对象除了Mesh 、Volume 外,还可以是dolfin.Mesh 、dolfin.MeshFunction 、dolfin.Expression 、dolfin.Function |
2.2 图形数据管理
mesh
多边形网格
类或方法 | 说明 |
---|---|
Mesh |
创建一个由vedo.PointCloud 派生的Mesh 的实例 |
pointcloud
点云
类或方法 | 说明 |
---|---|
Points |
点云 |
Point |
创建一个简单的点 |
CellCenters |
在任意类型对象的单元格的中心生成Points |
merge |
输入对象组合,创建新的Mesh 或Points 。类似Assembly ,但是merge会让输入的对象称为一个单独的实体 |
fit_line |
通过点拟合线 |
fit_circle |
通过3D点拟合圆 |
fit_plane |
一组点拟合一个平面 |
fit_sphere |
一组点拟合一个球体 |
pca_ellipse |
创建包含指定百分比的点的2D椭圆,PCA用来计算椭圆方向 |
pca_ellipsoid |
创建包含指定百分比的点的椭球体,PCA用来计算椭圆方向 |
shapes
简单或复杂的几何图形
类或方法 | 说明 |
---|---|
Maker |
生成标记。一般和Glyph 联用 |
Line |
构造两个点之间的线段 |
DashedLine |
构造两个点之间的虚线。建议使用Line.pattern() 。 |
RoundedLine |
生成指定宽度、穿过一系列点的2D线段,线段的边缘是圆的 |
Tube |
沿着点集定义的线段,创建一个管 |
Tubes |
在Lines 对象的周围创建管 |
ThickTube |
沿着线创建带厚度的管 |
Lines |
从两个列表的对应点之间创建线段 |
Spline |
找到穿过点集的B样条曲线。 |
KSpline |
返回准确穿过所有点的Kochanek样条曲线 |
CSpline |
返回准确穿过所有点的Cardinal样条曲线 |
Bezier |
生成贝塞尔曲线,连接第一个和最后一个点。 |
Brace |
创建花括号 |
NormalLines |
创建Glyph ,在单元格中心或网格顶点显示法线 |
Ribbon |
联结两条线段,生成它们之间的平面 |
Arrow |
指定起点、终点和尺寸,创建3D箭头。 |
Arrows |
从两个列表的对应点之间创建箭头 |
Arrow2D |
创建2D箭头 |
Arrows2D |
从两个列表的对应点之间创建2D箭头 |
FlatArrow |
通过联结两条线段,在3D空间创建2D箭头 |
Polygon |
在xy平面创建多边形 |
Triangle |
根据空间中的3个点创建三角形 |
Rectangle |
在xy平面创建矩形 |
Disc |
创建2D圆环 |
Circle |
创建圆 |
GeoCircle |
创建圆,其形状像是投影在地图上,越靠近两极就越扁 |
Arc |
在两点之间创建圆弧 |
Star |
创建2D五角星 |
Star3D |
创建3D五角星 |
Cross3D |
创建3D十字形 |
IcoSphere |
创建由一致的三角形网格组成的球体 |
Sphere |
创建球体 |
Spheres |
创建大量的球体 |
Earth |
创建表示地球的带纹理的网格 |
Ellipsoid |
创建3D椭圆体 |
Grid |
均匀或不均匀的2D格子 |
TessellatedBox |
创建多个四元组构成的立方体网格 |
Plane |
创建平面 |
Box |
创建指定大小的框 |
Cube |
创建立方体 |
Spring |
创建弹簧模型 |
Cylinder |
指定高度和半径,创建圆柱体 |
Cone |
指定高度和半径,创建圆锥体 |
Pyramid |
创建椎体 |
Torus |
创建圆环 |
Paraboloid |
创建抛物线体 |
Hyperboloid |
创建双曲线体 |
TextBase |
文本的基类,不可实例化 |
Text3D |
创建表示文本的3D多边形网格 |
Text2D |
创建2D文本 |
CornerAnnotation |
使用2D文本在窗口角落加注释 |
Latex |
渲染Latex文本和公式 |
Glyph |
网格之间的公共顶点定义为glyph ,可以控制其方向和颜色 |
Tensors |
张量,其几何学表示在一个区域或一组点上定义 |
ParametricShape |
用于演示的内置图形集 |
ConvexHull |
由点集创建2D或3D的凸面包 |
VedoLogo |
创建3D的vedo图标 |
volume
使用体素
类或方法 | 说明 |
---|---|
Volume |
使用体素数据集 |
grids
四面体网格
类或方法 | 说明 |
---|---|
UnstructuredGrid |
对vtk的UnstructuredGrid 对象的支持 |
TetMesh |
描述四面体网格的类 |
RectilinearGrid |
创建直线网格的数据集,其中的边都平行于坐标轴 |
StructuredGrid |
创建结构化网格的数据集,其中的边不需要和坐标轴平行 |
image
普通2D图片
类或方法 | 说明 |
---|---|
Image |
用于在3D场景展示2D图片的类 |
assembly
图形对象组合
类或方法 | 说明 |
---|---|
Group |
创建包含通用对象组 |
Assembly |
组合多个对象,将其视为单个的新对象 |
procrustes_alignment |
使用procrustes 算法对齐若干网格对象,放在Assembly 中返回 |
pyplot
高级绘制功能
类或方法 | 说明 |
---|---|
Figure |
图形的格式化类 |
Histogram1D |
1D直方图 |
Histogram2D |
2D直方图 |
PlotXY |
在x和y坐标系进行绘制的图形类 |
PlotBars |
绘制柱状图的图形类 |
plot |
绘制2D的线图或点图,变量x对应变量y |
histogram |
根据1D和2D数组生成直方图 |
fit |
带有参数误差和误差带的多项式拟合。支持x和y的误差带。 |
pie_chart |
圆环图或饼图 |
violin |
小提琴图 |
whisker |
从一维数据集创建箱形图中间的条带 |
streamplot |
生成矢量场域的流线图 |
matrix |
生成矩阵,或一个带标签的2D颜色编码图 |
DirectedGraph |
有向图。由节点和连接节点的边组成的图,节点不需要位置信息,其位置只由相互之间的联系决定。 |
core
为不同的vedo对象提供功能的基类
类或方法 | 说明 |
---|---|
DataArrayHelper |
仅内部使用。协助类管理与点、面相关的数据 |
CommonAlgorithms |
公共方法 |
PointAlgorithms |
点云的方法 |
VolumeAlgorithms |
立体对象的方法 |
transformations
线性或非线性变换
类或方法 | 说明 |
---|---|
LinearTransform |
线性变换 |
NonLinearTransform |
非线性变换 |
TransformInterpolator |
在线性变换之间插值 |
spher2cart |
球形坐标转换为笛卡尔坐标 |
cart2spher |
笛卡尔坐标转换为球形坐标 |
cart2cyl |
笛卡尔坐标转换为圆柱坐标 |
cyl2cart |
圆柱坐标转换为笛卡尔坐标 |
cyl2spher |
圆柱坐标转换为球形坐标 |
spher2cyl |
球形坐标转换为圆柱坐标 |
cart2pol |
笛卡尔坐标转换为极坐标 |
pol2cart |
极坐标转换为笛卡尔坐标 |
笛卡尔坐标系是直角坐标系和斜坐标系的统称。
2.3 附加功能和配置
addons
添加附带的轴、图例、光源等
类或方法 | 说明 |
---|---|
ScalarBar |
2D标度条 |
ScalarBar3D |
3D标度条 |
Slider2D |
2D滑块 |
Slider3D |
3D滑块 |
Icon |
添加图标网格 |
LegendBox |
2D图例框 |
Light |
光源 |
Axes |
自定义轴 |
RendererFrame |
渲染框线 |
Ruler2D |
2D标尺 |
Ruler3D |
3D标尺 |
RulerAxes |
标尺轴 |
DistanceTool |
测距工具 |
DrawingWidget SplineTool |
曲线工具 |
Goniometer |
角度计 |
ButtonWidget Button |
按钮 |
Flagpost |
描述性标记 |
ProgressBarWidget |
进度条 |
BoxCutter |
立方体切割控件 |
PlaneCutter |
平面切割控件 |
SphereCutter |
球体切割控件 |
applications
可交互的功能
类或方法 | 说明 |
---|---|
Browser |
通过一个滑块查看一系列的vedo对象 |
IsosurfaceBrowser |
生成由滑块控制的体积等值面 |
FreeHandCutPlotter |
编辑网格的工具 |
RayCastPlotter |
使用光线投射做立体渲染 |
Slicer2DPlotter |
面向相机的一个切片,可以任意朝向 |
Slicer3DPlotter |
创建带有切面的渲染窗口 |
Slicer3DTwinPlotter |
创建两个并行的带有3D切片器的立体图形 |
MorphPlotter |
带有3个渲染窗口的绘制器,分别表示源、目标和扭曲的网格 |
SplinePlotter |
可以交互式的画曲线的绘制器 |
AnimationPlayer |
带有播放/暂停、快进/后退和滑块功能的绘制器 |
file_io
读入和导出
类或方法 | 说明 |
---|---|
load |
从文件或链接导入vedo对象 |
read |
从文件读取vedo对象 |
download |
从URL检索对象,存到本地,返回本地路径 |
gunzip |
解压.gz 文件到临时文件,返回临时文件的路径 |
loadStructuredPoints |
从文件导入vtkStructuredPoints 对象 |
loadStructuredGrid |
从文件导入vtkStructuredGrid 对象 |
write |
将对象存到文件。支持的文件格式:vtk、vti、ply、obj、stl、byu、vtp、vti、mhd、xyz、xml、tif、png、bmp |
save |
将对象存到文件 |
export_window |
把渲染场景导出到HTML、X3D或Numpy文件 |
import_window |
从Numpy的NPZ文件导入整个场景 |
load_obj |
从OBJ文件导入网格对象集 |
screenshot |
保存当前渲染窗口的截图 |
ask |
在命令行问问题,返回字符串格式的回答。 |
Video |
从某个渲染窗口生成视频 |
utils
公用工具
类或方法 | 说明 |
---|---|
OperationNode |
用于跟踪操作 |
ProgressBar |
在终端打印进度条的类 |
progressbar |
在终端打印进度条的方法 |
Minimizer |
使用Nelder-Mead算法的函数最小值查找器 |
geometry |
使用vtkGeometryFilter 。用于从任意类型的数据集中提取几何图形 |
is_sequence |
检查输入对象是否可迭代 |
lin_interpolate |
把rangeX 范围内的变量x 线性插入rangeY 范围 |
vector |
返回表示向量的3D numpy数组 |
mag |
获取向量或向量组的长度 |
mag2 |
获取向量或向量组长度的平方 |
versor |
返回单位向量 |
precision |
返回以指定精度表示的值的字符串 |
round_to_digit |
把实数舍入到指定有效位数 |
point_in_triangle |
判断一个点是否在另外三个点组成的三角形内 |
point_line_distance |
计算一个点到另外两个点连线的距离 |
closest |
返回给定的点和点集中距离最近的点 |
grep |
过滤文件中以特定标志开头的行 |
make_bands |
把列表中的值分到等值的波段中。 |
pack_spheres |
把球体打包到边界框中 |
humansort |
以人更期望的方式对列表进行排序,就地修改原列表 |
print_histogram |
在终端打印直方图 |
print_inheritance_tree |
打印类的继承树 |
camera_from_quaternion |
定义带有特定方向的vtkCamera |
camera_from_neuroglancer |
从neuroglancer状态字典定义vtkCamera |
camera_from_dict |
从字典定义vtkCamera |
camera_to_dict |
把vtkCamera 转为字典 |
oriented_camera |
生成指向特定方向的vtkCamera 对象,有确定的顶部方向,设置回退。 |
vedo2trimesh |
把vedo.mesh.Mesh 对象转为Trimesh.Mesh 对象 |
trimesh2vedo |
把Trimesh.Mesh 对象转为vedo.mesh.Mesh 或vedo.Assembly 对象 |
vedo2meshlab |
把vedo.mesh.Mesh 对象转为Meshlab对象 |
meshlab2vedo |
把Meshlab对象转为vedo.mesh.Mesh 对象 |
vedo2open3d |
把vedo.mesh.Mesh 对象转为open3d.geometry.TriangleMesh 格式 |
open3d2vedo |
把open3d.geometry.TriangleMesh 转为vedo.mesh.Mesh 对象 |
vtk2numpy |
把vtkDataArray 、vtkIdList 或vtTransform 转为numpy数组 |
numpy2vtk |
把numpy数组转为vtkDataArray |
get_uv |
由平面上的点x和它对应的uv坐标,求平面上另一点p的UV纹理坐标 |
andrews_curves |
计算给定数据的Andrews曲线。 |
interactor_modes
自定义交互模式
类或方法 | 说明 |
---|---|
MousePan |
通过拖动鼠标,移动拍摄场景 |
FlyOverSurface |
浏览某个切面 |
BlenderStyle |
使用Blender默认的按键绑定创建交互模式 |
setting
改变全局行为和风格的设置
类或方法 | 说明 |
---|---|
Settings |
全局行为和风格的一般设置 |
3. 模块类的继承关系
3.1 core、visual、volume
volume
visual
core
Volume
VolumeVisual
PointsVisual
ImageVisual
CommonVisual
MeshVisual
Actor2D
PointAlgorithms
VolumeAlgorithms
CommonAlgorithms
3.2 grids
grids
TetMesh
UnstructuredGrid
RectilinearGrid
StructuredGrid
core.PointAlgorithms
visual.MeshVisual
3.3 pointcloud
pointcloud
CellCenters
Points
visual.PointsVisual
core.PointAlgorithms
3.4 mesh
mesh
Mesh
visual.MeshVisual
pointcloud.Points
3.5 shapes
shapes
Arc
Arrow
Arrow2D
Brace
ConvexHull
Cross3D
Cylinder
DashedLine
Disc
Earth
Ellipsoid
Grid
Hyperboloid
IcoSphere
Lines
NormalLines
Paraboloid
ParametricShape
Plane
Rectangle
RoundedLine
Sphere
Spheres
Spring
Star
Star3D
Tensors
TessellatedBox
Torus
Triangle
Tube
Tubes
Cube
Box
Pyramid
Cone
Arrows
Arrows2D
Glyph
Bezier
CSpline
KSpline
Spline
Line
Circle
GeoCircle
Polygon
FlatArrow
Ribbon
CornerAnnotation
Text3D
TextBase
Text2D
mesh.Mesh
visual.Actor2D
3.6 assembly
assembly
Assembly
Group
visual.CommonVisual
3.7 addons
addons
SplineTool
Button
LegendBox
Slider2D
Slider3D
BoxCutter
DrawingWidget
Icon
PlaneCutter
SphereCutter
DistanceTool
RendererFrame
Ruler2D
ProgressBarWidget
Flagpost
ButtonWidget
assembly.Group
shapes.Text2D
shapes.TextBase
3.8 applications
applications
plotter
Browser
IsosurfaceBrowser
FreeHandCutPlotter
RayCastPlotter
Slicer2DPlotter
Slicer3DPlotter
Slicer3DTwinPlotter
MorphPlotter
SplinePlotter
AnimationPlayer
Plotter
以上是vedo库的各个模块概况和模块继承关系。后续将按照这些模块对vedo的功能做整理。
更多关于数据可视化的内容参考:Python数据可视化笔记
作者:兔子的洋葱圈