当前位置: 首页 > news >正文

Python的3D可视化库【vedo】2-5 (plotter模块) 坐标转换、场景导出、添加控件

文章目录

  • 4 Plotter类的方法
    • 4.7 屏幕和场景中的坐标点转换
      • 4.7.1 屏幕坐标转为世界坐标
      • 4.7.2 世界坐标转为屏幕坐标
      • 4.7.3 屏幕坐标取颜色
    • 4.8 导出
      • 4.8.1 导出2D图片
      • 4.8.2 导出3D文件
    • 4.9 添加控件
      • 4.9.1 添加内嵌子窗口
      • 4.9.2 添加选择区
      • 4.9.3 添加比例尺
      • 4.9.4 为对象添加弹出提示
      • 4.9.4 悬浮时显示对象说明
      • 4.9.5 添加`addons`模块的附件


vedo是Python实现的一个用于辅助科学研究的3D可视化库。vedo的plotter模块是管理对象和控制3D渲染的模块。
plotter.Plotter实例可以用于显示3D图形对象、控制渲染器行为、操控相机、创建事件以及导出3D数据。几乎所有关于3D图形的操作,都是在Plotter渲染的窗口进行的。

参考:vedo官方文档


4 Plotter类的方法

按照功能把Plotter的方法分组整理,前面已经把主要的方法整理完了,剩下的是一些辅助方法,分为转换坐标、场景导出、添加附件三类。

4.7 屏幕和场景中的坐标点转换

有的方法需要以3D世界坐标系中的坐标作为参数,也有一些方法需要以屏幕坐标为参数。
这里提供了两种坐标互相转换的方法。

4.7.1 屏幕坐标转为世界坐标

plt.compute_world_coordinate()
把屏幕上的2D点转换为渲染场景中的3D点坐标。参数如下:

  • pos2D,2D屏幕坐标点;
  • at=None,渲染器序号;
  • objs=(),欲放置该点的网格对象列表;
  • bounds=(),指定边界框;
  • offset=None,指定偏移值;
  • pixeltol=None,屏幕容差;
  • worldtol=None,世界坐标容差;

4.7.2 世界坐标转为屏幕坐标

plt.compute_screen_coordinates(obj, full_window=False)
给定当前渲染器或整个窗口中的3D点,找到它的屏幕像素坐标。
obj是网格对象时,会计算其所有顶点坐标在屏幕上的位置。
obj也可以是三维坐标元组组成的序列。

c = vedo.Cube()
plt = vedo.Plotter()
# 将对象的顶点转为屏幕位置
p1 = plt.compute_screen_coordinates(c)
# 将指定的3维坐标点转为屏幕位置
p2 = plt.compute_screen_coordinates([(1, 1, 1), (2, 2, 2)])

上述的两个方法可以填超出屏幕大小或是超出窗口大小的坐标。

4.7.3 屏幕坐标取颜色

plt.color_picker(xy, verbose=False)
指定屏幕上的坐标位置,提取像素点的颜色,返回RGB格式的颜色。
选取的点在渲染窗口区域之外,返回None。
verbose为真时,会输出更详细的信息。

plt = vedo.Plotter()
p = plt.color_picker([200, 100], verbose=True)
print(p)

color_picker


4.8 导出

4.8.1 导出2D图片

plt.screenshot(filename='screenshot.png', scale=1, asarray=False)
对Plotter窗口截图。
scale为整数,设置图片的像素大小倍率。
asarray为真时,不生成图片,而是以numpy数组的格式返回。

c = vedo.Cube()
plt = vedo.Plotter()
plt.show(c, vedo.Text2D("scale=2", s=3), interactive=False)
plt.screenshot("kkk2.jpg", scale=2)
arr = plt.screenshot(asarray=True)
print(arr)
plt.interactive()

数组输出结果是

[[[255 255 255][255 255 255][255 255 255]...[255 255 255][255 255 255][255 255 255]]...[[255 255 255][255 255 255][255 255 255]...[255 255 255][255 255 255][255 255 255]]]

plt.toimage(scale=1)
从当前渲染器窗口生成一个Image对象。

4.8.2 导出3D文件

plt.export(filename='scene.npz', binary=False)
把场景导出为HTML、X3D或numpy文件,文件格式在filename参数中指定后缀即可。

  • HTML文件可以直接在浏览器渲染。
  • X3D文件(后缀x3d)可以被常用的3D建模软件兼容。
  • numpy文件(后缀npz)是Python独有的,体积小,可以快速读取。

4.9 添加控件

4.9.1 添加内嵌子窗口

plt.add_inset(\*objects, \*\*options)
往渲染器添加一个可拖动的嵌入空间。

  • at=None,渲染器编号;
  • pos=0,嵌入框的初始位置。范围1-4,分别表示窗格的左上、右上、左下、右下。
    也可以填(x,y)元组,x、y范围0-1,表示宽和高占渲染窗格大小的百分比。
  • size=0.1,方形嵌入空间占窗格大小的百分比;
  • draggable=True,为真时该子渲染控件可以被拖动;
  • c="lb",嵌入框在被拖动时的颜色;
c = vedo.Cube(pos=(1, 0, 0))
s = vedo.Sphere(pos=(-1, 0, 0), res=10)
plt = vedo.Plotter(bg="lb")
# 子窗格显示立方体
plt.add_inset(c)
plt.show(c, s)

子窗口中的立方体会与主场景中的立方体同步旋转。
inset

4.9.2 添加选择区

plt.pick_area(pos1, pos2, at=None)
由两个2D屏幕坐标点确定一个方框,选中其内的所有对象。
返回一个Mesh对象,带有可见的视图区。常用来用来选择场景中的对象。

c = vedo.Cube(pos=(1, 0, 0))
s = vedo.Sphere(pos=(-1, 0, 0), res=10)
plt = vedo.Plotter()
plt.show(c, s, axes=1, interactive=False)
pa = plt.pick_area([400, 400], [800, 800])
plt.add(pa)
plt.interactive()

要先展示对象,然后创建和添加选择区。否则会出现预料外的结果。
pick_area

4.9.3 添加比例尺

plt.add_scale_indicator()
添加一个比例尺。只在平行投影模式可用。

  • pos=(0.7, 0.05),在屏幕上的位置,以比例值表示;
  • s=0.02,文本的尺寸;
  • length=2,线的长度;
  • lw=4,线宽;
  • c="k1",颜色;
  • alpha=1,透明度;
  • units="",表示单位的字符串;
  • gap=0.05,线和文本的间隔;

比例尺下面的数值会随着图像的缩放自动变化数值。
scale

4.9.4 为对象添加弹出提示

plt.add_hint()
鼠标悬浮到某个对象上时,创建一个弹出消息。

add_hint(None)可以禁用所有弹出消息,add_hint(obj, False)可以禁用指定对象的弹出消息。

参数如下:

  • objMeshPoints的实例;
  • text="",消息内容;
  • c="k",消息文字颜色;
  • bg="yellow9",消息底色;
  • font="Calco",消息字体;
  • size=18,消息字号;
  • justify=0,对齐方式;
  • angle=0,消息文字逆时针旋转的角度;
  • delay=250,消息弹出延时多少毫秒;
c = vedo.Cube()
plt = vedo.Plotter(size=(900, 900))
plt.add_hint(c, "Another Cube hint.", c="r", angle=90, size=32)
plt.show(c)

hint

4.9.4 悬浮时显示对象说明

plt.add_hover_legend()
鼠标移到到任意对象上时,显示该对象的说明文字。
参数如下:

  • at=None,渲染器编号;
  • c=None,文字颜色;默认从黑色或白色中自动选择。
  • pos="bottom-left",文字位置;
  • font="Calco",文字字体;
  • s=0.75,文字缩放;
  • bg="auto",文本框的颜色;
  • alpha=0.1,文本框的透明度;
  • maxlength=24,每行允许的最大字符数;
  • use_info=False,可视化obj.info的内容;
