W3DEditor v. 2.3??? - Страница 4 - Форум
W4Tweaks
Меню сайта
Последние файлы
Последние темы


Вход



Мини-чат
 
500

Статистика
Онлайн:

Сегодня заходили: 4erveR, Unaited, 12sunflowers


Друзья сайта

Если вы хотите увидеть в этом спиcке свой сайт загляните сюда

Наш баннер:



· Регистрация · Вход
[ Новые сообщения · Участники · Подписки · Поиск · RSS ]
Страница 4 из 9«12345689»
Форум » Общие навыки » W3DMapEditor by Alexbond (Уроки, Вопросы) » W3DEditor v. 2.3???
W3DEditor v. 2.3???
AlexBond
Дата: ПТ, 23.07.2010, 21:50:38 | Сообщение # 46
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Как альтернатива - сохранение всего дерева. при каждом малейшем изменении...
Но опять же это не оптимизировано...

Тогда еще версия - выборочное сохранение... но тут опять загвоздка... если сразу сохранял лишь поксель то он был приклеен к какому-то адресу, а потом всю карту... при восстановлении опять адреса спутаются...

Может использовать Кодовые деревья? и сохранять поксель в стек с адресом вида ABNK, который означает
Ветвь A - Ветвь B - Ветвь - N - Ветвь K


 
AlexBond
Дата: ПТ, 23.07.2010, 22:04:12 | Сообщение # 47
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Изучаю статьи по Undo Redo
http://www.equin.co.uk/articles/undoarticle.htm
http://www.codeproject.com/KB/cs/undoredobuffer.aspx

http://www.rsdn.ru/article/dotnet/backforward.xml

http://www.codeproject.com/kb/docview/undo.aspx
http://www.codeproject.com/KB/atl/undomgr.aspx?target=undo


 
Герыч
Дата: ПТ, 23.07.2010, 23:22:49 | Сообщение # 48
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
Похоже ты опять меня не совсем понял)

Вот пример(каждое дерево хранит только ссылки на объекты!):

Загружаем редактор.
В стеке отмен лежит одно дерево только с указателем на Root элемент.
Отображается текущее состояние.

Добавляем поксель.
Выделяется память под новый поксель.
В стек добавляется копия этого дерева на верху стэка, но в новую копию добавлен указатель на поксель.
Отображается текущее состояние.

Удаляем поксель.
Реально в памяти остаётся тот поксель, однако на основе прошлого дерева строится новое без указателя на поксель.
Отображается текущее состояние.

Жмём Undo.
Стек остаётся в целости-сохранности, только за текущее состояние принимается прошлое.
Отображается текущее состояние.

Жмём Redo.
Стек остаётся в целости-сохранности, только за текущее состояние самое новое.
Отображается текущее состояние.

Жмём Undo.
Меняем текущее состояние.
Отображается текущее состояние.

Жмём Undo.
Меняем текущее состояние.
Отображается текущее состояние. (мы на начальном, где не было покселя)

Создаём новый поксель.
Выделяется память под новый поксель.
В стек добавляется копия дерева со дна стэка, в новую копию добавлен указатель на новый поксель.
Два других дерева удаляются, так как они больше не достижимы с помощью Undo/Redo.
Если в дельфях есть сборщик мусора - то он всё приберёт(удалит поксель, на который нет ссылки), иначе для всех объектов надо бы хранить ссылку на самое раннее дерево, где он появился и при удалении этого дерева удалять и объект.
Отображается текущее состояние.

Как-то так. Предельно разжёвано.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Дата: ПТ, 23.07.2010, 23:29:44 | Сообщение # 49
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
Про перемещение объектов в пространстве: надо производить изменение в стеке только при отпускании мыши.

Ну да, наверно не стек, а 2 стека, как описано вот тут http://www.rsdn.ru/article/dotnet/backforward.xml


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Дата: СБ, 24.07.2010, 01:45:41 | Сообщение # 50
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Так... вопрос, что мы записываем в стек, когда изменяем лишь позицию? или положение одной точки, или координаты.

 
Герыч
Дата: СБ, 24.07.2010, 20:54:12 | Сообщение # 51
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
А, я понял проблему) При добавлении покселя мой вариант на ура, а вот его изменение подразумевает создание полной его копии, создание копии дерева указателей, в котором указатель на поксель заменён новым.
Это лажа...
Тогда можно хранить, как в той статье, только инфу об изменении конкретного объекта. Но в этом случае придётся хранить и команды создания и удаления покселей.


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Дата: СБ, 24.07.2010, 22:04:24 | Сообщение # 52
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Вот пример как действует 3DSMAX MacroRecodred

Code

actionMan.executeAction 0 "40472"  -- MAX Script: MAXScript Listener
select $Cylinder01
macros.run "Objects Primitives" "Cylinder"
Cylinder smooth:on heightsegs:5 capsegs:1 sides:18 height:16.6061 radius:35.2207 mapcoords:on pos:[-24.0269,-15.1289,0] isSelected:on
Cylinder smooth:on heightsegs:5 capsegs:1 sides:18 height:12.9038 radius:5.82835 mapcoords:on pos:[-28.6992,-74.3184,0] isSelected:on
max select
select $Torus01
select $Cylinder02
select $Cylinder01
select $Box01
select $Cylinder03
actionMan.executeAction 0 "40020"  -- Edit: Delete Objects
max delete
select $Torus01
actionMan.executeAction 0 "40020"  -- Edit: Delete Objects
max delete
select $Cylinder02
actionMan.executeAction 0 "40020"  -- Edit: Delete Objects
max delete
select $Cylinder01
actionMan.executeAction 0 "40020"  -- Edit: Delete Objects
max delete
select $Box01
actionMan.executeAction 0 "40020"  -- Edit: Delete Objects
max delete

