Einzelnen Beitrag anzeigen

the3dcloser

Registriert seit: 5. Okt 2013
19 Beiträge
 
#3

AW: Problem bei SetLength()

  Alt 19. Aug 2015, 16:23
Der Code ist an sich eigentlich relativ simple, es wird nur eine Datei eingelesen:

Wie schon gesagt, lade ich eine Datei, funktioniert der Code ohne Probleme, lade ich jedoch später eine neue (kleinere, d.h. kleinere Array-länge) Datei, gibt es den Fehler mit SetLength()

Delphi-Quellcode:
var
MTL: array of record //only editable values :)
  Name: String;
  MatClass: array[0..3] of word;
  Diffuse, Ambient, Specular, Reflect2: TColor;
  XDiffuse, XSpecular, Specular2: TColor;
  TexName:String;
  Transparency:Byte;
  SpecProbs, Fresnel: array[0..2] of word;
  FallOff: array[0..1] of word; end;


procedure LoadMTL(a:String);
var f:Textfile;
    s:String;
    i:Integer;
begin
SetLength(MTL, TRXHead.Materials); {Fehler beim zweiten Laden}
AssignFile(f,a);
Reset(f);
ReadLn(f,s); //ColSetInf
for i:=0 to TRXHead.Materials-1 do begin
 ReadLn(f,s); //Empty line
 ReadLn(f,s); MTL[i].Name:=s;
 ReadLn(f,s); Delete(s,1,9); MTL[i].MatClass[0]:=StrToInt(s[1]+s[2]); MTL[i].MatClass[1]:=StrToInt(s[4]+s[5]); MTL[i].MatClass[2]:=StrToInt(s[7]+s[8]); MTL[i].MatClass[3]:=StrToInt(s[10]+s[11]);
 ReadLn(f,s); MTL[i].Diffuse:=ReadColorFromLine(s);
 ReadLn(f,s); MTL[i].Ambient:=ReadColorFromLine(s);
 ReadLn(f,s); MTL[i].Specular:=ReadColorFromLine(s);
 ReadLn(f,s); MTL[i].Reflect2:=ReadColorFromLine(s);
 ReadLn(f,s); MTL[i].Specular2:=ReadColorFromLine(s);
 ReadLn(f,s); MTL[i].XDiffuse:=ReadColorFromLine(s);
 ReadLn(f,s); MTL[i].XSpecular:=ReadColorFromLine(s);
 ReadLn(f,s); SetLength(s, Length(s)-1); Delete(s, 1, 10); MTL[i].TexName:=s;
 ReadLn(f,s); //Tex2
 ReadLn(f,s); //Tex3
 ReadLn(f,s); //TexFlags
 ReadLn(f,s); //TexOffset
 ReadLn(f,s); //TexScale
 ReadLn(f,s); //TexAngle
 ReadLn(f,s); Delete(s,1,6); MTL[i].Transparency:=StrToInt(s);
 ReadLn(f,s); Delete(s,1,10); MTL[i].SpecProbs[0]:=StrToInt(s[1]+s[2]+s[3]);MTL[i].SpecProbs[1]:=StrToInt(s[5]+s[6]+s[7]);MTL[i].SpecProbs[2]:=StrToInt(s[9]+s[10]+s[11]);
 ReadLn(f,s); Delete(s,1,8); MTL[i].Fresnel[0]:=StrToInt(s[1]+s[2]+s[3]);MTL[i].Fresnel[1]:=StrToInt(s[5]+s[6]+s[7]);MTL[i].Fresnel[2]:=StrToInt(s[9]+s[10]+s[11]);
 ReadLn(f,s); Delete(s,1,8); MTL[i].FallOff[0]:=StrToInt(s[1]+s[2]+s[3]);MTL[i].FallOff[1]:=StrToInt(s[5]+s[6]+s[7]);
end;

CloseFile(f);
end;

Geändert von the3dcloser (19. Aug 2015 um 16:25 Uhr)
  Mit Zitat antworten Zitat