Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли в типиз. файле сохранить динамический, массив??? 
:(
    Опции темы
Dmitry V.Abramov
Дата 30.10.2003, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.9.2003
Где: Saint-Petersburg

Репутация: 5
Всего: 4



p0s0l Ты забыл еще спросить, - а надо ли ему это вообще... Судя по публикациям classes.pas и усмешкам - не очень то и надо.
--------------------
/DVA
PM MAIL WWW   Вверх
p0s0l
Дата 30.10.2003, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Просто Sniper никак не хочет понять, что от него хотят...
Это моя последняя попытка: "Снайпер, скажите нам, НА ЧТО же всё-таки ССЫЛАЮТСЯ те самые указатели из TLIST ? Т.е. распишите те типы структур/объектов на которые ссылается этот TList."



--------------------
С уважением, г-н Посол.
PM   Вверх
Vit
Дата 30.10.2003, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Цитата(Sniper @ 29.10.2003, 15:33)
Vit
Это надо p0s0l спросить! %-) что в этом коде его смущает!
Он просил: расписать TList - я выполнил его просьбу! %-)

Похоже вы не поняли, что он от Вас хочет. Для программиста на Дельфи модуль classes.pas и классы в нём прописанные, всё равно что 4 арифметических действия для математика - зная уровень p0s0l я не сомневаюсь, что он прекрасно осведомлён и о модуле classes.pas и о классе TList, поэтому попытайтесь понять те вопросы, которые Вам задают и ответить на них, проблема в Вашем понимании задачи, а не понимании нами этого модуля и класса TList. (без обид, Вам действительно хотят помочь, но к сожалению мы должны понять ЧТО именно надо).


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Sniper
Дата 30.10.2003, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



Я понимаю и ценю вашу помощь!

