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

Trimesh介绍及基本使用

Trimesh介绍及基本使用

Trimesh是一个纯Python 工具库(支持3.7版本以上),用于加载和使用三角形Mesh网格,支持多种常见的三维数据格式,如二进制/文本格式的STL、Wavefront OBJ、二进制/文本格式的PLY、GLTF/GLB 2.0、3MF、XAML、3DXML等输入及输出。

Trimesh自带可视化接口,同时支持jupyter-notebook

在这里插入图片描述

conda安装Trimesh

conda install -c conda-forge trimesh

官方介绍 https://trimesh.org/install.html

Trimesh的基本使用

# trimesh
import trimesh
import numpy as np

1、三维模型加载模型并显示

Import meshes from binary/ASCII STL, Wavefront OBJ, ASCII OFF, binary/ASCII PLY, GLTF/GLB 2.0, 3MF, XAML, 3DXML, etc.
Export meshes as binary STL, binary PLY, ASCII OFF, OBJ, GLTF/GLB 2.0, COLLADA, etc.

# 加载3D模型, stl/obj
mesh = trimesh.load_mesh('assets/T520.obj')
mesh.show()

在这里插入图片描述

2、获取模型的数据

1)顶点数据

# 顶点数值
mesh.vertices, len(mesh.vertices)
(TrackedArray([[ 7.69345e-01, -1.68524e-01, -5.17700e-03],[ 7.95310e-01, -1.30030e-01, -1.49920e-02],[ 7.96241e-01, -2.50368e-01,  7.82000e-04],[ 7.89202e-01, -2.47317e-01, -1.20380e-02],
...[-7.28633e-01, -4.08450e-02, -2.48030e-02],[-7.75898e-01, -7.34740e-02, -1.63650e-02]]),252)

2)三角面片数据

# 具体的三角面片数值
mesh.triangles, mesh.triangles.shape
(array([[[ 0.706239, -0.098673, -0.017216],[ 0.691089, -0.012151, -0.031851],[ 0.632243, -0.153526, -0.011587]],[[-0.072159, -0.088825, -0.011398],[-0.103937, -0.111302, -0.012344],[-0.11107 , -0.110316, -0.043356]],[[ 0.22723 , -0.144808, -0.022788],[ 0.174921, -0.039651, -0.027571],[ 0.160237, -0.11074 ,  0.001933]],...,[[-0.188532, -0.037858, -0.043866],[-0.156491,  0.026905, -0.063014],[-0.249915,  0.023218, -0.060589]],[[ 0.769345, -0.168524, -0.005177],[ 0.79531 , -0.13003 , -0.014992],[ 0.764495, -0.065438, -0.018574]],[[ 0.764495, -0.065438, -0.018574],[ 0.716619, -0.036048, -0.035477],[ 0.758556, -0.016973, -0.031903]]]),(500, 3, 3))

3)获取三角面的索引

# 三角面索引
mesh.faces, mesh.faces.shape
(TrackedArray([[  8,   7,  15],[172, 192, 194],[ 53,  58,  65],...,[207, 204, 205],[  0,   1,   4],[  4,   5,   6]]),(500, 3))

4)获取法向

# 法向
mesh.face_normals, mesh.face_normals.shape
(array([[-0.0430527 ,  0.15929062,  0.98629253],[ 0.57338015, -0.80401884, -0.15744496],[ 0.44854726,  0.26199037,  0.85449775],...,[ 0.01400081,  0.27712567,  0.96073167],[ 0.16915266,  0.13484063,  0.97632238],[ 0.18972766, -0.23867821, -0.95238444]]),(500, 3))

5)面角度

mesh.face_angles, mesh.face_angles.shape
(array([[2.0388429 , 0.56233828, 0.54041148],[0.60782991, 1.76058396, 0.77317879],[0.72379323, 0.73242608, 1.68537335],...,[1.21296721, 1.08268034, 0.84594511],[0.63579868, 2.10158121, 0.40421277],[0.86144328, 0.98109206, 1.29905732]]),(500, 3))

6)面片面积

mesh.area_faces, mesh.area_faces.shape
(array([0.00366692, 0.00060866, 0.00307942, 0.00190347, 0.00148136,0.00144005, 0.00038739, 0.00108227, 0.00081048, 0.00068454,0.00144096, 0.00436192, 0.00092929, 0.00109818, 0.00200931,0.00293418, 0.00155164, 0.00069498, 0.00211061, 0.00245476,
...0.00041811, 0.00288816, 0.00024923, 0.00102368, 0.00124401,0.00203138, 0.00155559, 0.0017429 , 0.00130824, 0.00059137,0.00061473, 0.00168217, 0.00308738, 0.00146638, 0.00112652]),(500,))

7)总面积、总体积、最大最小点(aabb包围盒)、实体数量

# 边界包围盒
mesh.area, mesh.volume,mesh.bounds,mesh.body_count
(1.170476162025276,0.018943660462617348,array([[-0.797947, -0.333213, -0.095076],[ 0.796241,  0.442033,  0.285582]]),1)

3、导出模型

导出模型
mesh.export('output/export-models.stl')

相关文章:

  • 【notes2】并发,IO,内存
  • EndNote 21 for Mac v21.3 文献管理软件安装
  • 微信小程序建议录音机
  • 数组 (java)
  • 一文读懂LLM API应用开发基础(万字长文)
  • 注意 llamaIndex 中 Chroma 的坑!
  • Go 三色标记法:一种高效的垃圾回收策略
  • 搭建Vue的环境
  • 数据库精选题(二)(引言+关系代数)
  • SFF1006A-ASEMI无人机专用SFF1006A
  • AGV机器人的调度开发分析(1)- 内核中的路线规划
  • 商超智能守护:AI监控技术在零售安全中的应用
  • Rust:warp 编写 RESTful API 的示例及原理分析
  • SLAM Paper Reading和代码解析
  • Git分支的状态存储——stash命令的详细用法
  • 【Leetcode】104. 二叉树的最大深度
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 2019.2.20 c++ 知识梳理
  • Android Studio:GIT提交项目到远程仓库
  • Create React App 使用
  • css的样式优先级
  • docker-consul
  • JavaScript设计模式系列一:工厂模式
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Logstash 参考指南(目录)
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 二维平面内的碰撞检测【一】
  • 规范化安全开发 KOA 手脚架
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端相关框架总和
  • 容器服务kubernetes弹性伸缩高级用法
  • 我与Jetbrains的这些年
  • FaaS 的简单实践
  • HanLP分词命名实体提取详解
  • kubernetes资源对象--ingress
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 通过调用文摘列表API获取文摘
  • ​什么是bug?bug的源头在哪里?
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.2 T2 寻找道路
  • (Charles)如何抓取手机http的报文
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)Activiti-modeler中文支持
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (已解决)vscode如何选择python解释器
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)Linux网络编程入门