curaengine linux编译,CuraEngine开源程序解读

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

mesh

mesh中主要定义了关于三角形网格三个类和这三个类的一些成员函数,分别是MeshVertex,MeshFace以及Mesh。

全局变量

const int类型的全局变量vertex_meld_distance,其值设定为MM2INT(0.03);

全局函数static inline uint32_t pointHash(const Point3& p)。构造了一个基于vertex_meld_distance的函数,所有在vertex_meld_distance范围内的点都会映射到一个哈希值上。

MeshVertex

MeshVertex类是在网格中使用的顶点类型,其包含了顶点的坐标信息以及跟踪连接到这个点上的面片信息。

成员变量

Point3类型的成员变量p,用于存储顶点的坐标信息;

uint32_t类型的vector容器connected_faces,用于存储连接面的索引列表。

成员函数构造函数。构造函数中只提供Point3类型的参数p用于初始化成员变量p,默认给connected_faces容器预留8个空间大小;

MeshFace

MehsFace类用来表示一个三维模型中的一个三角形面片,面片包含了三个顶点的信息以及三条边所连接的其它三个面片的信息。一个正确的模型同样有可能一条边连接了超过两个面,在这种情况之下,存储在connected_face_index数组中的面片为连接模型外部的面片。

成员变量

int类型的vertex_index[3]数组,用于存储三个顶点的索引,三个顶点按照逆时针排序;

int类型的connected_face_index[3]数组,用于存储连接三个边的另一个面片的索引号,其中connected_face_index[0]对应的面片和当前面片所共享的边是vertex_index[0]和vertex_index[1]所连接形成的边。

Mesh

Mesh类是3D模型最基本的表示类,以MeshFace存储所有面的信息。Mesh类是SettingsBase类的继承类,SettingsBase是设置一些值的基础类,这里可以不做深究。

成员变量

>类型的unordered_map容器vertex_hash_map,用于存储该位置的散列的每个顶点的索引引用,允许快速检索具有相同位置的点。类型的unordered_map容器相较于map容器具有更高的查询效率,采用以哈希表为底层;

AABB类型的成员变量aabb,用于构建整个模型的包围盒;

MeshVertex类型的vector容器vertices,用于存储网格的所有顶点数据;

MeshFace类型的vector容器faces,用于存储网格的所有面片数据;

bool类型的has_disconnected_faces,判定mesh中是否存在断开连接的面;

bool类型的has_overlapping_faces,判定mesh中是否存在交叠的面;

Settings类的对象settings,用于存储基础设定;

string类型的mesh_name,用于存储读取进来的模型名称。

成员函数构造函数。构造函数中不直接输入模型的面片信息,而是对其一些设定值进行初始化,形参为其虚基类SettingsBaseVirtual类所构造对象的指针;

int findIndexOfVertex(const Point3& v)。私有成员函数,用于返回接近该Point的顶点索引,若不存在则新建一个索引并返回;寻找索引时,通过所搜寻点的hash值在vertex_hash_map中寻找,若寻找到同样hash值的存储点,通过判断寻找到的点和所搜寻点之间的距离是否超过设定的全局变量vertex_meld_distance来判断该点是否满足条件,若满足则返回所搜寻点的索引值,若不满足则在vertex_hash_map[hash]中添加一个当前顶点数量的值,在vertices容器中添加该点,并返回vertices.size() - 1;

void addFace(Point3& v0, Point3& v1, Point3& v2)。用于向faces容器中添加面片。首先检测三个点的索引值是否有两个指向同一个值上,若指向同一个值则直接返回;若是一个新的面片,则向faces容器中直接向后添加一个成员,并给这个成员的vertex_index赋值,同时分别对这三个顶点的connected_faces添加该面片索引;

void clear()。用于清除所有数据(清空faces,vertices和vertex_hash_map);

void finish()。用于完成模型connected_faces的设置。完成网格输入之后,首先清除vertex_hash_map容器,因为这个容器不再是必须的而且占据了很大的一部分内存空间。在addFace中已经确定了每个顶点所连接的面片,这里再通过getFaceIdxWithPoints函数确定每个面片上每条边所连接的另一个面片的索引号;

Point3 min() const。用于返回AABB包围盒最小点;

Point3 max() const。用于返回AABB包围盒最大点;

AABB3D getAABB() const。用于返回AABB包围盒;

void expandXY(int64_t offset)。用于拓展AABB包围盒。若offset为正,向外拓展offset;若为负,向内拓展;

void offset(Point3 offset)。用于平移整个模型,包括aabb和所有的顶点;

int getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVertexIdx) const。用于根据当前面片索引以及对应边的顶点索引来确定所连接的另一个面片的索引,当多个面连接相同的边缘时,若连接一条边的面片数量为单数,则说明存在断开连接的面,若为双数则从idx1到idx0查看,返回下一个顶点构成的是一个逆时针面的面片;

MeshGroup

MeshGroup中只定义了一个MeshGroup类,主要用于作为保存一个或者多个mesh。一个MeshGroup中保存的模型都是在一次打印中需要被打印的模型,所以在同一次打印中,只会有一个MeshGroup。

MeshGroup类

MeshGroup类是NoCopy类的继承类,所以不能直接进行拷贝。

成员变量

Mesh类型的vector容器meshes,用于存储多个mesh模型;

Settings类的对象settings,用于基础设定。

成员函数Point3 min() const。用于返回AABB包围盒最小点;

Point3 max() const。用于返回AABB包围盒最大点;

void clear()。对meshes中每个mesh都进行clear;

void finalize()。主要是用于调整mesh的位置。

全局函数

bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const FMatrix3x3& transformation, Settings& object_parent_settings)。从文件中读取网格并将其存储在MeshGroup的meshes当中,其中meshgroup为网格存储位置,filename为文件名,transformation为对该模型所有顶点的变换矩阵,object_parent_settings为父类设置,函数返回是否成功读取面片模型并将其保存于meshgroup当中。该函数通过调用loadMeshSTL_ascii或loadMeshSTL_binary对ASCII格式或二进制格式的STL文件进行读取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python docx库安装_详解python中docx库的安装过程

python中docx库的简介 python-docx包,这是一个很强大的包,可以用来创建docx文档,包含段落、分页符、表格、图片、标题、样式等几乎所有的word文档中能常用的功能都包含了,这个包的主要功能便是用来创建文档,相对来说用…

创新固定资产管理方式:易点易动集成企业微信的全新解决方案

在当今竞争激烈的商业环境中,高效的固定资产管理对于企业的成功至关重要。然而,传统的资产管理方式往往繁琐、容易出错,并且缺乏实时性和准确性。为了解决这些挑战,易点易动与企业微信进行了集成合作,推出了一种全新的…

python删除重复元素_Python-删除列表中重复元素的方法

原博文 2017-12-21 17:07 − 1.set()方法 x [1,2,3,4,5,1] y list(set(x)) print(y) [1, 2, 3, 4, 5] 2. x [b,c,d,b,c,a,a] y {}.fromkeys(x).ke... 相关推荐 2019-09-28 21:13 − Python python是一种跨平台的计算机程序设计语言,是一种面向对象的动态类型语…

linux内核提取ret2usr,Linux内核漏洞利用技术详解 Part 2

前言在上一篇文章中,我们不仅为读者详细介绍了如何搭建环境,还通过一个具体的例子演示了最简单的内核漏洞利用技术:ret2usr。在本文中,我们将逐步启用更多的安全防御机制,即SMEP、KPTI和SMAP,并逐一解释它们…

raid5坏了一块盘怎么办_机械硬盘的坏道处理——屏蔽之

分享一次处理硬盘坏道的经历。打算写的让小白也能照着葫芦画葫芦。机械硬盘的阿喀琉斯之踵无疑是坏道。倘若一块硬盘出现了坏道怎么办?当然是即刻备份资料更换新硬盘。毫无疑问,二手硬盘几乎都是被榨干的状态,活生生地一副论斤卖的样子。当然…

linux 嵌入式 交叉 环境搭建 实验原理,实验三 嵌入式Linux开发环境的搭建

南京邮电大学通达学院实 验 报 告实验 实验三题目 嵌入式Linux开发环境的搭建 课程名称 嵌入式驱动开发实验 学院 专业 班 实验者学号同做者学号 08002210 姓名 毛骏超 同做者学号 08002225 姓名 陈超/ 嵌入式应用开发实验成绩 评定一、实验目的1.掌握嵌入式交叉编译环境的搭建…

insert into select 优化_数据库优化总结

第一部分:SQL语句优化1、尽量避免使用select *,使用具体的字段代替*,只返回使用到的字段。2、尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。SELECT * FROM t WHERE id IN (2,3)SELECT * FROM t1 WHERE usernam…

.npy文件_python——文件读写

一:Python中读写文件的方法1.open()函数open(file,moder,buffering-1,encodingNone,errorsNone,newlineNone,closefdTrue,openerNone)file : 是一个 path-like object,表示将要打开的文件的路径,可以是绝对…

