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

BambuStudio学习笔记:Model

# Model.hpp 核心模型结构说明## 文件概述
该头文件定义了3D打印数据处理的核心数据结构,包含模型对象、体积、实例、材料等关键类。主要功能包括:
- 三维模型数据存储与管理
- 模型变换操作(平移/旋转/缩放)
- 打印参数配置
- 多材料支持
- 支撑结构处理## 核心类结构### Model (顶层模型容器)
```cpp
class Model : public ObjectBase {ModelMaterialMap materials;     // 材料集合ModelObjectPtrs objects;       // 模型对象集合ModelWipeTower wipe_tower;     // 擦料塔配置// ... 其他成员
};

ModelObject (可打印对象)

class ModelObject : public ObjectBase {std::string name;              // 对象名称ModelVolumePtrs volumes;       // 体积组件集合ModelInstancePtrs instances;   // 实例集合ModelConfigObject config;      // 对象级配置// ... 变换操作方法
};

ModelVolume (体积组件)

class ModelVolume : public ObjectBase {enum class ModelVolumeType {MODEL_PART,         // 主体模型NEGATIVE_VOLUME,    // 负空间SUPPORT_ENFORCER,    // 强制支撑SUPPORT_BLOCKER     // 支撑阻挡};TriangleMesh mesh;        // 三角网格数据ModelVolumeType type;     // 体积类型// ... 几何变换方法
};

ModelInstance (对象实例)

class ModelInstance : public ObjectBase {Geometry::Transformation transform;  // 几何变换ModelObject* object;                 // 所属对象// ... 实例操作方法
};

关键功能详解

几何变换系统

// 通用变换参数结构
struct Transformation {Vec3d offset;       // 位移 (mm)Vec3d rotation;     // 旋转角度 (弧度)Vec3d scaling;      // 缩放系数Vec3d mirror;       // 镜像轴
};// 应用变换矩阵示例
void ModelVolume::transform_mesh(TriangleMesh* mesh) {// 应用当前变换到指定网格
}

支撑结构处理

// 支撑点数据结构
struct SupportPoint {Vec3f position;     // 坐标位置float head_diameter; // 支撑头直径
};// 支撑点处理流程
void ModelObject::process_supports() {// 生成支撑结构网格// 应用支撑参数配置
}

打印参数配置

// 分层配置结构
class LayerConfig {double layer_height;    // 层高 (mm)int extruder_id;        // 使用喷头编号double temperature;     // 打印温度
};// 对象级配置继承关系
ModelConfigObject -> ModelConfig -> DynamicPrintConfig

重要枚举类型

体积类型

enum ModelVolumeType {MODEL_PART,         // 主体模型部分NEGATIVE_VOLUME,    // 负空间体积PARAMETER_MODIFIER, // 参数修改器SUPPORT_ENFORCER,   // 强制支撑区域SUPPORT_BLOCKER     // 支撑阻挡区域
};

实例打印状态

enum ModelInstanceEPrintVolumeState {INSIDE,         // 完全在打印床内PARTLY_OUTSIDE, // 部分超出FULLY_OUTSIDE   // 完全超出
};

核心方法速查

模型操作

方法功能
Model::add_object()创建新模型对象
ModelObject::add_volume()添加体积组件
ModelInstance::apply_transform()应用变换矩阵

几何计算

方法描述
bounding_box()计算对象包围盒
convex_hull_2d()生成2D投影凸包
mesh()获取三角网格数据

文件IO

// 3MF文件读写
Model Model::read_from_file(const std::string& filename) {// 解析3MF文件结构// 加载网格数据// 重建对象层次
}

数据结构关系

Model
ModelObject
ModelVolume
ModelInstance
ModelMaterial
TriangleMesh
Transformation

使用示例

创建简单模型

// 初始化模型容器
Model model;// 创建新对象
ModelObject* obj = model.add_object();
obj->name = "Cube";// 添加立方体体积
ModelVolume* vol = obj->add_volume(TriangleMesh::make_cube(10,10,10));
vol->set_type(ModelVolumeType::MODEL_PART);// 添加实例并设置位置
ModelInstance* inst = obj->add_instance();
inst->set_offset(Vec3d(20, 20, 0));

执行模型切割

// 定义切割平面
std::array<Vec3d, 4> plane_points = {...};// 执行切割操作
ModelObjectPtrs cut_objects = original_obj->cut(0, plane_points);
for (auto* obj : cut_objects) {model.add_object(obj);
}

性能注意事项

  1. 大模型处理:使用raw_mesh()获取未变换网格提升计算效率
  2. 内存优化:共享TriangleMesh指针减少内存复制
  3. 批量操作:优先使用transform_mesh()替代逐顶点计算
  4. 缓存机制:利用bounding_box_valid标志避免重复计算
  5. 多线程安全:避免同时修改同一对象的几何属性

相关文章:

BambuStudio学习笔记:Model

# Model.hpp 核心模型结构说明## 文件概述 该头文件定义了3D打印数据处理的核心数据结构&#xff0c;包含模型对象、体积、实例、材料等关键类。主要功能包括&#xff1a; - 三维模型数据存储与管理 - 模型变换操作&#xff08;平移/旋转/缩放&#xff09; - 打印参数配置 - 多…...

Spring (八)AOP-切面编程的使用

目录 实现步骤&#xff1a; 1 导入AOP依赖 2 编写切面Aspect 3 编写通知方法 4 指定切入点表达式 5 测试AOP动态织入 图示&#xff1a; 一 实现步骤&#xff1a; 1 导入AOP依赖 <!-- Spring Boot AOP依赖 --><dependency><groupId>org.springframewor…...

【Go每日一练】构建一个简单的用户信息管理系统

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月7日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;简单的用户信息管理系统2.&#x1f636;‍&#x1f32b;️代码开发3.&#x1f636;‍&a…...

PathRAG:通过图剪枝的方法优化Graph-based RAG的性能方法浅析

PathRAG 也是一种新型 Graph-based RAG 方法&#xff0c;通过检索索引图中的关键关系路径&#xff0c;减少噪声并优化 LLM 提示。其核心创新在于基于流的剪枝算法和路径为基础的提示策略&#xff0c;特别适用于捕捉复杂数据集中的关系。&#xff08;其实可以看做相比GraphRAG假…...

ElementUI 级联选择器el-cascader启用选择任意一级选项,选中后关闭下拉框

1、启用选择任意一级选项 在 el-cascader 标签上加上配置项&#xff1a; :props"{ checkStrictly: true }"例如&#xff1a; <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…...

【软件逆向】QQ 连连看小游戏去广告与一键消除实现

目录 一、背景介绍 二、去广告实现 2.1 分析广告加载流程 2.2 逆向分析广告加载逻辑 2.3 去广告方案 三、一键消除外挂实现 3.1 分析游戏逻辑 3.2 编写外挂插件 3.3 注入外挂&#xff1a; 四、一键消除效果展示 五、额外扩展 一、背景介绍 QQ 连连看是一款经典的休闲…...

vue el-select 省市区三级联动 vue + element-ui使用第三方插件实现省市区三级联动

vue el-select 省市区三级联动 vue使用第三方插件实现省市区三级联动 网上找了好多教程,都是使用el-cascader级联选择器的省市区选择器,但是几乎没有三个单独的el-select的进行关联的三级省市联动组件效果 第一步:先安装省市区element-ui的插件 npm install element-china-a…...

【GPT入门】第8课 大语言模型的自洽性

【GPT入门】第8课 大语言模型的自洽性 1.自洽性概念2.代码&#xff08;观察执行结果&#xff09;3.自洽性核心思想 1.自洽性概念 大模型的自洽性&#xff08;self - consistency&#xff09;是指在推理阶段&#xff0c;大模型通过生成多个答案并选择出现频率最高的那个&#x…...

工程化与框架系列(28)--前端国际化实现

前端国际化实现 &#x1f30d; 引言 前端国际化&#xff08;i18n&#xff09;是现代Web应用中的重要组成部分&#xff0c;它能够让应用支持多语言和多地区的用户使用。本文将深入探讨前端国际化的实现方案和最佳实践&#xff0c;包括文本翻译、日期时间格式化、货币处理等方面…...

【阿里云】操作系统控制台操作体验与性能评测全解析

引言 在现代的云计算环境中&#xff0c;操作系统控制台是进行系统管理和运维的重要工具。它不仅帮助用户高效地管理云端资源&#xff0c;还提供了智能助手、系统诊断、性能观测等功能&#xff0c;能够提升操作系统的使用效率&#xff0c;增强用户的操作体验。本文简要介绍了操…...

面试之《IntersectionObserver的使用》

IntersectionObserver 是一个 Web API&#xff0c;用于异步观察目标元素与其祖先元素或顶级文档视口&#xff08;viewport&#xff09;交叉状态的变化。这在很多场景下非常有用&#xff0c;比如懒加载图片、实现无限滚动加载更多内容等。下面详细介绍它的使用方法。 基本原理 …...

在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践

文章目录 在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践一、下载 Kafka-0.9二、启动 Zookeeper 和 Kafka三、创建 Spring Boot 项目四、引入 kafka 依赖五、移除 Kafka 自动配置六、编写 Kafka 生产者6.1 Kafka配置类6.2 生产者监听类 七、编写Controller发送Kafka八、验证消费…...

【MACOS】用户数据过多

进入下面的路径下找到.Spotlight-V100文件夹 /System/Volumes/Data修改选线 通过终端权限不够 在finder中进行查看然后解锁 然后添加权限 使用代码查看存储数据。 diskutil apfs list...

鸿蒙系统中的持续部署

鸿蒙操作系统&#xff0c;作为一款面向未来的分布式操作系统&#xff0c;旨在为不同的设备提供统一的操作系统平台。它支持多种终端设备&#xff0c;包括但不限于智能手机、平板电脑、智能穿戴设备和物联网&#xff08;IoT&#xff09;设备等&#xff0c;并且能够实现跨平台的无…...

centos linux安装mysql8 重置密码 远程连接

1. 下载并安装 MySQL Yum 仓库 从 MySQL 官方网站下载并安装 Yum 仓库配置文件。 # 下载MySQL 8.0的Yum仓库包 wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm # 安装Yum仓库包 sudo rpm -ivh mysql80-community-release-el7-5.noarch.rpm2. 启…...

几种常见的虚拟环境工具(Virtualenv、Conda、System Interpreter、Pipenv、Poetry)的区别和特点总结

在 PyCharm 中创建虚拟环境是一个非常直接的过程&#xff0c;可以帮助你管理项目依赖&#xff0c;确保不同项目之间的依赖不会冲突。 通过 PyCharm 创建虚拟环境 打开 PyCharm 并选择或创建一个项目。 打开项目设置&#xff1a; 在 Windows/Linux 上&#xff0c;可以通过点击…...

VScode:运行程序停止后,频繁出现终端进程被终止

VScode里面powershell被迫关闭 bug场景排查原因解决办法 bug场景 系统&#xff1a;Windows IDE&#xff1a;Visual Studio Code 停止运行程序后&#xff0c;按向上箭头想要执行上一步命令&#xff0c;忽然终端页面强行关闭&#xff0c;并报错如下&#xff1a; 终端进程 &quo…...

PHP框架加载不上.env文件中的变量

以lumen5.5框架为例&#xff0c;根目录中bootstrap文件夹下的app.php文件中 (new Dotenv\Dotenv(__DIR__./../))->load(); 是读取所有.env中的文件的&#xff0c;这个是正常的&#xff0c;但是在代码中的任何位置或者在config目录下的databases.php里&#xff0c;代码如…...

Linux:基本指令与内涵理解

1.文件操作指令 1.1 ls ls指令用于查看指定层级文件夹下的文件或文件夹 基本格式&#xff1a;ls (选项) (查看层级&#xff09; 其中选项处不写就默认是显示文件名&#xff0c;查看层级默认是当前层级 选项1&#xff1a; -l 作用&#xff1a;将查找文件的详细信息显示出来 我们…...

C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析

一、模式基本概念 1.1 定义与核心思想 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是创建型设计模式的集大成者&#xff0c;它通过提供统一的接口来创建多个相互关联或依赖的对象族&#xff0c;而无需指定具体类。其核心思想体现在两个维度&#xff1a; …...

LINUX系统安装+添加共享目录

一、前言 Windows或mac系统中创建Linux工作环境是基于VMware和SL(Scientific Linux)&#xff0c;下面分别安装二者。 二、VMware软件安装及注册 1、双击VMware安装包 2、点击下一步 3、 勾选接受许可&#xff0c;并点击下一步 4、更改路径&#xff08;建议更改为容易找到的路…...

《UE5_C++多人TPS完整教程》学习笔记34 ——《P35 网络角色(Network Role)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P35 网络角色&#xff08;Network Role&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; Stephe…...

成为git砖家(9): rebase进阶: 拆分commit为多个

问题描述 当一次性 git add 了多个修改点&#xff0c; 并且快速的执行了 git commit 后&#xff0c; 你觉得有点懊恼&#xff1a; 明明可以独立为两次或多次 commit&#xff0c; 揉在一块导致历史记录不太清晰。 比如我在 nn1 这个练手项目中&#xff0c; 最近一次 commit&am…...

pytorch retain_grad vs requires_grad

requires_grad大家都挺熟悉的&#xff0c;因此穿插在retain_grad的例子里进行捎带讲解就行。下面看一个代码片段&#xff1a; import torch# 创建一个标量 tensor&#xff0c;并开启梯度计算 x torch.tensor(2.0, requires_gradTrue)# 中间计算&#xff1a;y 依赖于 x&#x…...

Axure常用变量及使用方法详解

点击下载《Axure常用变量及使用方法详解.pdf》 摘要 Axure RP 作为一款领先的前端原型设计工具&#xff0c;提供了全面的 变量 和 函数 系统&#xff0c;以支持复杂的交互设计和动态内容展示。本文将从专业角度详细解析 Axure 中的 全局变量、中继器数据集变量/函数、元件变量…...

为企业级AI交互系统OpenWebUI集成LDAP用户权限认证(2)

为企业级AI交互系统OpenWebUI集成LDAP用户权限认证(2) 本文介绍如何OpenWebUI系统集成LDAP认证服务,及其用户权限及用户组设置。 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录…...

mac 被禁用docker ui后,如何使用lima虚拟机启动docker

本机macos 安装lima brew install lima创建配置 echo "\\ndynamic:\n big-sur:\n image: docker://docker:git\n linux:\n image: docker.io/limasoftware/ubuntu:20.04 \\n" > ~/.lima/default.yaml启动名叫default的虚拟机 limactl start default进…...

C#实现AES-CBC加密工具类(含完整源码及使用教程)

一、AES-CBC加密应用场景 AES&#xff08;Advanced Encryption Standard&#xff09;作为全球公认的安全加密标准&#xff0c;广泛使用在以下场景&#xff1a; API通信加密&#xff1a;保护HTTP接口传输的敏感数据&#xff08;如身份令牌、支付信息&#xff09;文件安全存储&…...

Unity辅助工具_头部与svn

Unity调用者按钮增加PlaySideButton using QQu; using UnityEditor; using UnityEngine; [InitializeOnLoad] public class PlaySideButton {static PlaySideButton(){UnityEditorToolbar.RightToolbarGUI.Add(OnRightToolbarGUI);UnityEditorToolbar.LeftToolbarGUI.Add(OnLe…...

VBA 数据库同一表的当前行与其他行的主键重复判断实现方案1

目的&#xff0c;判断是否主键重复&#xff0c;不重复则登录新数据&#xff0c;重复则不登录。 定义类型&#xff1a; DataRecord   tableName 表名   rowNumber 行号   columnName 列名   data 数据 想要实现的代码逻辑如下&#xff1a; 模拟数据库的登录过程。假设…...

Pytorch系列教程:可视化Pytorch模型训练过程

深度学习和理解训练过程中的学习和进步机制对于优化性能、诊断欠拟合或过拟合等问题至关重要。将训练过程可视化的过程为学习的动态提供了有价值的见解&#xff0c;使我们能够做出合理的决策。训练进度必须可视化的两种方法是&#xff1a;使用Matplotlib和Tensor Board。在本文…...

CSS伸缩盒模型(弹性盒子)

伸缩盒模型&#xff08;Flexbox&#xff0c;Flexible Box Layout&#xff09;是 CSS 中一种一维布局模型&#xff0c;用于更高效地处理元素的对齐、分布和响应式布局。其核心思想是让容器内的子元素&#xff08;称为“项目”&#xff09;能够灵活地自动调整大小和位置以适应不同…...

C++蓝桥杯基础篇(十一)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来学习C蓝桥杯基础篇&#xff08;十一&#xff09;&#xff0c;学习类&#xff0c;结构体&#xff0c;指针相关知识&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 一、类与结构体 类的定义&#xff1a;在C中&#x…...

版本控制泄露源码 .svn

##相关知识 SVN源码泄露 SVN&#xff08;subversion&#xff09;是源代码版本管理软件&#xff0c;造成 SVN 源代码漏洞的主要原因是管理员操作不规范。“ 在使用 SVN 管理本地代码过程中&#xff0c;会自动生成一个名为 .svn 的隐藏文件夹&#xff0c;其中包含重要的源代码信…...

基于单片机的风速报警装置设计

标题:基于单片机的风速报警装置设计 内容:1.摘要 本设计聚焦于基于单片机的风速报警装置&#xff0c;旨在解决传统风速监测缺乏实时报警功能的问题。采用单片机作为核心控制单元&#xff0c;结合风速传感器采集风速数据。经实验测试&#xff0c;该装置能准确测量 0 - 60m/s 范…...

YOLOv12本地部署教程——42%速度提升,让高效目标检测触手可及

YOLOv12 是“你只看一次”&#xff08;You Only Look Once, YOLO&#xff09;系列的最新版本&#xff0c;于 2025 年 2 月发布。它引入了注意力机制&#xff0c;提升了检测精度&#xff0c;同时保持了高效的实时性能。在保持速度的同时&#xff0c;显著提升了检测精度。例如&am…...

Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测

第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器 OpenWRT项目今年已经20岁了&#xff0c;为了纪念这一时刻&#xff0c;Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi&#xff0c;…...

【算法】经典排序算法介绍+代码示例

排序算法介绍 1&#xff09;冒泡排序 (Bubble Sort)2&#xff09;选择排序&#xff08;Selection Sort&#xff09;3&#xff09;插入排序&#xff08;Insertion Sort&#xff09;4&#xff09;希尔排序&#xff08;Shell Sort&#xff09;5&#xff09;归并排序&#xff08;Me…...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_02带边框和斑马纹的固定表头表格

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

【Linux】线程控制

目录 一、原生线程库&#xff1a; 二、线程控制&#xff1a; 1、线程创建&#xff1a; 2、线程等待&#xff1a; 自定义类型的接收对象&#xff1a; ​编辑 3、线程终止&#xff1a; pthread_exit&#xff1a; pthread_cancel: 4、线程ID&#xff1a; 线程库的底层原…...

pyqt联合designer的运用和设置

PyQt Designer 简介 PyQt Designer 是一个用于创建和设计 PyQt 应用程序用户界面的可视化工具。它允许用户通过拖放方式添加和排列各种控件,如按钮、文本框、滑块等,并设置它们的属性和样式,从而快速构建出美观且功能完整的 UI 界面。 Windows版本:【免费】安装包别管啊啊…...

spring boot3.4.3+MybatisPlus3.5.5+swagger-ui2.7.0

使用 MyBatis-Plus 操作 books 表。我们将实现以下功能&#xff1a; 创建实体类 Book。 创建 Mapper 接口 BookMapper。 创建 Service 层 BookService 和 BookServiceImpl。 创建 Controller 层 BookController。 配置 MyBatis-Plus 和数据库连接。 1. 项目结构 src ├─…...

利用微软的 HTML 应用程序宿主程序的攻击

mshta.exe 是微软的 HTML 应用程序宿主程序&#xff08;Microsoft HTML Application Host&#xff09;&#xff0c;属于 Windows 系统组件。它的核心功能是运行 .hta&#xff08;HTML Application&#xff09;文件&#xff0c;允许通过 HTML、JavaScript、VBScript 等技术创建交…...

【深度学习】读写文件

读写文件 到目前为止&#xff0c;我们讨论了如何处理数据&#xff0c;以及如何构建、训练和测试深度学习模型。 然而&#xff0c;有时我们希望保存训练的模型&#xff0c;以备将来在各种环境中使用&#xff08;比如在部署中进行预测&#xff09;。 此外&#xff0c;当运行一个…...

Bert的使用

一、Data.py # data负责产生两个dataloader from torch.utils.data import DataLoader, Dataset from sklearn.model_selection import train_test_split #给X,Y 和分割比例&#xff0c; 分割出来一个训练集和验证机的X, Y import torchdef read_file(path):data []label …...

Unity使用UGUI制作无限滑动列表

原理参照上一篇使用NGUI的制作无限滑动列表的文章 Unity 使用NGUI制作无限滑动列表_unity 滑动列表很多物体-CSDN博客 准备工作&#xff1a; 新建一个空物体命名为LoopList&#xff0c;并调整其大小&#xff0c; 并增加Scroll Rect组件&#xff08;用于滑动&#xff09;、Re…...

ThinkPHP6用户登录系统的全过程

ThinkPHP6用户登录系统的全过程涉及请求处理、数据传输、路由分发、控制器逻辑、模型验证及中间件协作等多个模块的交互。详细的过程解析如下&#xff1a; 1. 前端请求与路由分发 前端发起请求&#xff1a;用户在前端页面&#xff08;如Vue组件或HTML表单&#xff09;输入用户…...

C++全栈聊天项目(2) 单例模式封装Http管理者

完善注册类界面 先在注册类构造函数里添加lineEdit的模式为密码模式 ui->lineEdit_Passwd->setEchoMode(QLineEdit::Password); ui->lineEdit_Confirm->setEchoMode(QLineEdit::Password);我们在注册界面的ui里添加一个widget&#xff0c;widget内部包含一个tip居…...

【鸿蒙开发】OpenHarmony调测工具hdc使用教程(设备开发者)

00. 目录 文章目录 00. 目录01. OpenHarmony概述02. hdc简介03. hdc获取04. option相关的命令05. 查询设备列表的命令06. 服务进程相关命令07. 网络相关的命令08. 文件相关的命令09. 应用相关的命令10. 调试相关的命令11. 常见问题12. 附录 01. OpenHarmony概述 OpenHarmony是…...

ORACLE EBS数据库RELINK方式搭建克隆环境

ORACLE EBS系统的数据库&#xff0c;一般都安装了很多特定功能的小补丁来解决特定的BUG&#xff1b;因此对于已经安装好的系统&#xff0c;想要克隆一套测试环境、搭建一个新的备机做测试等&#xff0c;如果按照生产环境标准&#xff0c;则需要安装大量补丁&#xff0c;带来很大…...