Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
Кирилл ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.107 c
14-1103731070
Almaz
2004-12-22 18:57
2005.01.09
Каталог оптовых цен на продукты питания в 2003 г.


6-1098441484
Кодер
2004-10-22 14:38
2005.01.09
Буфер неопределенной заранее длины через Сокет


14-1103147175
palva
2004-12-16 00:46
2005.01.09
Ремонт видеомагнитофона или новый купить?


6-1098110070
L.evil
2004-10-18 18:34
2005.01.09
Локальная сеть


6-1098342701
AngelFire
2004-10-21 11:11
2005.01.09
Получение локального IP-адреса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский