ich versuche aus einer .obj Datei die Daten für ein 3d Mesh zu laden.
ich benötige die Anzahl der Zeilen die mit v, vn und f beginnen.
Ob das erste Zeichen i.o. ist funktioniert, jedoch wenn ich die 2. Stelle im String auf ein Zeichen prüfe, liefert das Programm mir unsinnige Werte..
Mein Ansatz:
Code: Alles auswählen
procedure TForm1.Liste;
var
StringListe : TStringlist;
z,i,j,t: integer;
TempString : String[255];
TeilString1 : String[13];
TeilString2 : String[13];
TeilString3 : String[13];
zaehler_v : integer;
zaehler_vn : integer;
zaehler_f : integer;
begin
memo1.Clear;
StringListe := TStringlist.Create;
Stringliste.LoadFromFile('model\untitled.obj');
I:=Stringliste.Count;
//rausfinden wieviele v,vn und f vorhanden sind
zaehler_v := 0;
zaehler_vn := 0;
zaehler_f := 0;
For Z:=0 to I-1 do
begin //nur Vektoren ausfiltern
TempString := Stringliste.Strings[z];
If TempString[1] = 'v' then
begin
if TempString[2] =' ' then inc(zaehler_v);
end;
end;
begin //nur VN ausfiltern
TempString := Stringliste.Strings[z];
If TempString[1] = 'v' then
begin
if TempString[2] ='n' then inc(zaehler_vn);
end;
end;
begin //nur f ausfiltern
TempString := Stringliste.Strings[z];
If TempString[1] = 'f' then
begin
if TempString[2] =' ' then inc(zaehler_f);
end;
end;
memo1.Lines.Add(IntToStr(zaehler_v));
memo1.Lines.Add(IntToStr(zaehler_vn));
memo1.Lines.Add(IntToStr(zaehler_f));
//Einlesen der Variablen
For Z:=0 to I-1 do
begin //nur Vektoren ausfiltern
TempString := Stringliste.Strings[z];
If TempString[1] = 'v' then
begin
if TempString[2] =' ' then
memo1.Lines.Add(Stringliste.Strings[z]);
begin //3 Variablen auslesen
//1. Variable
j:=2;
t:=0;
TeilString1:=' ';
repeat
inc(j);
if Zeichenprobe(TempString,j)=true then
begin
inc(t);
TeilString1[t]:=TempString[j];
end;
until Zeichenprobe(TempString,j) = false;
Memo1.Lines.Add(TeilString1);
//2. Variable
t:=0;
TeilString2:=' ';
repeat
inc(j);
if Zeichenprobe(TempString,j)=true then
begin
inc(t);
TeilString2[t]:=TempString[j];
end;
until Zeichenprobe(TempString,j) = false;
Memo1.Lines.Add(TeilString2);
//3. Variable
t:=0;
TeilString3:=' ';
repeat
inc(j);
if Zeichenprobe(TempString,j)=true then
begin
inc(t);
TeilString3[t]:=TempString[j];
end;
until Zeichenprobe(TempString,j) = false;
Memo1.Lines.Add(TeilString3);
end;
end;
begin //nur VN ausfiltern
TempString := Stringliste.Strings[z];
If TempString[1] = 'v' then
begin
if TempString[2] ='n' then
memo1.Lines.Add(Stringliste.Strings[z]);
end;
end;
begin //nur f ausfiltern
TempString := Stringliste.Strings[z];
If TempString[1] = 'f' then
begin
if TempString[2] =' ' then
memo1.Lines.Add(Stringliste.Strings[z]);
end;
end;
end;
end;
Code: Alles auswählen
# Blender v2.77 (sub 0) OBJ File: ''
# http://www.blender.org
mtllib untitled.mtl
o Cube
v 1.850858 0.425167 -0.321171
v 1.850858 0.425167 1.678829
v -0.149142 0.425167 1.678829
v -0.149141 0.425167 -0.321172
v 1.850859 2.425167 -0.321171
v 1.850858 2.425167 1.678829
v -0.149142 2.425167 1.678828
v -0.149141 2.425167 -0.321171
vn 0.0000 -1.0000 -0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 1//1 2//1 3//1 4//1
f 5//2 8//2 7//2 6//2
f 1//3 5//3 6//3 2//3
f 2//4 6//4 7//4 3//4
f 3//5 7//5 8//5 4//5
f 5//6 1//6 4//6 8//6