概述- 出來混總是要還的,這里不得不開始介紹底層最無聊的類。
點(diǎn)類和矩陣類1.Point3 類(定義在 intpoint.h)- 該類定義了點(diǎn)得三維坐標(biāo),坐標(biāo)值是三個(gè) int32 類型,x y z
- 定義加、減、數(shù)乘、數(shù)除 d、點(diǎn)積、相等、不等 方法,不講。
- int32_t max() //返回 x y z 中最大值
- bool testLength(int32_t len) //頂點(diǎn)距離原點(diǎn)值不能大于 lenth
- int64_t vSize2() const //離原點(diǎn)距離的平方
- int32_t vSize() const //離原點(diǎn)距離
復(fù)制代碼 2.IntPoint 類(intpoint.h) 和 Point- 這個(gè)類是用在 ClipperLib 中的。Clipperlib 處理二維封閉圖形。
- 因此有兩個(gè)變量 x 和 y。
- 該類方法基本與 Point3 一樣。
- INLINE int angle(const Point& p) //返回與 x 正半軸夾角,角度制
- INLINE Point crossZ(const Point& p0) //繞原點(diǎn)逆時(shí)針旋轉(zhuǎn) 90 度
- {
- return Point(-p0.Y, p0.X);
- }
復(fù)制代碼 3.PointMatrix 類(intpoint.h)
A.成員變量 matrix[ 4].是一個(gè)二維矩陣。
4.默認(rèn)初始化單位陣,
- PointMatrix(double rotation) //對單位陣旋轉(zhuǎn)一定角度。
- Point apply(const Point p) const //點(diǎn) p 左乘矩陣
- Point unapply(const Point p) const //點(diǎn) p 右乘矩陣
復(fù)制代碼 5.FPoint3 類(floatpoint.h) 基本與 Point3 完全一樣,用 float 類型
- inline FPoint3 normalized()//正則化,單位化
復(fù)制代碼- 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);
- }
復(fù)制代碼 6.FMatrix3x3 類(floatpoint.h) 7.vSize2f 函數(shù)
- INLINE float vSize2f(const Point& p0) //返回 p0 的距離平方
復(fù)制代碼 8.vSize2 函數(shù)
- INLINE float vSize2(const Point& p0) //返回 p0 的距離
復(fù)制代碼 9.vSizeMM 函數(shù) +返回 mm 單位,默認(rèn)是微米。
時(shí)間類- Timekeeper(gettime.h)
- 只有 starttime 這個(gè)變量,
- restart()方法重啟定時(shí)器,返回所用時(shí)間。
- TimeEstimatecalculator 類(timeEstimate.h)
- 這個(gè)類估算打印所需的時(shí)間。
- 成員變量:
- 定義打印點(diǎn)所處位置
- 記錄打印機(jī)參數(shù)。
- 方法
A.setPosition(Position newPos)
設(shè)置打印位置
B.reset()
清空打印位置
C.void plan(Position newPos, double feedRate)
對新位置點(diǎn),新的進(jìn)料速度進(jìn)行配置
D.double TimeEstimateCalculator::calculate()
返回運(yùn)動(dòng)時(shí)間
E.具體實(shí)現(xiàn)的代碼還有很多看不懂,很多是計(jì)算速度,加速度的,并無任何卵用。
注 :recalculate_tranpezoids 方法有筆誤
- for(unsigned int n=0; n<blocks.size(); n--) //TODO: 有問題
復(fù)制代碼
配置類1.SettingConfig- 直接從 json 文件 json 讀取配置的類,Single setting data.有以下成員變量,跟 json 文件項(xiàng)一一對應(yīng)。
- 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 方法遞歸添加一個(gè)鍵值。
2.CettingCategory- 包含多個(gè)子配置 Contains one or more children settings.
- 基本與 SettingConfig 一樣。
3.SettingRegistry- 注冊類。包含所有的配置設(shè)定 This registry contains all known setting keys.
- 方法:
- static SettingRegistry* getInstance() { return &instance; } //得到該類的靜態(tài)實(shí)例
- bool settingExists(std::string key) const; // 根據(jù) key 查找值是否存在
- const SettingConfig* getSettingConfig(std::string key); // 得到對應(yīng)值
- bool settingsLoaded(); //有數(shù)據(jù)的話返回真
- bool loadJSON(std::string filename); //載入 json 文件數(shù)據(jù)
復(fù)制代碼
- SettingsBase 類
- 該類主要是 map 類型的 setting_valuse 成員變量。
- 各種 get 方法用來讀取對應(yīng)的格式化鍵值。
- 沒什么好說的。
打印相關(guān) 1.EFillmethod
- enum EFillMethod //填充方法選項(xiàng)
- {
- Fill_Lines,
- Fill_Grid,
- Fill_Triangles,
- Fill_Concentric,
- Fill_ZigZag,
- Fill_None
- }
復(fù)制代碼 2.Eplatformadhesion
- enum EPlatformAdhesion //最底層與工作臺(tái)的粘合形態(tài)
- {
- Adhesion_None, //直接粘合
- Adhesion_Brim,//產(chǎn)生延伸的邊緣
- Adhesion_Raft //產(chǎn)生棧板
- };
復(fù)制代碼 3.ESupportType
- enum ESupportType //支撐類型
- {
- Support_None, //不試用支撐
- Support_PlatformOnly,//僅支撐底面
- Support_Everywhere//所有斜側(cè)面都產(chǎn)生支撐
- };
復(fù)制代碼 4.MAX_SPARSE_COMBINE
- //Maximum number of sparse layers that can be combined into a single sparse 稀少的 extrusion.
- MAX_SPARSE_COMBINE 8 //稀疏擠出過程中最大的稀疏層數(shù)
復(fù)制代碼 5.EGcodeflavor
打印機(jī)類型,見前文。
Mesh 類相關(guān)- 補(bǔ)完之前的基礎(chǔ)類,終于可以開始說 mesh 了。mesh 即網(wǎng)狀物,是 stl 轉(zhuǎn)換成的數(shù)據(jù)結(jié)構(gòu)。
- MeshVertex 類
- 記錄 mesh 中 vertex 頂點(diǎn),相鄰面片索引(face)。其實(shí)定義成 struct 更合適吧。
- MeshFace 類
- meshFace 是有三個(gè)頂點(diǎn)的面片模型,一個(gè)面片因?yàn)槭侨切?,所以鄰接了三個(gè)其他的面片。
- /* 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 :*/
復(fù)制代碼 成員變量
- int vertex_index[3]; //頂點(diǎn)索引,逆時(shí)針順序
- int connected_face_index[3]; //相鄰面片索引,跟頂點(diǎn)相同順序
復(fù)制代碼 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.
- */
復(fù)制代碼- 成員變量
- vertices
所有的頂點(diǎn)。 - faces
所有的面片。
- 方法
- Mesh(SettingsBase* parent); //初始化的時(shí)候繼承了配置
- void addFace(Point3& v0, Point3& v1, Point3& v2); //添加一個(gè)面片
- void clear(); //清除所有數(shù)據(jù)
- void finish(); //所有面片添加完成后,連接相鄰面片
- Point3 my_min(); //假設(shè)打印空間為長方體,找出角落點(diǎn)(x,y,z 均最小的點(diǎn))
- Point3 my_max(); //同上
復(fù)制代碼- 說明一下:min 和 max 函數(shù)在 SB 的 vs 下編譯報(bào)錯(cuò),被我改成 my_min()和 my_max();不過作者也真是,取名取什么不好弄個(gè)沖突的。
私有方法
- int findIndexOfVertex(Point3& v); //返回指定頂點(diǎn)的索引號(hào),或者新建一個(gè)頂點(diǎn)。
- int getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx);//返回與 notFaceIdx 片面鄰接的面片的索引
- //http://stackoverflow.com/questions/14066933/direct-way-of-computing-clockwise-angle-between-2-vectors
復(fù)制代碼- getFaceIdxWithPoints 有一個(gè)幾何的算法來計(jì)算鄰接面片。
多個(gè) meshPrintObject 類(modelFile.h)
- 該類是多個(gè) mesh 的集合(成員變量 meshes)。由于可能一次有多個(gè) STL 文件會(huì)被打印。
- 方法。\\一些跟 mesh 類似。
- void finalize(); //設(shè)置打印的偏移量,即設(shè)置整個(gè)模型的位置
- void offset(Point3 offset) //將模型按 offset 偏移
- bool loadMeshFromFile(PrintObject* object, const char* filename, FMatrix3x3& matrix);//載入 stl 到 object 中
復(fù)制代碼 next……至此,基礎(chǔ)已經(jīng)講完
|
|
你可能喜歡
開源3D建模軟件FreeCAD 1.0正式發(fā)布,支持W
人工智能與3D打印技術(shù)結(jié)合,實(shí)現(xiàn)小型核反應(yīng)
最新《Nature》:動(dòng)態(tài)界面3D打印
石墨烯增強(qiáng)混凝土能否推動(dòng)可持續(xù)建筑? UVA
推薦課程
神奇的3D打印
SLA3D打印工藝全套培訓(xùn)課程 - 軟件篇
3D打印月球燈視頻教程 包括完整貼圖建模流
【原創(chuàng)發(fā)布】Cura軟件修改二次開發(fā)定制視頻