или вот:

Code
select $Sphere01
max tool zoomextents
max tool zoomextents all
max modify mode
macros.run "Modifier Stack" "Convert_to_Mesh"
subobjectLevel = 1
modPanel.setCurrentObject $Sphere01.baseObject
select $Sphere01.baseObject.verts[#{101}]
max move
toolMode.coordsys #view
move $Sphere01.verts[#{101}] [-9.71286,-11.2686,0]
move $Sphere01.verts[#{101}] [0,0,8.71245]
max rotate
subobjectLevel = 0
modPanel.setCurrentObject $Sphere01.baseObject
$Sphere01.rotation = quat 0.747506 -0.166976 0.04144 0.641589
max scale
$Sphere01.scale = [1,1.36294,1]
max move
$Sphere01.pos = [42.4191,-24.5008,120.968]
clearSelection()
select $Sphere01
actionMan.executeAction 0 "40020"  -- Edit: Delete Objects
max delete


 
AlexBond
Дата: СБ, 24.07.2010, 22:38:01 | Сообщение # 53
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Короче надо придумать структуру Состояний которое будет в стек записываться... иначе не получится....

 
AlexBond
Дата: ПН, 26.07.2010, 12:39:58 | Сообщение # 54
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Итак, мысли следующие:

Сбор состояния. PushState(type,point)
Будет иметь два параметра - тип:
Pos, Size, Rot, Clip, TextCoord, Layers, Hmap, Color, Poxel

И ссылку на адрес этих переменных( @Tver)

Буфер состояний будет хранить лишь копии этих структур, но не поксель.
Поксель будет записываться в память лишь при удаления или перестройки.
В итоге нажав отмена, я воссоздаю поксель, а потом провожу над ним все изменения.

Единственная проблема - удаления ветви из дерева. Ведь адрес тоже удалиться, а воссоздать тот же адрес нельзя. Поэтому поксель нужно прикреплять не к адресу, а как-то по другому... Пока еще не знаю как, но придумаю...


 
AlexBond
Дата: ВС, 01.08.2010, 11:36:08 | Сообщение # 55
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Redo и Undo работают, для всех изменений с покселем, лимита нет!
Одна проблема... причем большая...

Нужно придумать, как сохранять состояние при удалении и создании покселя.

В стеках у меня хранятся данные следующего вида:

Code
type
         TPushType=(PT_Select, PT_Delete, PT_Pos,PT_Size,PT_Rot,PT_Clip,PT_Name,PT_EBS,PT_TextCoord,
         PT_Surface,PT_TextCode,PT_Layers,PT_HMAP,PT_Poxel);

  TStackCell = class
   PushType:TPushType;
   Vector:TVector;
   Str:String;
   TextCoord: array[1..16] of GLfloat;
   Layers1: ALayer;
   Layers2: ALayer;
   HMapVals: THmap;
   Surcface: array [1..3] of Integer;
   PoxelsTextCode: array of Cardinal;
   Poxel:TPoxel;
   Next:TStackCell;
   end;

Проблема в том, что я не знаю как обращаться к удаленному покселю... Ведь адрес и ветвь у него изменяться, при восстановлении...

К примеру в 3DSMAX выделяют командой Select $Object01. У меня же выделяется одновременно и ветвь покселя в дереве TTreeNode, и сам поксель TPoxel, причем они друг на друга ссылаются. Которые имеют уникальные адреса и обращаться к удаленному адресу я не могу...

Нужно создать уникальный идентификатор, который будет сохраняться при копировании, и по нему обращаться к покселю...


 
AlexBond
Дата: ПН, 02.08.2010, 21:43:50 | Сообщение # 56
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Undo и Redo работают!!! но с ошибками... после отладки всех ошибок angry выпущу новую версию редактора!!!

 
Sergey
Дата: ВТ, 03.08.2010, 09:25:47 | Сообщение # 57
Sergey
Его узнают в чате
Группа: Проверенные
Сообщений: 814
Репутация: 37
Статус: Offline
biggrin эт очень хорошо!

Администрация имеет право кастрировать пользователей сайта!
 
analiener
Дата: ВТ, 03.08.2010, 10:06:35 | Сообщение # 58
analiener
Завсегдатай
Группа: Проверенные
Сообщений: 382
Репутация: 8
Статус: Offline
про вот это никто не вспомнил
http://w4tweaks.ru/forum/98-857-1








Умом Упячку не понять,
Аршином общим не измерить.
Упячку надо посещать!
В Упячку надо просто верить...
 
Sergey
Дата: ВТ, 03.08.2010, 11:10:10 | Сообщение # 59
Sergey
Его узнают в чате
Группа: Проверенные
Сообщений: 814
Репутация: 37
Статус: Offline
уже да

Администрация имеет право кастрировать пользователей сайта!
 
AlexBond
Дата: ПТ, 06.08.2010, 10:01:26 | Сообщение # 60
AlexBond
Легендарный червь
Группа: Админы
Сообщений: 1029
Репутация: 105
Статус: Offline
Нужны тестеры W3DMapEditor v2.3.

Требования:

- ответственность
- терпение
- знание большинства функций редактора карт
- сообразительность.

Цели:

- изучения работоспособности редактора
- поиск ошибок
- запись места и действия приведшего к ошибке
- отладка всех видимых и невидимых ошибок

При желании помочь, пишите.


 
Форум » Общие навыки » W3DMapEditor by Alexbond (Уроки, Вопросы) » W3DEditor v. 2.3???
Страница 4 из 9«12345689»
Поиск:

Copyright W4Tweaks™ 2008-2016 Хостинг от uCoz