CuraEngine基础功能类介绍

概述

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

点类和矩阵类

  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)
    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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值