Текстовый STL-файл должен начинаться ключевым словом solid и заканчиваться endsolid. После слова solid ( в этой же строке ) можно поместить комментарий ( что за объект, кто его сделал и т.д. ). Далее идут описания треугольников. Описание каждого треугольника включает описание единичного вектора нормали и трёхмерные координаты вершин. Все координаты представлены в декартовой системе координат и записаны в виде чисел с плавающей точкой: solid < комментарий > ... facet normal 0.319575 -0.175216 -0.93122 outer loop vertex 2.22934 -0.992723 -0.862826 vertex 2.41037 -0.777999 -0.841105 vertex 2.40731 -0.97498 -0.805091 endloop endfacet ... endsolidБинарный STL-файл условно можно изобразить следующим образом: struct facet { float normal[3]; // 12 байт float vertex[3][3]; // 36 байт unsigned short attr; // 2 байта }; struct stl_file { char head[80]; // комментарий - 80 байт unsigned long n; // к-во граней - 4 байта facet arr[n]; // массив граней - n * 50 байт }; Здесь всё понятно за исключением поля attr в структуре facet. В спецификации написано, что его значение не задокументировано и поэтому равно 0. В файле fileSTL.cpp находятся 4 функции чтения-записи в STL-файл: typedef unsigned int nat; bool loadSTLA ( IReadSeekFile & file, nat & ntext, char * text, Poly3gon<Vector3f, Vector3f> & poly ); bool loadSTLB ( IReadFile & file, nat & ntext, char * text, Poly3gon<Vector3f, Vector3f> & poly ); bool saveSTLA ( IWriteFile & file, nat ntext, const char * text, const Poly3gon<Vector3f, Vector3f> & poly, nat prec ); bool saveSTLB ( IWriteFile & file, nat ntext, const char * text, const Poly3gon<Vector3f, Vector3f> & poly ); Здесь ntext - количество знаков в текстовом сообщении, text - указатель на массив с текстовым сообщением, prec - количество знаков после запятой для представления чисел. Небольшая коллекция STL-файлов находится здесь. Их можно посмотреть при помощи приложения DEMO или GraphViewer. О классах IReadFile и IWriteFile смотрите здесь. О шаблоне Poly3gon смотрите здесь. Наверх |