Показать сообщение отдельно
  #4  
Старый 12.08.2016, 07:47
-=#PupaJr#=- -=#PupaJr#=- вне форума
Новичок
 
Регистрация: 17.08.2010
Сообщения: 74
Репутация: 518
По умолчанию

Прочитать могу только < примерно 40000 треугольников и а если ставлю больше то Stack Overflow, если не ставлю размер - то вообще не компилит.
Вот моя полная процедура:
Код:
procedure TForm1.Button1Click(Sender: TObject);  // загрузить файл точек/бинарник/треугольники
type
  striangle=packed record           // 50_и байтная запись 1 треугольника
  trnormx:single;       // 4
  trnormy:single;       // 4
  trnormz:single;       // 4
  tr3dx1: Single;       // 4
  tr3dy1: Single;       // 4
  tr3dz1: Single;       // 4
  tr3dx2: Single;       // 4
  tr3dy2: Single;       // 4
  tr3dz2: Single;       // 4
  tr3dx3: Single;       // 4
  tr3dy3: Single;       // 4
  tr3dz3: Single;       // 4
  trattr: word;         // 2
end;
type
  StlRec= packed record
    SName: array[1..80] of Char;//string[80];      // array of char  сработал правильно
    Snum: dword;
    msstri: array [0..60000]of striangle;         // множество записей треугольничных записей - 60000 уже не берёт 
end;
var
i,ii,jj,sl:integer;
sss,stru:string;
Buf: array[1..127] of Char;
mash:single;
NumRead: integer;
Infl: file of Single;
//stlf: file;
stlperm: StlRec;
stlf: file of StlRec;
begin
 mash:=strtofloat(Edit1.text);
 if OpenDialog1.Execute then
   begin
      if OpenDialog1.FilterIndex=3 then   //  STL bin file
        begin
          AssignFile(stlf,OpenDialog1.FileName);
          Reset(stlf);
          DlnStr:=80;
        //  BlockRead(stlf,,DlnStr,NumRead);                //читаем файл в массив
          read(stlf,stlperm);
       //   SetLength(stlperm.msstri, stlperm.Snum);    // попытка дать размер массиву треугольников
          DlnStr:=1;
         // ntri:=FilePos(stlf);// - возвращает текущую позицию чтения/записи в файл
      //    BlockRead(stlf,ntri,DlnStr,NumRead);
          DlnStr:=NumRead;                          //получили реальную длину файла
          CloseFile(stlf);
          ii:=21;
          i:=0;
         // ntri:=Fbind[20];    // запоминаем число треугольников для процедуры вывода графики
    //      memo1.Clear;
   //       SendMessage(memo1.Handle, WM_SETREDRAW, 0, 0) ;   // запрещаем перерисовку для ускорения вывода
          jlc:=stlperm.Snum;
        //  while i<(stlperm.Snum-1) do
          while i<(19999) do
            begin
//              ii:=ii+1;
//              stlperm.msstri[]                                 // перепрыгиваем направление нормали треугольника
              triangle3dx1[i]:= stlperm.msstri[i].tr3dx1;         // заполняем массив точками
              triangle3dy1[i]:= stlperm.msstri[i].tr3dy1;         // заполняем массив точками
              triangle3dz1[i]:= stlperm.msstri[i].tr3dz1;         // заполняем массив точками
              triangle3dx2[i]:= stlperm.msstri[i].tr3dx2;         // заполняем массив точками
              triangle3dy2[i]:= stlperm.msstri[i].tr3dy2;         // заполняем массив точками
              triangle3dz2[i]:= stlperm.msstri[i].tr3dz2;         // заполняем массив точками
              triangle3dx3[i]:= stlperm.msstri[i].tr3dx3;         // заполняем массив точками
              triangle3dy3[i]:= stlperm.msstri[i].tr3dy3;         // заполняем массив точками
              triangle3dz3[i]:= stlperm.msstri[i].tr3dz3;         // заполняем массив точками
              i:=i+1;
              ii:=i;
      //        memo1.Lines.Add(floattostrf(points3dx[i],fffixed,6,3)+' '+floattostrf(points3dy[i],fffixed,6,3)+' '+floattostrf(points3dz[i],fffixed,6,3));
       //       i:=i+1;
            end;  
      //    SendMessage(memo1.Handle, WM_SETREDRAW, 1, 0);     // разрешаем перерисовку
      //    RedrawWindow(memo1.Handle, nil, 0,RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
        end; // open STL
   end;// open file
 l_point:=true;

label1.Tag:=ii;
end;

В принципе работает он но на малое число - 20000 точно берёт.
Видел примеры что делают через Read/Seek по записям - но там нет заголовочной инфы и какие-то примеры не полноценные...

Спасибо, попробую.
Ответить с цитированием