Но я, как сказал Vit, не понимаю что вам дать чтобы вы мне помоги! :-(((((
p0s0l поверь я хочу тебе сказать на что они указываю.... знать бы только как!!
(у меня проект стоит! из-за моей тупизны :-(

публикую все типы которые содержатся в модуле model.pas
Код

Type
   PGLVertex = ^TGLVertex;
   TGLVertex =
   record
     x,y,z : glfloat;
   end;

   PGLVector = ^TGLVector;
   TGLVector = array[0..2] of glfloat;

   PGLFace   = ^TGLFace;
   TGLFace   = array[0..2] of word;

   PGLVertexArray = ^TGLVertexArray;
   TGLVertexArray = array[Word] of TGLVertex;

   PGLFacesArray  = ^TGLFacesArray;
   TGLFacesArray  = array[word] of TGLFace;

   TGMD = class;

   TGMDMesh =
   class
     Vertices,                       // Массив вершин
     FasetNormals,                   // Массив фасетных нормалей
     SmoothNormals : PGLVertexArray; // Массив сглаживающих нормалей
     Faces         : PGLFacesArray;  // Массив граней
     Parent        : TGMD;
   private
     procedure Draw;
   public
     destructor Destroy; override;
   end;

   TGMD = class
     Meshes         : TList;          // Сетки
     CurMesh        : word;           // Текущий кадр
     TexVertices    : PGLVertexArray; // Массив вершин текстуры
     TexFaces       : PGLFacesArray;  // Массив граней текстуры
     {animation speed}
     TimeIsSet      : boolean;
     TimeEnd        : dword;
     {model info}
     MeshCount,                  //meshes count
     MeshVCount,                 //mesh vertices count
     MeshFCount     : word;      //mesh faces count
     isFaset,                    //1=faset normals was included
     isSmooth       : byte;      //1=smooth normals was included
     TexVCount,                  //tex vertices count
     TexFCount      : word;      //tex faces count
     IsOwnTexture   : byte;      //1=texture file was included
     {}
     OwnTexture     : gluint;    //use if texture file included
   public
     procedure SaveToStream1(s : TFileStream);
     procedure LoadFromStream1(s : TFileStream);
     function    LoadFromFile(FileName,ModelName:String):boolean;
     procedure   Draw(StartMesh,EndMesh:word; mps:byte);
     constructor Create;
     destructor  Destroy; override;
   end;


Там дальше по тексту пишу:
Meshes := TList.Create;

Я кажись начинаю понимать, что вам нужно! :-)
вот например:
TexFaces : PGLFacesArray; но PGLFacesArray указывает на ^TGLVertexArray который в свою очередь указывает на array[Word] of TGLVertex; а тот на

TGLVertex = record
x,y,z : glfloat;
end;
так вам нужно вот такое же как эта цепочка, только про TList? Я правильно понял? Если да то для TList ТАКОЙ ЦЕПОЧКИ НЕТ! :-( Он просто берётся из этого ...... classes.pas Тьфу!

Это сообщение отредактировал(а) Sniper - 30.10.2003, 20:46


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
<Spawn>
Дата 30.10.2003, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Sniper Смотри, указатели могут ссылаться на данные разных типов. К примеру, в TList могут быть указатели на тип integer( PInteger), а могут и на целые структуры:

Код
PSomeRec = ^TSomeRec;
TSomeRec = record
  Field1:Byte;
  Field2:Word;
  Field3:string[10];
 end;


Так вот у тебя пытаются выяснить на какой тип данных указывают указатели в TList?? Или они у тебя вообще не типизированные(Pointer)?

К примеру, если бы в TList "сидели" PInteger, то запись могла бы быть примерно такой

Код
for i:=0 to List.Count-1 do
 Запись значения PInteger(List.Items[i])^


Это сообщение отредактировал(а) <Spawn> - 30.10.2003, 23:09


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Sniper
Дата 30.10.2003, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



<Spawn> понятно! wink.gif Ну что я могу ответить.... нету у меня ничего похожего на них только есть такие строчки:

Meshes.Add(ogmd_NextMesh);
TGMDMesh(Meshes.Items[CurMesh]).Draw;

for i:=0 to Meshes.Count-1 do TGMDMesh(Meshes.Items[i]).Destroy;

Больше в модуле нигде не встречается Meshes
а TList описан в classes.pas.... а как уж в этом модуле идут ссылки всем известно!


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
p0s0l
Дата 30.10.2003, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Посмотри какой тип у переменной ogmd_NextMesh - судя по смыслу должно быть TGMDMesh...
Если это так, то тут возникают трудности:
у TGMDMesh есть ссылки на массивы Vertices, FasetNormals, SmoothNormals, Faces, но нет ничего, что могло бы помочь узнать размеры этих массивов - следовательно по той приведенной части кода запись/чтение сделать скорее всего невозможно.
Было бы легче, если бы ты показал метод LoadFromFile, наверняка там эти массивы заполняются...

Это сообщение отредактировал(а) p0s0l - 30.10.2003, 23:26


--------------------
С уважением, г-н Посол.
PM   Вверх
<Spawn>
Дата 30.10.2003, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



p0s0l Хм, я что то не понимаю или ты не обратил внимания, но TGLVertex имеет размер 65536 (SizeOf(Word)) структур, содержащих 3 значения типа Float(в OpenGL почти ко всем типам приделаны приставки gl).


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
p0s0l
Дата 30.10.2003, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Sniper, не надо, ничего не смотри, я протормозил - в TList'е однозначно хранятся переменные типа TGMDMesh (либо его наследники, но это маловероятно, тем более ты привел все типы из того модуля)...

<Spawn>, так вообще-то и делают... Можно было описать TGLVertexArray как array [0..0] of TGLVertex - ничего бы не изменилось. Вернее в последнем варианте с включенной опцией Range Checking вывалилась бы ошибка при обращении, например, к элементу [1]. Но она обычно выключена (по умолчанию).
Просто реальный размер массива задаётся при выделении памяти:
var p : PGLVertexArray;
GetMem (p, 1024*SizeOf(TGLVertex)); // это массив из 1024 элементов



--------------------
С уважением, г-н Посол.
PM   Вверх
Unregistered
Дата 1.11.2003, 18:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











p0s0l
я сделал так s.Write(Meshes, SizeOf(TList));
и 60kb в файле файле конфигурации прибавилось, а было 40 байт! %-)
Я чувстую что я правильно сделал!?
  Вверх
Sniper
Дата 1.11.2003, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



p0s0l
я сделал так s.Write(Meshes, SizeOf(TList));
и 60kb в файле файле конфигурации прибавилось, а было 40 байт! %-)
Я чувстую что я правильно сделал!?


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
Dmitry V.Abramov
Дата 1.11.2003, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 30.9.2003
Где: Saint-Petersburg

Репутация: 5
Всего: 4



Sniper На этот раз предчувствия тебя обманывают...

SizeOf(TList))=SizeOf(TForm)=SizeOf(T_Что_угодно_порожденное_от_TObject)=4. Везде. Даже если Папа Римский наберет сейчас дрожащими руками в католическом Delphi "writeln(SizeOf(TList))", то сниспослано ему в ответ будет число 4. И это правильно. И это можно не знать, а нужно просто помнить. Как 2х2.

А передачу Meshes в качестве параметра на запись - обязательно надо предложить Borland'у. А то понагородили тут какие-то RTTI, {M+}, TPersistent, TWriter, TReader... Попутно выдумали "проблему сохранения и восстановления классов" на нашу голову... А ее, оказывается, нет - сохраним 4 байта адреса из Heap - и хватит. Но! Главное - не выдать врагу этот метод! Пусть это будет нашим секретом.

Резюме: ответ отрицательный.
--------------------
/DVA
PM MAIL WWW   Вверх
Sniper
Дата 1.11.2003, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 511
Регистрация: 8.5.2002

Репутация: нет
Всего: 2



Dmitry V.Abramov Но у меня файл весит не 4 байта, а 60KB!!!!
Что же он тогда сохраняетconfused.gif?


--------------------
"Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный".
Кен Томпсон, создатель Unix
PM MAIL   Вверх
p0s0l
Дата 2.11.2003, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Sniper, дак ведь ты не один меш сохраняешь в файл ? Из-за этого и получается такой размер...


--------------------
С уважением, г-н Посол.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0717 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.