curaengine linux编译,CuraEngine开源程序解读
8種機械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
mesh
mesh中主要定義了關(guān)于三角形網(wǎng)格三個類和這三個類的一些成員函數(shù),分別是MeshVertex,MeshFace以及Mesh。
全局變量
const int類型的全局變量vertex_meld_distance,其值設(shè)定為MM2INT(0.03);
全局函數(shù)static inline uint32_t pointHash(const Point3& p)。構(gòu)造了一個基于vertex_meld_distance的函數(shù),所有在vertex_meld_distance范圍內(nèi)的點都會映射到一個哈希值上。
MeshVertex
MeshVertex類是在網(wǎng)格中使用的頂點類型,其包含了頂點的坐標信息以及跟蹤連接到這個點上的面片信息。
成員變量
Point3類型的成員變量p,用于存儲頂點的坐標信息;
uint32_t類型的vector容器connected_faces,用于存儲連接面的索引列表。
成員函數(shù)構(gòu)造函數(shù)。構(gòu)造函數(shù)中只提供Point3類型的參數(shù)p用于初始化成員變量p,默認給connected_faces容器預(yù)留8個空間大小;
MeshFace
MehsFace類用來表示一個三維模型中的一個三角形面片,面片包含了三個頂點的信息以及三條邊所連接的其它三個面片的信息。一個正確的模型同樣有可能一條邊連接了超過兩個面,在這種情況之下,存儲在connected_face_index數(shù)組中的面片為連接模型外部的面片。
成員變量
int類型的vertex_index[3]數(shù)組,用于存儲三個頂點的索引,三個頂點按照逆時針排序;
int類型的connected_face_index[3]數(shù)組,用于存儲連接三個邊的另一個面片的索引號,其中connected_face_index[0]對應(yīng)的面片和當前面片所共享的邊是vertex_index[0]和vertex_index[1]所連接形成的邊。
Mesh
Mesh類是3D模型最基本的表示類,以MeshFace存儲所有面的信息。Mesh類是SettingsBase類的繼承類,SettingsBase是設(shè)置一些值的基礎(chǔ)類,這里可以不做深究。
成員變量
>類型的unordered_map容器vertex_hash_map,用于存儲該位置的散列的每個頂點的索引引用,允許快速檢索具有相同位置的點。類型的unordered_map容器相較于map容器具有更高的查詢效率,采用以哈希表為底層;
AABB類型的成員變量aabb,用于構(gòu)建整個模型的包圍盒;
MeshVertex類型的vector容器vertices,用于存儲網(wǎng)格的所有頂點數(shù)據(jù);
MeshFace類型的vector容器faces,用于存儲網(wǎng)格的所有面片數(shù)據(jù);
bool類型的has_disconnected_faces,判定mesh中是否存在斷開連接的面;
bool類型的has_overlapping_faces,判定mesh中是否存在交疊的面;
Settings類的對象settings,用于存儲基礎(chǔ)設(shè)定;
string類型的mesh_name,用于存儲讀取進來的模型名稱。
成員函數(shù)構(gòu)造函數(shù)。構(gòu)造函數(shù)中不直接輸入模型的面片信息,而是對其一些設(shè)定值進行初始化,形參為其虛基類SettingsBaseVirtual類所構(gòu)造對象的指針;
int findIndexOfVertex(const Point3& v)。私有成員函數(shù),用于返回接近該Point的頂點索引,若不存在則新建一個索引并返回;尋找索引時,通過所搜尋點的hash值在vertex_hash_map中尋找,若尋找到同樣hash值的存儲點,通過判斷尋找到的點和所搜尋點之間的距離是否超過設(shè)定的全局變量vertex_meld_distance來判斷該點是否滿足條件,若滿足則返回所搜尋點的索引值,若不滿足則在vertex_hash_map[hash]中添加一個當前頂點數(shù)量的值,在vertices容器中添加該點,并返回vertices.size() - 1;
void addFace(Point3& v0, Point3& v1, Point3& v2)。用于向faces容器中添加面片。首先檢測三個點的索引值是否有兩個指向同一個值上,若指向同一個值則直接返回;若是一個新的面片,則向faces容器中直接向后添加一個成員,并給這個成員的vertex_index賦值,同時分別對這三個頂點的connected_faces添加該面片索引;
void clear()。用于清除所有數(shù)據(jù)(清空faces,vertices和vertex_hash_map);
void finish()。用于完成模型connected_faces的設(shè)置。完成網(wǎng)格輸入之后,首先清除vertex_hash_map容器,因為這個容器不再是必須的而且占據(jù)了很大的一部分內(nèi)存空間。在addFace中已經(jīng)確定了每個頂點所連接的面片,這里再通過getFaceIdxWithPoints函數(shù)確定每個面片上每條邊所連接的另一個面片的索引號;
Point3 min() const。用于返回AABB包圍盒最小點;
Point3 max() const。用于返回AABB包圍盒最大點;
AABB3D getAABB() const。用于返回AABB包圍盒;
void expandXY(int64_t offset)。用于拓展AABB包圍盒。若offset為正,向外拓展offset;若為負,向內(nèi)拓展;
void offset(Point3 offset)。用于平移整個模型,包括aabb和所有的頂點;
int getFaceIdxWithPoints(int idx0, int idx1, int notFaceIdx, int notFaceVertexIdx) const。用于根據(jù)當前面片索引以及對應(yīng)邊的頂點索引來確定所連接的另一個面片的索引,當多個面連接相同的邊緣時,若連接一條邊的面片數(shù)量為單數(shù),則說明存在斷開連接的面,若為雙數(shù)則從idx1到idx0查看,返回下一個頂點構(gòu)成的是一個逆時針面的面片;
MeshGroup
MeshGroup中只定義了一個MeshGroup類,主要用于作為保存一個或者多個mesh。一個MeshGroup中保存的模型都是在一次打印中需要被打印的模型,所以在同一次打印中,只會有一個MeshGroup。
MeshGroup類
MeshGroup類是NoCopy類的繼承類,所以不能直接進行拷貝。
成員變量
Mesh類型的vector容器meshes,用于存儲多個mesh模型;
Settings類的對象settings,用于基礎(chǔ)設(shè)定。
成員函數(shù)Point3 min() const。用于返回AABB包圍盒最小點;
Point3 max() const。用于返回AABB包圍盒最大點;
void clear()。對meshes中每個mesh都進行clear;
void finalize()。主要是用于調(diào)整mesh的位置。
全局函數(shù)
bool loadMeshIntoMeshGroup(MeshGroup* meshgroup, const char* filename, const FMatrix3x3& transformation, Settings& object_parent_settings)。從文件中讀取網(wǎng)格并將其存儲在MeshGroup的meshes當中,其中meshgroup為網(wǎng)格存儲位置,filename為文件名,transformation為對該模型所有頂點的變換矩陣,object_parent_settings為父類設(shè)置,函數(shù)返回是否成功讀取面片模型并將其保存于meshgroup當中。該函數(shù)通過調(diào)用loadMeshSTL_ascii或loadMeshSTL_binary對ASCII格式或二進制格式的STL文件進行讀取。
總結(jié)
以上是生活随笔為你收集整理的curaengine linux编译,CuraEngine开源程序解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: raid5坏了一块盘怎么办_机械硬盘的坏
- 下一篇: getwayworker timer_J