c = vedo.Cube(pos=(1, 0, 0))
s = vedo.Sphere(pos=(-1, 0, 0), res=10)
plt = vedo.Plotter()
plt.add_hover_legend(s=1.75)
plt.show(c, s)

legend

4.9.5 添加addons模块的附件

addons模块包含了各种用于标示和操控的附件,Plotter的以下8个方法都是调用的addons模块的对应方法,具体参数也一样,后续看到这个模块时详述。
plt.add_slider()
添加一个vedo.addons.Slider2D对象。
plt.add_slider3d()
添加一个3D滑块控件。
plt.add_button()
在渲染窗口添加按钮。
plt.add_spline_tool()
为当前Plotter实例添加一个曲线工具。
曲线工具上的节点可以鼠标拖动,点击这条曲线可以添加一个额外的点。选中点后按del键可以移除该点。
plt.add_icon()
在渲染器上添加一个嵌入式图标的网格对象。
plt.add_global_axes()
在场景中绘制轴。
plt.add_legend_box()
在右上角添加图例。
plt.add_renderer_frame()
为渲染器子窗口添加边框。


以上是Plotter类中进行坐标转换、场景导出和添加控件的方法。

更多关于数据可视化的内容参考:Python数据可视化笔记

相关文章:

Python的3D可视化库【vedo】2-5 (plotter模块) 坐标转换、场景导出、添加控件

文章目录 4 Plotter类的方法4.7 屏幕和场景中的坐标点转换4.7.1 屏幕坐标转为世界坐标4.7.2 世界坐标转为屏幕坐标4.7.3 屏幕坐标取颜色 4.8 导出4.8.1 导出2D图片4.8.2 导出3D文件 4.9 添加控件4.9.1 添加内嵌子窗口4.9.2 添加选择区4.9.3 添加比例尺4.9.4 为对象添加弹出提示…...

【VUE】13、安装nrm管理多个npm源

nrm(npm registry manager)是一个 npm 源管理器,它允许用户快速地在不同的 npm 源之间进行切换,以提高包管理的速度和效率。以下是对 nrm 使用的详细介绍: 1、安装nrm 在使用 nrm 之前,需要先确保已经安装…...

【SQL/MySQL 如何使用三种触发器】SQL语句实例演示

触发器介绍 – 触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。 – 使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只…...

Docker容器五种网络驱动模式详解

Docker 网络用于在容器之间以及容器与外部网络之间提供通信功能。它允许容器在隔离的网络环境中运行,同时也能根据需要与其他容器或外部网络进行交互。通过使用网络驱动,Docker 可以创建不同类型的网络,以满足各种应用场景的需求。 传统上&am…...

netfilter简介及流程图

Netfilter 是 Linux 内核中用于网络包过滤和操作的框架,由 Rusty Russell 于1998年创立,旨在改进旧的 ipchains 和 ipfwadm 实现。它采用模块化设计,具有良好可扩展性,并在2000年3月合并进Linux 2.3.x内核版本。 Netfilter的主要…...

Vue 前端代码规范

在 Vue 前端开发中,遵循代码规范可以提高代码的可读性、可维护性和团队协作效率。以下是一些详细的 Vue 前端代码规范,涵盖了多个方面: ### 1. **项目结构** - **目录结构**:- src/ 目录下应包含 components/、views/、store/、router/、ass…...

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…...

js常用方法之: 预览大图(uniapp原生方法封装)

方法: //预览图片 pic可传单个图片地址字符串 或 图片数组(带index) previewPic: function(pic, index) {if (!pic) return;if (index undefined) {let array [];array.push(pic);uni.previewImage({urls: array,current: array[0]});} else {uni.previewImage({urls: pic,…...

python 高级用法