react native loading动画_React高级进阶指南

懒加载React.lazy函数能让你像渲染常规组件一样处理动态引入(的组件)。 Suspense加载指示器为组件做优雅降级。 fallback属性接受任何在组件加载过程中你想展示的 React 元素。const OtherComponent React.lazy(() > import(./OtherComponent));function MyComponent() { r…

在一起计时器_古典计时器简介之一 qqtimer

可持续水文的路子又多了一条。在这一系列古典计时器中,qqtimer的地位有些特殊,因为现在还有不少人使用它,而之后要介绍的其他计时器已经基本没啥人用了。有两位最知名的WR日常练习的计时器都是它。首先是Feliks Zemdegs,虽然他已经…

管理节点连接不上sql节点_质量成本管理:成本控制、成本分析、费用使用流程与节点说明...

关注【本头条号】更多关于制度、流程、体系、岗位、模板、方案、工具、案例、故事、图书、文案、报告、技能、职场等内容,弗布克15年积累免费与您分享!阅读导航→01 质量成本控制流程与节点02 质量成本分析流程与节点03 质量费用使用控制流程与节点质量部…

springmvc工作流程_SpringMVC工作原理

买了好多书,但是没有一本是看完的,这是看完的第一本书,虽然页数不多、技术早就用了老多遍了,还是总结一下吧!一、MVC模式MVC是 model、view、和controller的缩写,分别代表web应用程序中的三种职责&#xff…

sql查找一个范围的值_销售需求丨查找问题

BOSS:茶,那个,什么茶来着?(递过一杯茶...)BOSS:?!!不是这个,我是说那个白茶啊!白茶:......(懵)咋滴…

pandas输出到excel_学Python还不会处理Excel数据?带你用pandas玩转各种数据处理

开场白以前学习 Python 的 pandas 包时,经常到一些 excel 的论坛寻找实战机会。接下来我会陆续把相关案例分享出来,还会把其中的技术要点做详细的讲解。本文要点:使用 xlwings ,如同 vba 一样操作 excel使用 pandas 快速做透视表注…

cadence设计运算放大器_21.比较器的原理与特性,它与运算放大器的本质区别总结归纳...

1.电压比较器的工作原理电压比较器,顾名思义,就是两个输入端的其中一个作为基准,另外一个与基准作比较,输出只存在高电平和低电平两种状态。通过电压比较器,可以将模拟信号转变为数字信号。输入引脚的电位 > -输入引…

插入排序最优_排序专题插入排序

今天开始,我计划用几篇专题来集中练习下有关排序的算法,排序算法是算法中最基础的算法了,所以这部分我们是要尽可能的全都掌握了。排序算法最常见的有如下几种:插入排序(Insertion Sort)选择排序(Selection Sort)希尔排序(Shell S…

c语言设计指导实训,C语言程序设计实训指导

与《c语言程序设计(第2版)》配套,给出所有习题及参考答案。按知识点,精选12个典型实训,给出实训目的与要求、实训内容及实训参考程序。附有自测(考试)样卷及参考答案,供读者自测。提供Turbo C 2.0上机环境介绍及常见的Turbo C 2.0…

python程序代码_python基础二

Python基础-注释的引入注释的分类:<1>单行注释:以#开头&#xff0c;#右边的所有文字当作说明&#xff0c;而不是真正要执行的程序&#xff0c;起辅助说明作用多行注释用三个单引号 ‘’’ 或者三个双引号 “”" 将注释括起来&#xff0c;例如:1、单引号&#xff08;…

电气自动化c语言实践操作论文,项目实践论文,关于独立学院电气工程其自动化专业基于CDIO的实践模式相关参考文献资料-免费论文范文...

导读:本文关于项目实践论文范文,可以做为相关论文参考文献,与写作提纲思路参考。(广州大学松田学院 广东广州 511370)摘 要&#xff1a;独立学院作为培养应用型人才的新生力量,要与地方经济社会发展相衔接,培养满足地方经济社会发展需要的、高素质的应用型人才.如何培养符合广东…

linux里用c实现cat_【案例】用T云做了什么能让企业在工业自动化控制系统行业里实现逆向增长?...

从制造至“智”造&#xff0c;工业正在逐步向自动化、智能化方向深入发展。行业背景&#xff1a;受疫情影响&#xff0c;2020年&#xff0c;上半年雪虐风饕&#xff0c;自动化市场需求下滑&#xff0c;随着后期政策红利推出&#xff0c;市场回暖&#xff0c;上半年的自动化需求…