Название: Клонирование Отправлено: Igors от Сентября 05, 2016, 10:47 Добрый день
Есть объекты в виде иерархии/дерева. Каждый объект имеет много всякого добра, напр "геометрию", "материал" (цвета, текстуры и.т.п.). И вот поставлена задача создания "клонов". Юзер выбирает нод в дереве и жмет бубочку "Clone". Копируется только нод, без child'ов (вот он - клон), но его child'ы как бы все равно существуют и в окнах отображаются, просто в дереве их нет. Смысл в том что клонированный child своих данных имеет очень мало, в основном юзает данные "оригинала". Клон (родительский нод) помнит все оригиналы и умеет их рисовать. Можно подходить и проще - объект "хранит только изменения", а остальные данные - использует тело др объекта. И тут возникает проблема - child'ам клона может потребоваться больше своих данных. Напр оригинал имеет один материал (синий), а юзер хочет назначить другой (красный). Каким образом юзер это может сделать? Ведь child'ов клона в иерархии нет - и данных для них нет. И окно где можно задать цвет никак не вызвать. Как же должно быть организовано UI в таком случае? Подкиньте идеек Спасибо Название: Re: Клонирование Отправлено: ssoft от Сентября 05, 2016, 11:05 Могу предложить способ организации данных, в котором каждый из элементов дерева всегда хранит только изменения (например, map< key, variant >). Элемент предоставляет собственные данные, если у него они есть, или обращаемся к верхнему в иерархии элементу, если данных нет; до тех пор, пока не получим данные или не закончится дерево.
Тогда клонирование означает формирование промежуточного элемента дерева сразу после клонируемого. Название: Re: Клонирование Отправлено: qate от Сентября 05, 2016, 12:32 в момент изменения создавать копию и изменять
clone = node clone.some_param = green Название: Re: Клонирование Отправлено: Racheengel от Сентября 05, 2016, 13:00 А в чем проблема показывать чилдов клона в иерархии?
Ведь они же физически существуют. А их отсутствие будет только путать юзара, он начнет биться в истерике и писать баг-репорты. Добавим чилдов, покажем их параметры как "наследованные" (например, "серым" цветом или еще как). Если юзер тыкнул на параметр и поменял его - то вместо "серого" параметр должен стать активным. Кактотаг. Название: Re: Клонирование Отправлено: Igors от Сентября 05, 2016, 14:30 в момент изменения создавать копию и изменять clone = node А в чем проблема показывать чилдов клона в иерархии? Нет. Чайлд клона = это не объект (точнее не тот полноценный объект что добавляется в дерево). Это просто данные ("изменения", "огрызки") которые хранит клон для каждого чайлда.Ведь они же физически существуют. А их отсутствие будет только путать юзара, он начнет биться в истерике и писать баг-репорты. То моя забота как его успокоить :)Могу предложить способ организации данных, в котором каждый из элементов дерева всегда хранит только изменения (например, map< key, variant >). Элемент предоставляет собственные данные, если у него они есть, или обращаемся к верхнему в иерархии элементу, если данных нет; до тех пор, пока не получим данные или не закончится дерево. Такой необходимости нет, каждый child клона знает свой "оригинал", который может меняться на лету. Изменили оригинал - изменились чвйлды всех клонов. С этим вроде "решаемо" (хотя тоже хлопот хватает). Но вот что делать с UI? Как юзверь должен менять то чего.. нет? Название: Re: Клонирование Отправлено: Racheengel от Сентября 05, 2016, 14:39 Изменили оригинал - изменились чвйлды всех клонов. С этим вроде "решаемо" (хотя тоже хлопот хватает). Но вот что делать с UI? Как юзверь должен менять то чего.. нет? Это понятно. Но посколько "оригиналы" известны - то чайлд клона мог бы в гуе их отображать как "наследованные" (т.е. со значениями оригиналов, но в др. стиле, серенькими там). А как только юзер ткнул мышом на параметр и поменял - он перестает быть "наследованным" и отображается как нормальный параметр. Название: Re: Клонирование Отправлено: Igors от Сентября 06, 2016, 08:37 Это понятно. Но посколько "оригиналы" известны - то чайлд клона мог бы в гуе их отображать как "наследованные" (т.е. со значениями оригиналов, но в др. стиле, серенькими там). Если нод в дереве - немедленно получаю (или огребаю) "вытекающие". Напр юзер имеет право отлинковать его от парента или прилинковать к другому - но для чайлдов клона это работать не будет. Или даже просто "удалить" - нет такой операции для чайлда. Получается что с "серенькими" почти ничего нельзя делать - ну и нафиг тогда они нужны? А как только юзер ткнул мышом на параметр и поменял - он перестает быть "наследованным" и отображается как нормальный параметр. Я понял идею, но параметр может быть глубоко "закопан" в иерархииНазвание: Re: Клонирование Отправлено: Racheengel от Сентября 06, 2016, 10:57 Тогда так:
- в списке параметров чайлдов показывать только изменённые параменты (их можно изменять или удалять непосредственно). - последним пунктом списка сделать "Добавить..", который будет вызывать диалог с иерархией всех параметров "родителя" (если их дофига, то со строкой поиска/фильтра). Здесь можно будет выбрать параметры, которые должны отличаться от оригинала. По "ок" они добавляются в список выше. |