概述
- 出来混总是要还的,这里不得不开始介绍底层最无聊的类(c++这个碧池)
点类和矩阵类
- 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 //离原点距离
- 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); }
- PointMatrix类(intpoint.h)
- 成员变量matrix[ 4].是一个二维矩阵。
- 默认初始化单位阵,
PointMatrix(double rotation) //对单位阵旋转一定角度。 Point apply(const Point p) const //点p左乘矩阵 Point unapply(const Point p) const //点p右乘矩阵
- 默认初始化单位阵,
- 成员变量matrix[ 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); }
- 基本与Point3完全一样,用float类型
- FMatrix3x3类(floatpoint.h)
- 跟PointMatrix一样。
- vSize2f函数
INLINE float vSize2f(const Point& p0) //返回p0的距离平方
- vSize2 函数
INLINE float vSize2(const Point& p0) //返回p0的距离
- vSizeMM函数 +返回mm单位,默认是微米。
时间类
- Timekeeper(gettime.h)
- 只有starttime这个变量,
- restart()方法重启定时器,返回所用时间。
- TimeEstimatecalculator类(timeEstimate.h)
- 这个类估算打印所需的时间。
- 成员变量:
- Position类
- 定义打印点所处位置
- Block类
- 记录打印机参数。
- Position类
- 方法
- setPosition(Position newPos) 设置打印位置
- reset() 清空打印位置
- void plan(Position newPos, double feedRate) 对新位置点,新的进料速度进行配置
- double TimeEstimateCalculator::calculate() 返回运动时间
- 具体实现的代码还有很多看不懂,很多是计算速度,加速度的,并无任何卵用。
- 注:recalculate_tranpezoids方法有笔误
for(unsigned int n=0; n<blocks.size(); n--) //TODO: 有问题
- 注:recalculate_tranpezoids方法有笔误
配置类
- 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方法递归添加一个键值。
- 直接从json文件 json 读取配置的类,Single setting data.有以下成员变量,跟json文件项一一对应。
- CettingCategory
- 包含多个子配置 Contains one or more children settings.
- 基本与SettingConfig一样。
- 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中的数据。
- SettingsBase类
- 该类主要是map类型的setting_valuse成员变量。
- 各种get方法用来读取对应的格式化键值。
- 没什么好说的。
打印相关
- EFillmethod
enum EFillMethod //填充方法选项 { Fill_Lines, Fill_Grid, Fill_Triangles, Fill_Concentric, Fill_ZigZag, Fill_None }
- Eplatformadhesion
enum EPlatformAdhesion //最底层与工作台的粘合形态 { Adhesion_None, //直接粘合 Adhesion_Brim,//产生延伸的边缘 Adhesion_Raft //产生栈板 };
- ESupportType
enum ESupportType //支撑类型 { Support_None, //不试用支撑 Support_PlatformOnly,//仅支撑底面 Support_Everywhere//所有斜侧面都产生支撑 };
- MAX_SPARSE_COMBINE
//Maximum number of sparse layers that can be combined into a single sparse稀少的 extrusion. MAX_SPARSE_COMBINE 8 //稀疏挤出过程中最大的稀疏层数
- EGcodeflavor
- 打印机类型,见前文。
Mesh类相关
https://fhln.blog.ustc.edu.cn/