我想將座標矢量中的數據寫入二進制.stl三維幾何文件。在C++中編寫二進制.stl文件
我需要有一個80位標題,24位數的三角形。 每個三角形都應該由3個點和一個法線來定義,每個三角形的座標值都是32位。此外,每個三角形可以有一個屬性,我想讓它保持空白。 (見wiki)
我想我仍然對字符和二進制模式有誤解。
是最終產生的文件的大小與我的原始文件相同,但不能由圖形程序讀取,所以需要有一個邏輯錯誤,還是......
我點座標是雙價值鑄造之前char *,這可以這麼做嗎?
我的代碼:
void write_stl(std::string filename, std::vector<tri> triangles){
//binary file
std::string header_info = "solid " + filename + "-output";
char head[80];
std::strncpy(head,header_info.c_str(),sizeof(head)-1);
char attribute[2] = "0";
unsigned long nTriLong = triangles.size() ;
std::ofstream myfile;
myfile.open((Filename + "-out.stl").c_str(), std::ios::out | std::ios::binary);
myfile.write(head,sizeof(head));
myfile.write((char*)&nTriLong,4);
//write down every triangle
for (std::vector<tri>::iterator it = triangles.begin(); it!=triangles.end(); it++){
//normal vector coordinates
myfile.write((char*)&it->m_n.m_x, 4);
myfile.write((char*)&it->m_n.m_y, 4);
myfile.write((char*)&it->m_n.m_z, 4);
//p1 coordinates
myfile.write((char*)&it->m_p1.m_x, 4);
myfile.write((char*)&it->m_p1.m_y, 4);
myfile.write((char*)&it->m_p1.m_z, 4);
//p2 coordinates
myfile.write((char*)&it->m_p2.m_x, 4);
myfile.write((char*)&it->m_p2.m_y, 4);
myfile.write((char*)&it->m_p2.m_z, 4);
//p3 coordinates
myfile.write((char*)&it->m_p3.m_x, 4);
myfile.write((char*)&it->m_p3.m_y, 4);
myfile.write((char*)&it->m_p3.m_z, 4);
myfile.write(attribute,2);
}
myfile.close();
}
哪裏tri
僅僅是包含3點的三角形的結構,並且正常爲 「3D矢量」(即,與x結構,y,z,value)...
32位= 4字節 – AnatolyS
_「頭需要在ASCII模式被寫入」 _野應這就是爲什麼使用'的sizeof(變量名) –