1、推导列表 ans [ x for x in range(6)] print(ans)ans [ x for x in range(6) if x > 2] print(ans)ans [ x*y for x in range(6) if x > 2 for y in range(6) if y < 3] print(ans) 2、map 函数 a list(map(list,"abc")) print(a) b list(map(ch…...

TISAX认证最新消息

一、TISAX认证概述 TISAX&#xff08;Trusted Information Security Assessment Exchange&#xff09;认证是由德国汽车工业协会&#xff08;VDA&#xff09;主导开发的一种信息安全评估标准。该认证旨在确保汽车供应链中的信息安全&#xff0c;帮助汽车产业链中的企业保护其敏…...

Python中所有子图标签Legend显示详解

在数据可视化中&#xff0c;图例&#xff08;legend&#xff09;是一个非常重要的元素&#xff0c;它能够帮助读者理解图表中不同元素的含义。特别是在使用Python进行可视化时&#xff0c;matplotlib库是一个非常强大的工具&#xff0c;能够轻松创建包含多个子图的图表&#xf…...

python脚本中使用git命令

python脚本中使用git命令 一、背景 在做项目输入文件的版本管理的时候,我发现我需要用到库上面的文件来作为版本管理比较的输入,通常情况下,我是先根据tag将两个版本的文件拉取到本地,然后放进我的工程里在运行脚本来完成版本的比较,但是我发现这样其实很麻烦,所以就想着…...

本地maven项目打包部署到maven远程私库

目的&#xff1a;在自己的maven项目中&#xff0c;要把当前maven项目部署到maven私库&#xff0c;供其他人引入依赖使用。 首先要确保你当前能访问到你的私库&#xff0c;能拉私库的maven依赖即可。 maven部署命令&#xff1a; mvn deploy:deploy-file -Dmaven.test.skiptrue -…...

自己搭建专属AI:Llama大模型私有化部署

前言 AI新时代&#xff0c;提高了生产力且能帮助用户快速解答问题&#xff0c;现在用的比较多的是Openai、Claude&#xff0c;为了保证个人隐私数据&#xff0c;所以尝试本地&#xff08;Mac M3&#xff09;搭建Llama模型进行沟通。 Gpt4all 安装比较简单&#xff0c;根据 G…...

[免费]SpringBoot公司财务管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBoot公司财务管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBoot公司财务管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息化技术&…...

5G 模组 RG500Q常用AT命令

5G 模组 RG500Q常用AT命令 5G 模组 RG500Q常用AT命令 at ATQNWPREFCFG\"mode_pref\",nr5g && sleep 1 at ATQNWPREFCFG\"nr5g_band\",79 && sleep 1 at atqnwlock\"commo…...

【YOLO 项目实战】(11)YOLO8 数据集与模型训练

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与检测 【YOLO 项目实战】&#xff08;10&#xff09;YOLO8 环境配置与推理检测 【YOLO 项目实战】&#xff08;11&#xff09;YOLO8 数据…...

基于matlab的单目相机标定

链接&#xff1a; 单目相机标定&#xff08;使用Matlab&#xff09; 用Matlab对单目相机参数的标定步骤&#xff08;保姆级教程&#xff09; 1.准备代码 调用摄像头代码&#xff08;用于测试摄像头是否可用&#xff09;&#xff1a; #https://blog.csdn.net/qq_37759113/art…...

DB-GPT 智谱在线模型配置

LLM_MODELzhipu_proxyllm PROXY_SERVER_URLhttps://open.bigmodel.cn/api/paas/v4/chat/completions ZHIPU_MODEL_VERSIONglm-4 ZHIPU_PROXY_API_KEY70e8ec7113882ff5478fcecaa47522479.ExY2LyjcvWmqrTAf...

Navicat 17 功能简介 | SQL 美化

SQL美化 本期&#xff0c;我们将深入挖掘 Navicat 的实用的SQL代码美化功能。你只需简单地点击“SQL 美化”按钮&#xff0c;即可轻松完成 SQL 的格式化。 随着 17 版本的发布&#xff0c;Navicat 也带来了众多的新特性&#xff0c;包括兼容更多数据库、全新的模型设计、可视化…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...