概述- 出来混总是要还的,这里不得不开始介绍底层最无聊的类。
点类和矩阵类1.Point3 类(定义在 intpoint.h)- 该类定义了点得三维坐标,坐标值是三个 int32 类型,x y z
- 定义加、减、数乘、数除 d、点积、相等、不等 方法,不讲。
- int32_t max() //返回 x y z 中最大值
- bool testLength(int32_t len) //顶点距离原点值不能大于 lenth
- int64_t vSize2() const //离原点距离的平方
- int32_t vSize() const //离原点距离
复制代码 2.IntPoint 类(intpoint.h) 和 Point- 这个类是用在 ClipperLib 中的。Clipperlib 处理二维封闭图形。
- 因此有两个变量 x 和 y。
- 该类方法基本与 Point3 一样。
- INLINE int angle(const Point& p) //返回与 x 正半轴夹角,角度制
- INLINE Point crossZ(const Point& p0) //绕原点逆时针旋转 90 度
- {
- return Point(-p0.Y, p0.X);
- }
复制代码 3.PointMatrix 类(intpoint.h)
A.成员变量 matrix[ 4].是一个二维矩阵。
4.默认初始化单位阵,
- PointMatrix(double rotation) //对单位阵旋转一定角度。
- Point apply(const Point p) const //点 p 左乘矩阵
- Point unapply(const Point p) const //点 p 右乘矩阵
复制代码 5.FPoint3 类(floatpoint.h) 基本与 Point3 完全一样,用 float 类型
- inline FPoint3 normalized()//正则化,单位化
复制代码- FPoint3 cross(const FPoint3& p) //未知
- {
- return FPoint3(
- y*p.z-z*p.y,
- z*p.x-x*p.z,
- x*p.y-y*p.x);
- }
复制代码 6.FMatrix3x3 类(floatpoint.h) 7.vSize2f 函数
- INLINE float vSize2f(const Point& p0) //返回 p0 的距离平方
复制代码 8.vSize2 函数
- INLINE float vSize2(const Point& p0) //返回 p0 的距离
复制代码 9.vSizeMM 函数 +返回 mm 单位,默认是微米。
时间类- Timekeeper(gettime.h)
- 只有 starttime 这个变量,
- restart()方法重启定时器,返回所用时间。
- TimeEstimatecalculator 类(timeEstimate.h)
- 定义打印点所处位置
- 记录打印机参数。
- 方法
A.setPosition(Position newPos)
设置打印位置
B.reset()
清空打印位置
C.void plan(Position newPos, double feedRate)
对新位置点,新的进料速度进行配置
D.double TimeEstimateCalculator::calculate()
返回运动时间
E.具体实现的代码还有很多看不懂,很多是计算速度,加速度的,并无任何卵用。
注 :recalculate_tranpezoids 方法有笔误
- for(unsigned int n=0; n<blocks.size(); n--) //TODO: 有问题
复制代码
配置类1.SettingConfig- 直接从 json 文件 json 读取配置的类,Single setting data.有以下成员变量,跟 json 文件项一一对应。
- std::string label;
- std::string key;
- std::string type;
- std::string default_value;
- std::string unit;
- SettingConfig* parent;
- std::list<SettingConfig> children;
- 各种 get,set 方法,
- addchild 方法递归添加一个键值。
2.CettingCategory- 包含多个子配置 Contains one or more children settings.
- 基本与 SettingConfig 一样。
3.SettingRegistry- 注册类。包含所有的配置设定 This registry contains all known setting keys.
- 方法:
- static SettingRegistry* getInstance() { return &instance; } //得到该类的静态实例
- bool settingExists(std::string key) const; // 根据 key 查找值是否存在
- const SettingConfig* getSettingConfig(std::string key); // 得到对应值
- bool settingsLoaded(); //有数据的话返回真
- bool loadJSON(std::string filename); //载入 json 文件数据
复制代码
- SettingsBase 类
- 该类主要是 map 类型的 setting_valuse 成员变量。
- 各种 get 方法用来读取对应的格式化键值。
- 没什么好说的。
打印相关 1.EFillmethod
- enum EFillMethod //填充方法选项
- {
- Fill_Lines,
- Fill_Grid,
- Fill_Triangles,
- Fill_Concentric,
- Fill_ZigZag,
- Fill_None
- }
复制代码 2.Eplatformadhesion
- enum EPlatformAdhesion //最底层与工作台的粘合形态
- {
- Adhesion_None, //直接粘合
- Adhesion_Brim,//产生延伸的边缘
- Adhesion_Raft //产生栈板
- };
复制代码 3.ESupportType
- enum ESupportType //支撑类型
- {
- Support_None, //不试用支撑
- Support_PlatformOnly,//仅支撑底面
- Support_Everywhere//所有斜侧面都产生支撑
- };
复制代码 4.MAX_SPARSE_COMBINE
- //Maximum number of sparse layers that can be combined into a single sparse 稀少的 extrusion.
- MAX_SPARSE_COMBINE 8 //稀疏挤出过程中最大的稀疏层数
复制代码 5.EGcodeflavor
打印机类型,见前文。
Mesh 类相关- 补完之前的基础类,终于可以开始说 mesh 了。mesh 即网状物,是 stl 转换成的数据结构。
- MeshVertex 类
- 记录 mesh 中 vertex 顶点,相邻面片索引(face)。其实定义成 struct 更合适吧。
- MeshFace 类
- meshFace 是有三个顶点的面片模型,一个面片因为是三角形,所以邻接了三个其他的面片。
- /* A MeshFace is a 3 dimensional model triangle with 3 points. These points are already converted to integers
- A face has 3 connected faces, corresponding to its 3 edges.
- Note that a correct model may have more than 2 faces connected via a single edge!
- In such a case the face_index stored in connected_face_index is the one connected via the outside; see ASCII art below:
- : horizontal slice through vertical edge connected to four faces :*/
复制代码 成员变量
- int vertex_index[3]; //顶点索引,逆时针顺序
- int connected_face_index[3]; //相邻面片索引,跟顶点相同顺序
复制代码 Mesh 类! Mesh 类是 3d 模型的最基本表征方式(那 stl 呢?),它含有模型中所有的 MeshFace 面片。
由于继承自 SettingBase,它可以有一些配置。
- /*!
- A Mesh is the most basic representation of a 3D model. It contains all the faces as MeshFaces.
- See MeshFace for the specifics of how/when faces are connected.
- */
复制代码- 成员变量
- vertices
所有的顶点。 - faces
所有的面片。
- 方法
- Mesh(SettingsBase* parent); //初始化的时候继承了配置
- void addFace(Point3& v0, Point3& v1, Point3& v2); //添加一个面片
- void clear(); //清除所有数据
- void finish(); //所有面片添加完成后,连接相邻面片
- Point3 my_min(); //假设打印空间为长方体,找出角落点(x,y,z 均最小的点)
- Point3 my_max(); //同上
复制代码- 说明一下:min 和 max 函数在 SB 的 vs 下编译报错,被我改成 my_min()和 my_max();不过作者也真是,取名取什么不好弄个冲突的。
私有方法
- int findIndexOfVertex(Point3& v); //返回指定顶点的索引号,或者新建一个顶点。
- int getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx);//返回与 notFaceIdx 片面邻接的面片的索引
- //http://stackoverflow.com/questions/14066933/direct-way-of-computing-clockwise-angle-between-2-vectors
复制代码- getFaceIdxWithPoints 有一个几何的算法来计算邻接面片。
多个 meshPrintObject 类(modelFile.h)
- 该类是多个 mesh 的集合(成员变量 meshes)。由于可能一次有多个 STL 文件会被打印。
- 方法。\\一些跟 mesh 类似。
- void finalize(); //设置打印的偏移量,即设置整个模型的位置
- void offset(Point3 offset) //将模型按 offset 偏移
- bool loadMeshFromFile(PrintObject* object, const char* filename, FMatrix3x3& matrix);//载入 stl 到 object 中
复制代码 next……至此,基础已经讲完
|
|
你可能喜欢
拓竹Bambu Lab A1 mini测评:这台3D打印机
变废为宝:通过固相制造将铝废料转化为3D打
新突破:基于声波的3D打印技术——全息直声
一篇带你读懂:金属3D打印在航空航天领域的
推荐课程
神奇的3D打印
SLA3D打印工艺全套培训课程 - 软件篇
3D打印月球灯视频教程 包括完整贴图建模流
【原创发布】Cura软件修改二次开发定制视频