Python的3D可视化库【vedo】模块简介和功能概览

文章目录

  • 1. vedo和它支持的功能简介
  • 1.1 安装vedo
  • 1.2 命令行接口
  • 1.3 导出3D文件
  • 1.4 文件格式转换
  • 2. vedo模块功能概览
  • 2.1 绘制和渲染
  • `visual` 管理可视化、对象及其属性的显示的基类
  • `plotter` 3D渲染
  • `colors` 定义和显示颜色
  • `dolfin` FEniCS/Dolfin库的支持
  • 2.2 图形数据管理
  • `mesh` 多边形网格
  • `pointcloud` 点云
  • `shapes` 简单或复杂的几何图形
  • `volume` 使用体素
  • `grids` 四面体网格
  • `image` 普通2D图片
  • `assembly` 图形对象组合
  • `pyplot` 高级绘制功能
  • `core` 为不同的vedo对象提供功能的基类
  • `transformations` 线性或非线性变换
  • 2.3 附加功能和配置
  • `addons` 添加附带的轴、图例、光源等
  • `applications` 可交互的功能
  • `file_io` 读入和导出
  • `utils` 公用工具
  • `interactor_modes` 自定义交互模式
  • `setting` 改变全局行为和风格的设置
  • 3. 模块类的继承关系
  • 3.1 core、visual、volume
  • 3.2 grids
  • 3.3 pointcloud
  • 3.4 mesh
  • 3.5 shapes
  • 3.6 assembly
  • 3.7 addons
  • 3.8 applications

  • vedo是Python实现的一个用于辅助科学研究的3D可视化库,旨在为相关科研工作者提供到手即用的3D建模工具。
    vedo基于VTKnumpy实现,可以用来构建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 绘制对象。输入的对象除了MeshVolume外,还可以是dolfin.Meshdolfin.MeshFunctiondolfin.Expressiondolfin.Function

    2.2 图形数据管理

    mesh 多边形网格

    类或方法 说明
    Mesh 创建一个由vedo.PointCloud派生的Mesh的实例

    pointcloud 点云

    类或方法 说明
    Points 点云
    Point 创建一个简单的点
    CellCenters 在任意类型对象的单元格的中心生成Points
    merge 输入对象组合,创建新的MeshPoints。类似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.Meshvedo.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 vtkDataArrayvtkIdListvtTransform转为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数据可视化笔记

    作者:兔子的洋葱圈

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python的3D可视化库【vedo】模块简介和功能概览

    发表回复