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文件进行读取。

curaengine linux编译,CuraEngine开源程序解读相关推荐

  1. linux游戏编译,Linux编译安装开源3D赛车游戏Vdrift

    Linux编译安装开源3D赛车游戏Vdrift,跟大家分享 首先,去http://vdrift.net/ 下载源代码包,我下载的version是2009-6-15 然后解压vdrift-2009-06 ...

  2. curaengine linux编译,Cura源码在Ubuntu15.04上编译脚本(成功)

    Cura是著名的3D打印切片和控制软件.新的版本采用Qt和Python进行了重构,界面变化也非常大,目前还在开发中,运行问题还有不少.这里介绍如何从源代码进行Cura的编译,可以抢先体验新版的界面设计 ...

  3. linux编译有趣c程序,12个有趣的C语言问答(详解)

    12个有趣的C语言问答(详解) 1 gets()方法 Q:下面的代码有一个被隐藏的问题,你能找到它吗? 1 #include 2 3 int main(void) 4 { 5    char buff ...

  4. linux 编译链接过程,编译程序 一:linux程序编译过程(一)-编译和链接

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  5. 如何在Windows下使用Linux系统来编译和运行程序?

    很多开发人员都有这样的疑问:自己平时是在Windows下面办公的,而自己编写的程序的运行环境又是Linux的,如何从Windows切换到Linux呢?是不是要专门到Linux机器上去编写代码呢? 实际 ...

  6. linux怎么用gcc运行程序设计,linux应用程序设计--GCC程序编译

    GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...

  7. centos linux编译c,紧急提醒!Linux是如何编译C语言程序文件的?CentOS 8的gcc使用方法介绍...

    一句话告诉你gcc怎么编译C文件 执行命令 gcc Tristone.c  -o Tristone 解释:"Tristone.C"Tristone可执行文件编译,编译完成后&quo ...

  8. linux如何编译wine,利用winelib编译一个可在linux下运行的程序

    利用winelib编译一个可在linux下运行的程序 只是想既可以使用linux的api,又可以使用windows的api #include #include #include #include in ...

  9. Linux下C/C++程序编译链接加载过程中的常见问题及解决方法

    Linux下C/C++程序编译链接加载过程中的常见问题及解决方法 1 头文件包含的问题 报错信息 该错误通常发生在编译时,常见报错信息如下: run.cpp:2:10: fatal error: dl ...

最新文章

  1. 经验 | Pytorch还是Tensorflow?英伟达工程师帮你总结了
  2. 从0到1:CTFer成长之路
  3. FPGA之道(43)编写纯净的组合或时序逻辑
  4. LeetCode 75. 颜色分类(Sort Colors)
  5. 计算机辅助药物合成投什么期刊,中国药物化学杂志审稿快吗
  6. java 迪杰斯特拉_Java 实现Dikstra迪杰斯特拉算法 关于单源顶点最短路径问题的求解...
  7. 注册docker hub账号
  8. Json格式类的转换相关代码--转载
  9. 第三季-第17课-信号量同步编程
  10. 图像处理-绘制直方图
  11. xshell 无法定位输入点_机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划...
  12. 信道编码与matlab仿真 刘东华,【网安学术】交织技术对信道编码的性能影响研究...
  13. 中国知名科幻网站列表
  14. Python 基础 - Day 1 Assignment - Three tier menu 三级菜单
  15. 基于R的FP树fp growth 关联数据挖掘技术在煤矿隐患管理
  16. POJ 2942 圆桌骑士
  17. C语言string转int
  18. linux打地鼠游戏代码,JavaScript实现打地鼠小游戏
  19. lut及3D LUT Mac调色预设如何导入并应用?关于fcpx/PR/AE/PS/LR/达芬奇lut预设导入及使用方法完整版介绍!
  20. 微信小程序设计weui框架

热门文章

  1. 手把手带你玩转Tensorflow 物体检测 API (3)——训练模型
  2. 手把手带你玩转Tensorflow 物体检测 API (2)——数据准备
  3. axios跨域携带cookie_vue 本地调试跨域---带cookies(axios)
  4. Bootstrap模态框居中显示
  5. 如何发布.Net MVC 网站项目(攻略集锦)
  6. Linux版本JDK1.8下载与安装
  7. 字符串的模式匹配--BF算法KMP算法
  8. 多线程java 银行_Java 多线程 之 银行ATM实例
  9. mybatis3 oracle,Mybatis3中對oracle的批量插入
  10. win7装mysql一直未响应_求助啊 WIN7下安装mysql出问题 老是说未响应~!!