Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Конвертация   Найти похожие ветки 

 
Кирилл ©   (2004-12-23 14:35) [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;


Что я делаю не так?


 
Digitman ©   (2004-12-23 14:42) [1]

а что ты делаешь "не так" ?


> конвертировать файл *.obj


вообще-то *.obj-формат - это формат, генерируемый как правило линкером .. ты б хоть намекнул, какая программа формирует у тебя файл с таким форматом ...


 
Кирилл ©   (2004-12-23 14:49) [2]


> Digitman ©   (23.12.04 14:42) [1]

obj я формирую из *.3ds через 3dexploration


 
Digitman ©   (2004-12-23 14:54) [3]

понятненько ..

ну и что же ты делаешь "не так" ?


 
Кирилл ©   (2004-12-23 14:58) [4]


> Digitman ©   (23.12.04 14:54) [3]

Возникает динамическая ошибка, компилятор показывает на строку s3:=s2[n4+1];


 
Digitman ©   (2004-12-23 15:04) [5]


> Кирилл ©   (23.12.04 14:58) [4]


а отладчик встроенный - он для Пушкина ?


 
Кирилл ©   (2004-12-23 15:29) [6]

Что за отладчик?


 
Кирилл ©   (2004-12-23 15:31) [7]

Что за отладчик?


 
Digitman ©   (2004-12-23 15:46) [8]


> Кирилл ©   (23.12.04 15:31) [7]
> Что за отладчик?


да тот самый .. встроенный в DelphiIDE ..


 
Кирилл ©   (2004-12-23 16:26) [9]


> да тот самый .. встроенный в DelphiIDE ..

Как в него попасть?


 
Кирилл ©   (2004-12-23 16:27) [10]


> да тот самый .. встроенный в DelphiIDE ..

Как в него попасть?


 
Кирилл ©   (2004-12-23 16:27) [11]


> да тот самый .. встроенный в DelphiIDE ..

Как в него попасть?


 
Кирилл ©   (2004-12-23 16:28) [12]


> да тот самый .. встроенный в DelphiIDE ..

Как в него попасть?


 
Digitman ©   (2004-12-23 16:34) [13]

ты что, вообще первый раз слышишь про оной ?
т.е. работаешь в среде делфи чуть ли не в первый раз и сразу же занялся "конвертацией", минуя "Hello, World !" ?

я правильно въехал ?


 
olookin ©   (2004-12-23 16:39) [14]

[13] Digitman ©   (23.12.04 16:34)

Вы не боитесь получить 8 одинаковых вопросов в этот раз?

[4] Кирилл ©   (23.12.04 14:58)

Я полагаю, что n1+4 вылезает за пределы строки (массива символов) s2.


 
Кирилл ©   (2004-12-23 16:41) [15]


> Digitman ©   (23.12.04 16:34) [13]

Я работаю в Делфи менее года; Hello Word я не делал.
Может быть я знаю про этот отладчик, что ты имеешь ввиду?


 
Digitman ©   (2004-12-23 16:46) [16]


> что ты имеешь ввиду?


что имею, то и "введу")

жмакаю клавишу Ф1, ввожу фразу "debugger" в кач-ве модели поиска - и имею тему "Integrated debugger", изучив от корки до корки которую имею потенцию трассировать свое приложение пошагово, контролируя любые значения в своей программе. Чего и тебе искренне желаю.


 
Кирилл ©   (2004-12-23 16:49) [17]


> olookin ©   (23.12.04 16:39) [14]

Я разумеется об этом думал, всё проверил - вроде такого быть не должно... Если даже это так, то что по-вашему нужно менять в коде?


 
olookin ©   (2004-12-23 17:02) [18]

[17] Кирилл ©   (23.12.04 16:49)

ну хотя бы проверять размер:

 if Length(s2)>=(n1+4) then
   s3:=s2[n1+4];

Учтите, что нумерация элементов строки начинается не с 0, а с 1.



Страницы: 1 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.049 c
1-1103554398
torch
2004-12-20 17:53
2005.01.09
Можно ли дебагить .dll- ки?


1-1103537115
Andrey_
2004-12-20 13:05
2005.01.09
Управление модемом


1-1103663979
Bobby Digital
2004-12-22 00:19
2005.01.09
MS Word


4-1100860875
PRM
2004-11-19 13:41
2005.01.09
Как запустить xcopy


14-1103299004
Dert
2004-12-17 18:56
2005.01.09
Движок для чата.