簡體   English   中英

用C ++編寫二進制.stl文件

[英]Writing binary .stl files in C++

我想將坐標向量中的數據寫入二進制.stl 3d幾何文件中。

我需要一個80位標題,24位三角形。 每個三角形應該由3個點和一個法線來定義,每個點的坐標值為32位。此外,每個三角形可能都有一個屬性,我想保留為空。 (請參閱Wiki

我想我仍然對char和二進制模式有誤解。

最后生成的文件與我的原始文件大小相同,但是無法由圖形程序讀取,因此仍然需要邏輯上的錯誤...

我的點坐標在轉換為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,值的結構)...

write()的size參數是以字節為單位的大小,而不是以位為單位。 您應該通過4時才通過32 float

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM