![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Доброго всем.
Есть стандартный файл литографии STL - дока в сети есть но всёже приведу Его структура: 80 первых байт текст - комменты 4 байта число элементов (треугольников) (тип Dword) 4 по 4 Real32 - нормаль XYZ и координаты ХYZ вершин треугольника 2 байта вспомогательная инфа. и того 80 + 4 + 50 + 50 +50 +.....+50(раз элементов). составляю типы: Код:
К тому же не ясно, как перебирать в таком типе все треугольники (50 байт 4х4 +2) при чтении указывать как массив(максючисло треуг.допустим 6000000): ztrian:array [0..6000000] of triangle . А как писать обратно в такой файл? и если писать массив то запишется весь??? (6000000???) а мне надо скажем 10000 всего? Что не делаю то I/O error или вместо данных (достоверно прочтёных в фирменной программе) получаю не координаты и сумашедшие числа... ХЕЛП... |
#2
|
|||
|
|||
![]() 1. Читать через TFileStream
2. Перед чтением надо память выделять Как-то так: Код:
|
#3
|
||||
|
||||
![]() ТС похоже немного заблуждается, если судить по описанию бинарной версии данного формата, то структура записей должна быть слегка другой, с чтением из буфера не дружу, но вот такой вариант загрузил координаты треугольников тестового чайника из teapot.stl
Код:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#4
|
|||
|
|||
![]() Прочитать могу только < примерно 40000 треугольников и а если ставлю больше то Stack Overflow, если не ставлю размер - то вообще не компилит.
Вот моя полная процедура: Код:
В принципе работает он но на малое число - 20000 точно берёт. Видел примеры что делают через Read/Seek по записям - но там нет заголовочной инфы и какие-то примеры не полноценные... Спасибо, попробую. |
#5
|
|||
|
|||
![]() Alegun Ваш код работает, спасибо, только число переменных больше и Data надо объявить (о, Вы уже дописали код ))), и в принципе я читал потом не в переменную файла а в массив типа single - всё нормально прочиталось и массив заполнился.
С этого массива сразу читал точки и в OpenGl строил треугольники - всё чётко. Всем спасибо )) ![]() |
#6
|
||||
|
||||
![]() Способом копипасты довёл число треугольников в текстовом варианте больше чем 160000 штук, затем первёл в бинарный формат - прекрасно под D7 полученный файл и открывается и грузится в структуру, наверное с типами у вас неразбериха, отсюда и преполнение
З.Ы. Есть менее затратный вариант - подключить к проекту assimp32.dll, порт объявы под делфи в сетке вроде на неё есть, а это умеет работать со многими форматами, в том числе и с двумя вариантами *.stl Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
-=#PupaJr#=- (22.08.2016)
|