Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизКонвертация Найти похожие ветки
← →
Кирилл © (2004-12-23 14:34) [0]Простите что суюсь сюда с такими пустяками, стыдно конечно, но я уже потерял надежду. Мне нужно конвертировать файл *.obj в текстовый файл, в котором данные идут в следующем порядке:
Описание вершин
Описание текстурных координат
Описание нормалей
Вот мой код:Const
Objects=1000;
...
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button1: TButton;
Label1: TLabel;
...
procedure TForm1.Button1Click(Sender: TObject);
Var
Ind, Ind2: Integer;
Number, n, n2, n3, n4, i, stage: Integer;
SObj: array[0..Objects-1] of string;
List1: TMemo;
File1, File2: textfile;
ListV, ListT, ListN, ListF, List2: array[0..Objects-1] of TMemo;
s, s2, s4: string;
s3: Char;
SObjects: string;
numV, numT, numN: Integer;
begin
{$HINTS OFF}
Number:=0;
n:=0;
n2:=0;
n3:=0;
n4:=0;
i:=0;
stage:=0;
Ind:=0;
Ind2:=0;
s:="";
s2:="";
s3:=Chr(0);
s4:="";
SObjects:="";
NumV:=0;
NumN:=0;
NumT:=0;
List1:=TMemo.CreateParented(Form1.Handle);
For Ind:=0 to objects-1 do begin
ListV[Ind]:=TMemo.CreateParented(Form1.Handle);
ListT[Ind]:=TMemo.CreateParented(Form1.Handle);
ListN[Ind]:=TMemo.CreateParented(Form1.Handle);
ListF[Ind]:=TMemo.CreateParented(Form1.Handle);
List2[Ind]:=TMemo.CreateParented(Form1.Handle);
end;
OpenDialog1.Execute;
SaveDialog1.Execute;
AssignFile(File1, OpenDialog1.FileName);
Reset(File1);
While not eof(file1) do begin
ReadLn(File1, s);
If Copy(S, 0, 1)="g" then begin
Number:=Number+1;
SObj[Number-1]:=Copy(s, 2, length(s)-2);
end;
If Copy(S, 0, 1)="v" then begin
s2:=Copy(s, 2, length(s)-2);
ListV[Number-1].Lines.Add(s2);
end;
If Copy(S, 0, 2)="vt" then begin
s2:=Copy(s, 3, length(s)-3);
ListT[Number-1].Lines.Add(s2);
end;
If Copy(S, 0, 2)="vn" then begin
s2:=Copy(s, 3, length(s)-3);
ListN[Number-1].Lines.Add(s2);
end;
If Copy(S, 0, 1)="f" then begin
s2:=Copy(s, 2, length(s)-2);
ListF[Number-1].Lines.Add(s2);
end;
end;
While n<=Number-1 do begin
While n2<=ListF[n].Lines.Count-1 do begin
s2:=ListF[n].Lines[n2];
n3:=length(s2);
While n4+1<=n3 do begin
s3:=s2[n4+1];
Case s3 of
"0".."9": s4:=s4+s3;
"/": begin
stage:=stage+1;
If stage=3 then stage:=0;
i:=StrToInt(s4);
Case stage of
0: begin
s2:=ListV[n].Lines[i-NumV];
List2[n].Lines.Add(s2);
end;
1: begin
s2:=ListT[n].Lines[i-NumT];
List2[n].Lines.Add(s2);
end;
2: begin
s2:=ListN[n].Lines[i-NumN];
List2[n].Lines.Add(s2);
stage:=0;
end;
end;
end;
" ", #13: s4:="";
end;
stage:=0;
n4:=n4+1;
end;
n4:=0;
n2:=n2+1;
end;
n2:=0;
NumV:=NumV+ListV[n].Lines.Count-1;
NumT:=NumT+ListT[n].Lines.Count-1;
NumN:=NumN+ListN[n].Lines.Count-1;
n:=n+1;
Sobjects:=SObjects+Sobj[n]+" "+IntToStr(ListF[n].Lines.Count*3)+" точек"+#13;
end;
For Ind:=0 to Number-1 do begin
For Ind2:=0 to List2[Ind].Lines.Count-1 do begin
List1.Lines.Add(List2[ind].Lines[Ind2]);
end;
end;
CloseFile(File1);
AssignFile(File2, SaveDialog1.FileName);
Rewrite(File2);
For Ind:=0 to List1.Lines.Count-1 do begin
s:=List1.Lines[Ind];
WriteLn(File2, s);
end;
CloseFile(File2);
Label1.Caption:=SObjects;
List1:=nil;
List1.Destroy;
For Ind:=0 to objects-1 do begin
ListV[Ind]:=nil;
ListT[Ind]:=nil;
ListN[Ind]:=nil;
ListF[Ind]:=nil;
List2[Ind]:=nil;
ListV[Ind].Destroy;
ListT[Ind].Destroy;
ListN[Ind].Destroy;
ListF[Ind].Destroy;
List2[Ind].Destroy;
end;
end;
Что я делаю не так?
← →
Кирилл © (2004-12-23 14:41) [1]Эта ветка попала случайно, т.к. форум очень плохо грузится
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c