A Alpha II Medlem sedan maj 2000 2 993 inlägg Frågan 30 aug. 2002 13:34 #1 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...
A Alpha II Medlem sedan maj 2000 2 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 E Medlem sedan maj 2002 1 466 inlägg Funktionen StringReplace?
A Alpha II Medlem sedan maj 2000 2 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;
J jt Medlem sedan juni 2000 350 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.
A Alpha II Medlem sedan maj 2000 2 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 :)
A Alpha II Medlem sedan maj 2000 2 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 :(