W3DEditor v. 2.3???
|
|
Сообщений: 1042
|
Опубликовано: 22.07.2010, 23:23:55
Добавлена функция Delete. Удаляется выделеный поксель, вызывается кнопкой Delete!!! Обдумываю функции Redo/Undo
|
|
|
|
Сообщений: 3813
|
Опубликовано: 23.07.2010, 00:31:20
Quote (AlexBond) Добавлена функция Delete. Удаляется выделеный поксель, вызывается кнопкой Delete!!! Обдумываю функции Redo/Undo Оо... дельное изменение... Новая версия это похоже будет нечто)
Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005) Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007) Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)
mod.worms.pro - мод Worms Renewation для Worms4
|
|
|
|
Сообщений: 336
|
Опубликовано: 23.07.2010, 13:37:51
Предлагаю сделать шаблон червя в редакторе, ну например, чтобы "примерить" карту или чтобы сделать вход по размеру Да, а можно ли сделать в редакторе функцию Boolein А как на счёт подвижной камеры? Ну как в игре на М
|
|
|
|
Сообщений: 1240
|
Опубликовано: 23.07.2010, 19:12:49
По поводу Undo/Redo на всякий случай напомню про эти посты: http://w4tweaks.ru/forum/91-710-13273-16-1264089437 http://w4tweaks.ru/forum/91-710-13280-16-1264095566
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.07.2010, 21:07:36
Как быть с удалением покселей? Вот я удалил поксель, потом нажал отмена поксель вернулся. Нажал повтор, поксель опять удалился... спрашивается удаление производится физическое, но создаем копию, если же возвращаем состояние копия уже будет содержать иной адрес. Вот к примеру ситуация: Имеется дерево из покселей. Я к примеру удалил с начало 3-й элемент дерева привязанный ко второму по адресу, Затем удалил второй элемент дерева привязанный к первому. Захотел отменить два действия. Допустим второй элемент я воссоздаю из стека, но он принимает новый адрес, так как создается заново. Вторая отмена приведет к ошибке, так как адрес к которому нужно прикрепить воссозданный 3й элемент, уже изменился... Короче гемор... а если я так удалю много... все адреса поменяются... Куда я буду прикреплять поксели из стека? Еще, как я понял добавление состояние в стек нужно делать при каждом изменении. К примеру когда мы перемещаем мышью поксель, добавлять нужно или до начала перемещения или после. Тут проблема отловки этого события, ведь EditX на прямую пишет значения в Poxel и надо переделать этот компонент...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 23.07.2010, 21:50:38
Как альтернатива - сохранение всего дерева. при каждом малейшем изменении... Но опять же это не оптимизировано... Тогда еще версия - выборочное сохранение... но тут опять загвоздка... если сразу сохранял лишь поксель то он был приклеен к какому-то адресу, а потом всю карту... при восстановлении опять адреса спутаются... Может использовать Кодовые деревья? и сохранять поксель в стек с адресом вида ABNK, который означает Ветвь A - Ветвь B - Ветвь - N - Ветвь K
|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 23.07.2010, 23:22:49
Похоже ты опять меня не совсем понял) Вот пример(каждое дерево хранит только ссылки на объекты!): Загружаем редактор. В стеке отмен лежит одно дерево только с указателем на Root элемент. Отображается текущее состояние. Добавляем поксель. Выделяется память под новый поксель. В стек добавляется копия этого дерева на верху стэка, но в новую копию добавлен указатель на поксель. Отображается текущее состояние. Удаляем поксель. Реально в памяти остаётся тот поксель, однако на основе прошлого дерева строится новое без указателя на поксель. Отображается текущее состояние. Жмём Undo. Стек остаётся в целости-сохранности, только за текущее состояние принимается прошлое. Отображается текущее состояние. Жмём Redo. Стек остаётся в целости-сохранности, только за текущее состояние самое новое. Отображается текущее состояние. Жмём Undo. Меняем текущее состояние. Отображается текущее состояние. Жмём Undo. Меняем текущее состояние. Отображается текущее состояние. (мы на начальном, где не было покселя) Создаём новый поксель. Выделяется память под новый поксель. В стек добавляется копия дерева со дна стэка, в новую копию добавлен указатель на новый поксель. Два других дерева удаляются, так как они больше не достижимы с помощью Undo/Redo. Если в дельфях есть сборщик мусора - то он всё приберёт(удалит поксель, на который нет ссылки), иначе для всех объектов надо бы хранить ссылку на самое раннее дерево, где он появился и при удалении этого дерева удалять и объект. Отображается текущее состояние. Как-то так. Предельно разжёвано.
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1240
|
Опубликовано: 23.07.2010, 23:29:44
Про перемещение объектов в пространстве: надо производить изменение в стеке только при отпускании мыши. Ну да, наверно не стек, а 2 стека, как описано вот тут http://www.rsdn.ru/article/dotnet/backforward.xml
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.07.2010, 01:45:41
Так... вопрос, что мы записываем в стек, когда изменяем лишь позицию? или положение одной точки, или координаты.
|
|
|
|
Сообщений: 1240
|
Опубликовано: 24.07.2010, 20:54:12
А, я понял проблему) При добавлении покселя мой вариант на ура, а вот его изменение подразумевает создание полной его копии, создание копии дерева указателей, в котором указатель на поксель заменён новым. Это лажа... Тогда можно хранить, как в той статье, только инфу об изменении конкретного объекта. Но в этом случае придётся хранить и команды создания и удаления покселей.
________________________ __|____|____|____|____|__ |____|____|____|____|____| __|___бицца головой___|__ |____|____|сюда|____|____| __|____|____|____|____|__ |____|____|____|____|____|
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.07.2010, 22:04:24
Вот пример как действует 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
|
|
|
|
Сообщений: 1042
|
Опубликовано: 24.07.2010, 22:38:01
Короче надо придумать структуру Состояний которое будет в стек записываться... иначе не получится....
|
|
|
|
Сообщений: 1042
|
Опубликовано: 26.07.2010, 12:39:58
Итак, мысли следующие: Сбор состояния. PushState(type,point) Будет иметь два параметра - тип: Pos, Size, Rot, Clip, TextCoord, Layers, Hmap, Color, Poxel И ссылку на адрес этих переменных( @Tver) Буфер состояний будет хранить лишь копии этих структур, но не поксель. Поксель будет записываться в память лишь при удаления или перестройки. В итоге нажав отмена, я воссоздаю поксель, а потом провожу над ним все изменения. Единственная проблема - удаления ветви из дерева. Ведь адрес тоже удалиться, а воссоздать тот же адрес нельзя. Поэтому поксель нужно прикреплять не к адресу, а как-то по другому... Пока еще не знаю как, но придумаю...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 01.08.2010, 11:36:08
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, причем они друг на друга ссылаются. Которые имеют уникальные адреса и обращаться к удаленному адресу я не могу... Нужно создать уникальный идентификатор, который будет сохраняться при копировании, и по нему обращаться к покселю...
|
|
|
|
Сообщений: 1042
|
Опубликовано: 02.08.2010, 21:43:50
Undo и Redo работают!!! но с ошибками... после отладки всех ошибок выпущу новую версию редактора!!!
|
|
|
|
Сообщений: 814
|
Опубликовано: 03.08.2010, 09:25:47
эт очень хорошо!
Администрация имеет право кастрировать пользователей сайта!
|
|
|
|
|
Сообщений: 814
|
Опубликовано: 03.08.2010, 11:10:10
уже да
Администрация имеет право кастрировать пользователей сайта!
|
|
|
|
Сообщений: 1042
|
Опубликовано: 06.08.2010, 10:01:26
Нужны тестеры W3DMapEditor v2.3. Требования: - ответственность - терпение - знание большинства функций редактора карт - сообразительность. Цели: - изучения работоспособности редактора - поиск ошибок - запись места и действия приведшего к ошибке - отладка всех видимых и невидимых ошибок При желании помочь, пишите.
|
|
|
|