Я пытаюсь прочитать файл STL с различным форматом. Файл STL в формате c состоит из
solid solid_name
facet normal n1 n2 n3 (the triangles normal vector)
outerloop (one of the markers I want to read)
v1 x1 y1 z1
v2 x2 y2 z2 (three vertex of the triangle/facet)
v3 x3 y3 z3
endloop
end facet
endsolid
Идея состоит в том, чтобы l oop по всему solid, фасету и вершине и прочитать информацию. Моя проблема в том, что я пытаюсь читать файлы в разных форматах: например, в одном из них у меня есть для первого фасета:
>solid Peca2
> facet normal 1.000000e+00 0.000000e+00 0.000000e+00
> outer loop
> vertex 1.250000e+02 7.500000e+01 1.000000e+02
> vertex 1.250000e+02 2.500000e+01 1.000000e+02
> vertex 1.250000e+02 7.500000e+01 5.000000e+01
> endloop
and so on.
Моя проблема в том, что, поскольку значения каждого компонента вершины может варьироваться по величине, я не могу найти правильный формат для чтения этой информации. Я пробовал экспоненциальную, с плавающей запятой и даже строки, но данные, которые мой код читает из файла, совершенно бессмысленны, например:
solid Peca2
facet normal 1.000000e+00
0.000000e+0
0 0.000000e+00
outer loop
vertex 1.250000e+
После того, как я закончил читать данные, я предполагается записать те же данные в новый файл STL. Я пробовал неформатированное и отформатированное чтение и запись, но, похоже, ничего не работает. Единственный эффект, который я наблюдал - это смещение записанных данных с одной строки на другую, как показано на последнем рисунке.
Итак, у меня есть несколько вопросов:
1) Как можно Я пишу универсальный считыватель c STL, который читает любой файл, в любом формате, без предварительного указания? Возможно ли это вообще?
2) Как я могу прочитать данные с плавающей запятой и экспоненциальные данные из файла различной длины, что можно наблюдать в строке
1.250000e+02 7.500000e+01 5.000000e+01
3) Я пытался чтение информации в каждой строке в виде размещаемой символьной строки и, по-видимому, было успешным, но когда я печатаю строку, чтобы проверить ее содержимое, вывод также выглядит хаотично c, как и раньше:
facet n
ormal 1.000000e+00 0
.000000e+00 0.000000
e+00
I Я попробовал почти все команды чтения в следующих формах, меняя ширину и цифры формата во многих, многих комбинациях, но ничего не помогло.
read(iunit, fmt= '(a, G8.6, G8.6, G8.6)', iostat=ios) vertex, vertices(1,k), vertices(1,k+1), vertices(1,k+2)
read(iunit, fmt= '(a, F2.0, E2.0, E2.0)', iostat=ios) vertex, vertices(1,k), vertices(1,k+1), vertices(1,k+2)
read(iunit, fmt= '(a, E10.6, E10.6, E10.6)', iostat=ios) vertex, vertices(1,k), vertices(1,k+1), vertices(1,k+2)
Может кто-нибудь, пожалуйста, помогите мне разобраться с эти вопросы форматирования? Любая помощь очень ценится, так как я боролся с этой проблемой в течение достаточно долгого времени.