Russian Qt Forum
Ноябрь 22, 2024, 10:14
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Перестройка дерева и данные
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Перестройка дерева и данные (Прочитано 6594 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Перестройка дерева и данные
«
:
Август 23, 2018, 04:39 »
Добрый день
Есть дерево объектов, может быть сколь угодно ветвистым, хотя обычно 3-4 уровня. Дерево отображается в UI напр
Цитировать
...
Object A (level 0)
Object B (level 1)
Object C (level 1)
Object D (level 2)
Object E (level 1)
...
Юзер может перестраивать дерево как угодно, удалять объекты и вставлять новые.
По запросу юзера выполняются достаточно сложные расчеты траектории движения для одного из нодов дерева (напр A) и всех его чайлдов. Результаты сохраняются, т.е. теперь есть анимации для нодов A, B, C. D, E которые могут быстро проигрываться. Все хорошо.
И вот теперь (данные анимации сохранены) юзер начинает перестраивать дерево. Напр вставляет новый нод F между B и С, а затем может и удалит (или отлинкует) нод C. Чего он хочет ясно - чтобы анимация для C теперь применялась к новому ноду F, это нормальная, законная потребность. И вот тут начинается путаница - а что к чему применять? Ну если старое и новое дерево совпадают... ну а если нет? Хорошо бы сделать это переназначение явным - но как? (т.е. что рисовать в новом UI). Подкиньте идеек (можно смелых
)
Спасибо
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Перестройка дерева и данные
«
Ответ #1 :
Август 23, 2018, 08:00 »
День добрый.
Пока есть такое предложение - хранить (ещё или только) относительные траектории движения чайлдов относительно парента.
Если хранить только относительные траектории, то при вставке/замене/удалении ничего делать не придется. Но графический движок должен мочь это воспроизводить.
Либо пересчитывать траектории вниз по дереву от места модификации (сразу, или при сохранении, или при воспроизведении).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перестройка дерева и данные
«
Ответ #2 :
Август 23, 2018, 08:24 »
Цитата: ssoft от Август 23, 2018, 08:00
Пока есть такое предложение - хранить (ещё или только) относительные траектории движения чайлдов относительно парента.
А так и есть - сохраняются "локальные" трансформы
Цитата: ssoft от Август 23, 2018, 08:00
Если хранить только относительные траектории, то при вставке/замене/удалении ничего делать не придется. Но графический движок должен мочь это воспроизводить.
Ну как "не придется"... Вот макс упрощенный пример. Пусть анимация сохранена для
Цитировать
Object A (level 0)
Object B (level 1)
И теперь юзер втулил С
Цитировать
Object A (level 0)
Object С (level 1)
Object B (level 1)
К чему применить анимацию сохраненную для B: по-прежнему к B или уже к C ?
Цитата: ssoft от Август 23, 2018, 08:00
Либо пересчитывать траектории вниз по дереву от места модификации (сразу, или при сохранении, или при воспроизведении).
Ни о каком пересчете речь не идет (он может длиться часы). Только как разбросать - переназначить (без этого не обойтись)
Записан
Ivan
Гость
Re: Перестройка дерева и данные
«
Ответ #3 :
Август 23, 2018, 09:03 »
Я так понимаю, что Вы имеете ввиду поведение объекта по умолчанию?
Надо сделать по умолчанию отсутствие трансформа. Т.е. новый объект не обрабатывается, пока юзер сам не укажет с какого объекта скопировать трансформы.
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Перестройка дерева и данные
«
Ответ #4 :
Август 23, 2018, 10:53 »
Цитата: Igors от Август 23, 2018, 08:24
Ну как "не придется"... Вот макс упрощенный пример. Пусть анимация сохранена для
Код:
Object A (level 0)
Object B (level 1)
И теперь юзер втулил С
Код:
Object A (level 0)
Object С (level 1)
Object B (level 1)
К чему применить анимацию сохраненную для B: по-прежнему к B или уже к C ?
Подразумевается ли какое-либо влияние Object C на Oblect B ?
Если да, то целесообразно Object C делать родителем Object B.
Если нет, то
* если происходит вставка Object C, то он и должен настраивается. Object B не должен меняться.
* если происходит замена Object B на Object C, то Object C должен иметь настройки Object B
* удаление Object должно происходить с его настройками.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перестройка дерева и данные
«
Ответ #5 :
Август 23, 2018, 13:07 »
Цитата: Ivan от Август 23, 2018, 09:03
Надо сделать по умолчанию отсутствие трансформа. Т.е. новый объект не обрабатывается, пока юзер сам не укажет с какого объекта скопировать трансформы.
Хорошо бы (явное указание всегда лучше), но как это сделать? Каким образом юзер должен (пере) назначить? Какое UI ему для этого нужно ?
Цитата: ssoft от Август 23, 2018, 10:53
Подразумевается ли какое-либо влияние Object C на Oblect B ?
Нет
Цитата: ssoft от Август 23, 2018, 10:53
Если нет, то
* если происходит вставка Object C, то он и должен настраивается. Object B не должен меняться.
* если происходит замена Object B на Object C, то Object C должен иметь настройки Object B
* удаление Object должно происходить с его настройками.
"Замены" как таковой нет, юзер может вставить + удалить. Поэтому и удалять сохраненные данные (др словами анимацию, настройки) не нужно, проще хранить их все в корневом ноде(ах). В остальном это примерно тот же путь по которому пошел я - данные назначаются неявно (implicit) по индексу на текущем уровне иерархии. Напр объект B при создании имел индекс 1 (первый на уровне 1). Стало быть этот слот данных назначается на тот объект который сейчас первый на уровне 1 (Object C в примере выше).
Ну как-то я не в восторге от такого решения
Записан
ssoft
Программист
Offline
Сообщений: 584
Re: Перестройка дерева и данные
«
Ответ #6 :
Август 23, 2018, 15:02 »
Цитата: Igors от Август 23, 2018, 13:07
"Замены" как таковой нет, юзер может вставить + удалить. Поэтому и удалять сохраненные данные (др словами анимацию, настройки) не нужно, проще хранить их все в корневом ноде(ах). В остальном это примерно тот же путь по которому пошел я - данные назначаются неявно (implicit) по индексу на текущем уровне иерархии. Напр объект B при создании имел индекс 1 (первый на уровне 1). Стало быть этот слот данных назначается на тот объект который сейчас первый на уровне 1 (Object C в примере выше).
Ну как-то я не в восторге от такого решения
ИМХО, для пользователя удобнее произвести замену узла, чем помнить нюансы удаления/вставки с какими-то ни было правилами. Например в QtDesigner для этого имеются команды "Morph into ..." или "Promote to ...".
Пользователи - они такие, ничего не любят запоминать). К тому же хранение информации в корневой ноде по индексу влечет за собой, как минимум, необходимость переиндексации, а по факту еще массу неудобств при дальнейшей модификации и сопровождении ПО.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перестройка дерева и данные
«
Ответ #7 :
Август 23, 2018, 16:10 »
Цитата: ssoft от Август 23, 2018, 15:02
ИМХО, для пользователя удобнее произвести замену узла, чем помнить нюансы удаления/вставки с какими-то ни было правилами. Например в QtDesigner для этого имеются команды "Morph into ..." или "Promote to ...".
Пользователи - они такие, ничего не любят запоминать).
Ну 3D объект - не готовый класс, сначала нужно добавить файл модели в проект, тогда появятся объекты этого файла, поэтому выскочить попапкой не выйдет. Плюс еще заботы - объект может быть вкл/выкл, т.е. активен/неактивен.
Цитата: ssoft от Август 23, 2018, 15:02
К тому же хранение информации в корневой ноде по индексу влечет за собой, как минимум, необходимость переиндексации, а по факту еще массу неудобств при дальнейшей модификации и сопровождении ПО.
Согласен. Как улучшить?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...