CuraEngine基础功能类介绍

来源:互联网 发布:数据库经典书籍 知乎 编辑:程序博客网 时间:2024/06/06 09:32

Table of Contents

  • 概述
  • 点类和矩阵类
  • 时间类
  • 配置类
  • 打印相关
  • Mesh类相关

概述

  • 出来混总是要还的,这里不得不开始介绍底层最无聊的类(c++这个碧池)

点类和矩阵类

  1. Point3类(定义在intpoint.h)
    • 该类定义了点得三维坐标,坐标值是三个int32类型,x y z
    • 定义加、减、数乘、数除d、点积、相等、不等 方法,不讲。
      int32_t max() //返回x y z中最大值bool testLength(int32_t len) //顶点距离原点值不能大于lenthint64_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)
    1. 成员变量matrix[ 4].是一个二维矩阵。
      • 默认初始化单位阵,
        PointMatrix(double rotation) //对单位阵旋转一定角度。Point apply(const Point p) const //点p左乘矩阵Point unapply(const Point p) const //点p右乘矩阵
  4. 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);}
  5. FMatrix3x3类(floatpoint.h)
    • 跟PointMatrix一样。
  6. vSize2f函数
    INLINE float vSize2f(const Point& p0) //返回p0的距离平方
  7. vSize2 函数
    INLINE float vSize2(const Point& p0) //返回p0的距离
  8. vSizeMM函数 +返回mm单位,默认是微米。

时间类

  1. Timekeeper(gettime.h)
    • 只有starttime这个变量,
    • restart()方法重启定时器,返回所用时间。
  2. TimeEstimatecalculator类(timeEstimate.h)
    • 这个类估算打印所需的时间。
    • 成员变量:
      1. Position类
        • 定义打印点所处位置
      2. Block类
        • 记录打印机参数。
    • 方法
      1. setPosition(Position newPos) 设置打印位置
      2. reset() 清空打印位置
      3. void plan(Position newPos, double feedRate) 对新位置点,新的进料速度进行配置
      4. double TimeEstimateCalculator::calculate() 返回运动时间
      5. 具体实现的代码还有很多看不懂,很多是计算速度,加速度的,并无任何卵用。
        • 注:recalculate_tranpezoids方法有笔误
          for(unsigned int n=0; n<blocks.size(); n--)  //TODO: 有问题

配置类

  1. SettingConfig
    • 直接从json文件 json 读取配置的类,Single setting data.有以下成员变量,跟json文件项一一对应。
      1. std::string label;
      2. std::string key;
      3. std::string type;
      4. std::string default_value;
      5. std::string unit;
      6. SettingConfig* parent;
      7. 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文件数据
      • 这里的loadJSON方法用到了libs/rapidjson/中的json库。
      • 从代码来看,读入的json文件参数有machine_settings、mesh_settings(没找到)和categories三类。
      • 数据存在categories和settings中。settings是map类型。以后用到的主要是setitngs中的数据。
  4. 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类相关

https://fhln.blog.ustc.edu.cn/

0 0