CuraEngine 基础功能类介绍 

2017-06-21 18:12
概述
  • 出来混总是要还的,这里不得不开始介绍底层最无聊的类。

点类和矩阵类1.Point3 类(定义在 intpoint.h)
  • 该类定义了点得三维坐标,坐标值是三个 int32 类型,x y z
  • 定义加、减、数乘、数除 d、点积、相等、不等 方法,不讲。
  1. int32_t max() //返回 x y z 中最大值
  2. bool testLength(int32_t len) //顶点距离原点值不能大于 lenth
  3. int64_t vSize2() const //离原点距离的平方
  4. int32_t vSize() const //离原点距离
复制代码
2.IntPoint 类(intpoint.h) 和 Point
  • 这个类是用在 ClipperLib 中的。Clipperlib 处理二维封闭图形。
  • 因此有两个变量 x 和 y。
  • 该类方法基本与 Point3 一样。
  1. INLINE int angle(const Point& p) //返回与 x 正半轴夹角,角度制
  2. INLINE Point crossZ(const Point& p0) //绕原点逆时针旋转 90 度
  3. {
  4.      return Point(-p0.Y, p0.X);
  5. }
复制代码
3.PointMatrix 类(intpoint.h)
A.成员变量 matrix[ 4].是一个二维矩阵。
4.默认初始化单位阵,
  1. PointMatrix(double rotation) //对单位阵旋转一定角度。
  2.       Point apply(const Point p) const //点 p 左乘矩阵
  3.       Point unapply(const Point p) const //点 p 右乘矩阵
复制代码
5.FPoint3 类(floatpoint.h) 基本与 Point3 完全一样,用 float 类型
  1. inline FPoint3 normalized()//正则化,单位化
复制代码
  1.   FPoint3 cross(const FPoint3& p)  //未知
  2. {
  3.     return FPoint3(
  4.         y*p.z-z*p.y,
  5.         z*p.x-x*p.z,
  6.         x*p.y-y*p.x);
  7. }
复制代码
6.FMatrix3x3 类(floatpoint.h)
  • 跟 PointMatrix 一样。
7.vSize2f 函数
  1. INLINE float vSize2f(const Point& p0) //返回 p0 的距离平方
复制代码
8.vSize2 函数
  1. INLINE float vSize2(const Point& p0) //返回 p0 的距离
复制代码
9.vSizeMM 函数 +返回 mm 单位,默认是微米。
时间类
  • Timekeeper(gettime.h)
    • 只有 starttime 这个变量,
    • restart()方法重启定时器,返回所用时间。
  • TimeEstimatecalculator 类(timeEstimate.h)
    • 这个类估算打印所需的时间。
    • 成员变量:
      • Position 类
    • 定义打印点所处位置
      • Block 类
    • 记录打印机参数。
      • 方法

        A.setPosition(Position newPos)
        设置打印位置
        B.reset()
        清空打印位置
        C.void plan(Position newPos, double feedRate)
        对新位置点,新的进料速度进行配置
        D.double TimeEstimateCalculator::calculate()
        返回运动时间
        E.具体实现的代码还有很多看不懂,很多是计算速度,加速度的,并无任何卵用。
        :recalculate_tranpezoids 方法有笔误
      1. 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.
      • 方法:
      1. static SettingRegistry* getInstance() { return &instance; } //得到该类的静态实例   
      2. bool settingExists(std::string key) const; // 根据 key 查找值是否存在
      3. const SettingConfig* getSettingConfig(std::string key); // 得到对应值
      4. bool settingsLoaded(); //有数据的话返回真
      5. bool loadJSON(std::string filename); //载入 json 文件数据
      复制代码

      • 这里的 loadJSON 方法用到了 libs/rapidjson/中的 json 库。
        从代码来看,读入的 json 文件参数有 machine_settings、mesh_settings(没找到)和 categories 三类。
        数据存在 categories 和 settings 中。settings 是 map 类型。以后用到的主要是 setitngs 中的数据。
    • SettingsBase 类
      • 该类主要是 map 类型的 setting_valuse 成员变量。
      • 各种 get 方法用来读取对应的格式化键值。
      • 没什么好说的。
      打印相关 1.EFillmethod
    1.    enum EFillMethod  //填充方法选项
    2. {
    3.     Fill_Lines,
    4.     Fill_Grid,
    5.     Fill_Triangles,
    6.     Fill_Concentric,
    7.     Fill_ZigZag,
    8.     Fill_None
    9. }
    复制代码
    2.Eplatformadhesion
  1.      enum EPlatformAdhesion  //最底层与工作台的粘合形态
  2. {
  3.     Adhesion_None, //直接粘合
  4.     Adhesion_Brim,//产生延伸的边缘
  5.     Adhesion_Raft //产生栈板
  6. };
复制代码
3.ESupportType
  1.      enum ESupportType  //支撑类型
  2. {
  3.     Support_None, //不试用支撑
  4.     Support_PlatformOnly,//仅支撑底面
  5.     Support_Everywhere//所有斜侧面都产生支撑
  6. };
复制代码
4.MAX_SPARSE_COMBINE
  1. //Maximum number of sparse layers that can be combined into a single sparse 稀少的 extrusion.
  2.   MAX_SPARSE_COMBINE 8 //稀疏挤出过程中最大的稀疏层数
复制代码
5.EGcodeflavor
打印机类型,见前文。

Mesh 类相关
  • 补完之前的基础类,终于可以开始说 mesh 了。mesh 即网状物,是 stl 转换成的数据结构。
  • MeshVertex 类
    • 记录 mesh 中 vertex 顶点,相邻面片索引(face)。其实定义成 struct 更合适吧。
  • MeshFace 类
    • meshFace 是有三个顶点的面片模型,一个面片因为是三角形,所以邻接了三个其他的面片。
    1.       /* A MeshFace is a 3 dimensional model triangle with 3 points. These points are already converted to integers
    2. A face has 3 connected faces, corresponding to its 3 edges.
    3. Note that a correct model may have more than 2 faces connected via a single edge!
    4. In such a case the face_index stored in connected_face_index is the one connected via the outside; see ASCII art below:
    5. : horizontal slice through vertical edge connected to four faces :*/
    复制代码
    成员变量
  1. int vertex_index[3]; //顶点索引,逆时针顺序
  2. int connected_face_index[3]; //相邻面片索引,跟顶点相同顺序
复制代码
Mesh 类! Mesh 类是 3d 模型的最基本表征方式(那 stl 呢?),它含有模型中所有的 MeshFace 面片。
由于继承自 SettingBase,它可以有一些配置。
  1.        /*!
  2. A Mesh is the most basic representation of a 3D model. It contains all the faces as MeshFaces.

  3. See MeshFace for the specifics of how/when faces are connected.
  4. */
复制代码
  • 成员变量
    • vertices
      所有的顶点。
    • faces
      所有的面片。
  • 方法
  1. Mesh(SettingsBase* parent); //初始化的时候继承了配置
  2. void addFace(Point3& v0, Point3& v1, Point3& v2); //添加一个面片
  3. void clear(); //清除所有数据
  4. void finish(); //所有面片添加完成后,连接相邻面片
  5. Point3 my_min(); //假设打印空间为长方体,找出角落点(x,y,z 均最小的点)
  6. Point3 my_max(); //同上
复制代码
  • 说明一下:min 和 max 函数在 SB 的 vs 下编译报错,被我改成 my_min()和 my_max();不过作者也真是,取名取什么不好弄个冲突的。
私有方法
  1. int findIndexOfVertex(Point3& v); //返回指定顶点的索引号,或者新建一个顶点。
  2. int getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx);//返回与 notFaceIdx 片面邻接的面片的索引
  3. //http://stackoverflow.com/questions/14066933/direct-way-of-computing-clockwise-angle-between-2-vectors
复制代码
  • getFaceIdxWithPoints 有一个几何的算法来计算邻接面片。
多个 meshPrintObject 类(modelFile.h)
  • 该类是多个 mesh 的集合(成员变量 meshes)。由于可能一次有多个 STL 文件会被打印。
  • 方法。\\一些跟 mesh 类似。
  1. void finalize(); //设置打印的偏移量,即设置整个模型的位置
  2. void offset(Point3 offset) //将模型按 offset 偏移
  3. bool loadMeshFromFile(PrintObject* object, const char* filename, FMatrix3x3& matrix);//载入 stl 到 object 中
复制代码
next……至此,基础已经讲完
声明:3D打印资源库(3dzyk)内网友所发表的所有内容及言论仅代表其本人,并不代表3D打印资源库(3dzyk)观点和立场;如对文章有异议或投诉,请联系kefu@3dzyk.cn。
标签:
CuraEngine 基础功能类介绍 
快速回复 返回顶部 返回列表
Baidu
map