Alpha IIMedlem sedan maj 20002 993 inlägg Hur läser man igenom en textfil så att man får variablarna X, Y och Z?
Textfilen ser ut så här:
Vertex 0: X:-31.8621 Y:29.8309 Z:5.7799
Vertex 1: X:-31.8621 Y:-20.1691 Z:5.7799
Vertex 2: X:-21.1474 Y:29.8309 Z:0.9133
Vertex 3: X:-21.1474 Y:-20.1691 Z:0.9133
Vertex 4: X:-31.8621 Y:29.8309 Z:21.3961
osv...
testade med:
X := StrToFloat(Trim(Copy(S, 12 + Length(IntToStr(i)), 13)));
Y := StrToFloat(Trim(Copy(S, 27 + Length(IntToStr(i)), 13)));
Z := StrToFloat(Trim(Copy(S, 39 + Length(IntToStr(i)), 13)));
Men jag får bara felmedelanden...
Alpha IIMedlem sedan maj 20002 993 inlägg Glöm den där frågan... Tror jag vet hur jags ska fixa det. Men jag måste ersätta '.' med ',' hur gör jag det??
Marcus EMedlem sedan maj 20021 466 inlägg Funktionen StringReplace?
Alpha IIMedlem sedan maj 20002 993 inlägg Gick inte så bra som jag trodde.... grrrr..... blir hel konstigt.... varför returnerar inte StrPos en integer istllet för en PChar pekare??? :o Blir acces violation eller nått :OO
for i := 0 to Vertices-1 do begin
glBegin(GL_TRIANGLES);
ReadLn(F, S);
Pos := StrToInt(StrPos(PChar(S), PChar('X')));
X := StrToFloat(StringReplace(Trim(Copy(S, Pos + 2, 10)), '.', ',', [rfReplaceAll]));
Pos := StrToInt(StrPos(PChar(S), PChar('Y')));
Y := StrToFloat(StringReplace(Trim(Copy(S, Pos + 2, 10)), '.', ',', [rfReplaceAll]));
Pos := StrToInt(StrPos(PChar(S), PChar('Z')));
Z := StrToFloat(StringReplace(Trim(Copy(S, Pos + 2, Length(S)-(Pos+29)-1)), '.', ',', [rfReplaceAll]));
glVertex3f(X, Y, Z);
glEnd();
end;
jtMedlem sedan juni 2000350 inlägg Du kanske skulle testa Pos istället.
Såg att du använder en variabel som heter Pos, jag menar funktionen System.Pos.
Alpha IIMedlem sedan maj 20002 993 inlägg Hmm fattor inte varför men Position får värdet 0 :(
procedure TASCObject.LoadASCFile(Filename: String);
var
F: TextFile;
S: String;
Position: Integer;
I: Integer;
Vertices: Integer;
X, Y, Z: GLfloat;
begin
AssignFile(F, Filename);
Reset(F);
ReadLn(F, S);
ReadLn(F, S);
Vertices := StrToInt(Trim(Copy(S, 20, 8)));
ReadLn(F, S); // Move down 1 line
Obj := glGenLists(1);
glNewList(Obj, GL_COMPILE);
for i := 0 to Vertices-1 do begin
glBegin(GL_TRIANGLES);
ReadLn(F, S);
Position := Pos(S, 'X:');
X := StrToFloat(StringReplace(Trim(Copy(S, Position + 2, 10)), '.', ',', [rfReplaceAll]));
Position := Pos(S, 'Y:');
Y := StrToFloat(StringReplace(Trim(Copy(S, Position + 2, 10)), '.', ',', [rfReplaceAll]));
Position := Pos(S, 'Z:');
Z := StrToFloat(StringReplace(Trim(Copy(S, Position + 2, Length(S)-(Position+2)-1)), '.', ',', [rfReplaceAll]));
glVertex3f(X, Y, Z);
glEnd();
end;
glEndList();
end;
ojdå ;) hade skrivit pos(s, 'x') istället för pos('x', s) som det skulle vara :)
Alpha IIMedlem sedan maj 20002 993 inlägg Eller finns det nån färdig kod för delphi att ladda 3d objekt i format som man kan spara i från 3dsmax?
Hittade en kod att ladda 3ds filer. problemet var att det var c++ och 1000 rader... lite för mycket att konvertera :(