1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
|
1 | |
Node Editor07.04.2014, 09:32. Показов 942. Ответов 14
Метки нет (Все метки)
Здравствуйте
Тема как бы "на стыке" техники программирования и алгоритмов. Ладно, вот что от меня хотят: Есть фабрика эффектов (десятка 2) применяющихся к изображению. Можно сказать и "плагин" (вместо "эффект") Задача сделать эффекты селективными, т.е. юзер задает маску (в простейшем случае альфа-канал, хотя есть и др варианты). На первый взгляд все просто: пусть все эффекты выполняются как сейчас, а потом смешали/взвесили результат с исходным по маске. К сожалению, так не выходит. Пример: эффект "вращение". Если мы хотим иметь "половину вращения" то надо уменьшить угол поворота вдвое, но не смешивать с исходным. Юзер хочет видеть бубочку в UI эффекта (рядом с параметром "angle") где он сможет назначить/сменить маску. Прямолинейное решение: перелопатить все UI и все опции (со всеми вытекающими). Вообще "объект ссылается на объект" (без владения) = всегда геморрой, особенно когда дело доходит до undo. Да, и запросы юзера всегда растут. Вполне вероятно напр "а покажите какие эффекты используют вот эту маску" - и опять у меня тонна работы. Вот я и подумал - а не делать ли это более капитально? Вроде подходит "Node Editor", ссылок много, есть open-source реализации. Но все это посвящено визуализации (рисованию нодов и связок). А вот как мне организовать данные в расчете на это? Допустим юзер в editor'е сделал connect (или disconnect), мои действия? С уважением Игорь
0
|
07.04.2014, 09:32 | |
Ответы с готовыми решениями:
14
Direct Editor - наш ответ Яндекс Директ.Коммандеру и Google AdWords.Editor-у Реализовать класс Node ([Error] field 'next' has incomplete type 'Node') Не запускается пакет node js - пакетами? npm? сам node? gulp? Cannot find logical node by the specified physical road graph node |
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
|
|
07.04.2014, 14:09 | 2 |
Подсмотреть как это делают графические редакторы.
Насколько я встречал, если у нас имеет выделенная область - то эффект по умолчанию применяется к области, а не к всему рисунку. На счет применения эффектов - сделать копию изображения, провести над ней преобразование, результат наложить поверх исходного изображения с учетом прозрачности маски. Другая проблема - механизм взаимодействия плагинов и маски - например, хотим ли мы повернуть картинку глобально, или только по маске (тогда центр поворота в центре маски), также некоторые алгоритмы довольно прожорливые, и если есть маска то не нужно применять их ко всему изображению, с другой стороны если ограничить область виденья алгоритма только маской, то возможны артефакты (например алгоритм размытия по большому радиусу). Где-то встречал редакторы с возможностью переключения режимов типа "только по области" и "учесть изображение за областью".
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
|
07.04.2014, 17:56 [ТС] | 3 |
Давайте вместе перечитаем стартовый пост
И далее объясняется почему не проходит. Может Вы умеете только писать, но не читать?
0
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
|
|
07.04.2014, 19:51 | 4 |
Может мой текст из желания помочь и трудности поиска именно той проблемы, которая требует решения.
Думаю даже с учетом бесполезности большей части текста вы найдете что-то на что стоит обратить внимание.
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
||||||
07.04.2014, 20:33 [ТС] | 5 | |||||
Я понял. Мне хотелось бы пообсуждать общий механизм взаимодействия. Маска, поворот, и.т.п. - это всего лишь для конкретного примера. В общем случае "объект ссылается на объект". Самый простой способ это сделать
0
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
|
|
08.04.2014, 17:25 | 6 |
А если передавать в эффект область применения? Есть маска - даем маску, нет маски - даем все изображение. В этом случае можно даже сделать квадратик пред-просмотра
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
|
08.04.2014, 17:35 [ТС] | 7 |
Маска не булевское значение в пикселе, даже простейший альфа-канал уже 256 значений.
0
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
|
|
08.04.2014, 18:22 | 8 |
Эффект же накладывается один раз и результат переходит на изображение, так? Маску следует передавать только в момент нажатия на кнопку "применить эффект". Зачем передавать маску в эффект когда его еще не нужно применять?
В общем идея чтобы маска передавалась в эффект в такой ситуации когда пользователь не будет иметь возможности изменять маску.
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
|
09.04.2014, 10:07 [ТС] | 9 |
Тот же пример с вращением. Без маски все поворачивается на заданный угол, напр 180 градусов. Теперь юзер назначил маску-градиент где на краях 0 а в центре 1. Тогда крайние пыксели остались на месте, центральные повернулись на 180. Результат гораздо более богатый, интересный. И он совсем не равен миксу исходного с полным поворотом. Др эффект может использовать маску совершенно по-другому, возможно неск масок для различных параметров.
0
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,037
|
|
09.04.2014, 12:35 | 10 |
Значит маска определяет параметры эффекта. Интересно, не помню встречал ли где я такую реализацию в рисовалках, по крайней мере так сильно я не копался в них.
Если уж эффекты так сильно завязаны на маски может проще в эффекте использовать некую маску по умолчанию? Т.е. маска всегда есть, но если пользователь задал маску, тогда дефолтная заменяется пользовательской.
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
10.04.2014, 13:55 | 11 |
Действительно, а что мешает передать указатель на маску при применении эффекта?
Или тут речь о каком-то комбиноровании, когда пользователь может насохранять охапку масок и охапку эффектов, каждый из которых содержит маску (т. е. можно сохранить два эффекта, отличающихся только масками)? Для второго случая предлагаю создать коллекцию масок, а в эффектах хранить идентификатор маски, то которому извлекать маску из коллекции. При особом желании можно прикрутить к этой коллекции ответственность за удаление масок и взаимодействие с эффектами (если такое требуется).
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
|
11.04.2014, 08:12 [ТС] | 12 |
Да, совершенно верно
Ничто не мешает, но за эту простоту придется расплачиваться. Простейшие примеры: - пользователь удалил маску, указатели на нее стали невалидны. Как найти их всех и обнулить? - пользователь спохватился и делает undo. Как "вернуть маску взад"? Конечно это реализуемо но мне придется написать немало кода. А вот как сделать маску "умной" чтобы она умела себя удалять/восстанавливать?
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
11.04.2014, 12:31 | 13 |
Ну так вот же ответ, вроде:
Добавлено через 5 минут
Т. е. есть некий репозиторий с масками. В течении того времени, пока пользователь может восстановить маску, держать у неё (или для неё) флаг с пометкой, что она удалена. В эффектах же хранить некоторые идентификаторы масок (можно строки, тогда будет возможность давать маскам осмысленные имена и пользоваться ими). Дальше эффект при применении обращается к репозиторию масок, с просьбой выдать маску с заданным id. Если она есть и не удалена, он получает указатель на неё, если же такой маски нет, либо она удалена, то он получает null. При желании можно сделать, что эффект при создании/загрузке говорит репозиторию "мне нужна маска с таким-то id", а при изменении входящей в него маски, а также при удалении эффекта от неё отписывается. Репозиторий это учитывает и не позволяет пользователю удалять используемую маску, пока все эффекты от неё не откажутся.
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,744
|
|
12.04.2014, 10:54 [ТС] | 14 |
Так делает 3ds (во всяком случае делал, давно им не занимался). ID уникальны (в течение жизни приложения) и неуклонно растут. Каждое ID знает всех кто ссылается на него и наоборот. Вариант возможный и выглядит капитально, но придется городить свою систему ID с нуля (что впрочем не значит "плохо"). Какие еще есть возможности?
0
|
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
|
|
12.04.2014, 23:48 | 15 |
0
|
12.04.2014, 23:48 | |
12.04.2014, 23:48 | |
Помогаю со студенческими работами здесь
15
Аргумент типа "Node *" несовместим с параметром "Node*" Не удается неявно преобразовать тип "UnsafeStack.Node" в "UnsafeStack.Node*" - как исправить? Rt-editor Dialog Editor Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |