Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 09.02.17 12:00
Оценка:
Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.
Re: Объект про себя знает не все, но должен себя отрисовывать.
От: Sinix  
Дата: 09.02.17 12:39
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.


Код отрисовки отдельно, сам алгоритм — отдельно. По графу алгоритма строить граф визуальных компонентов, при построении подсовывать нужные параметры отрисовки.
Re[2]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 09.02.17 12:43
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Код отрисовки отдельно, сам алгоритм — отдельно. По графу алгоритма строить граф визуальных компонентов, при построении подсовывать нужные параметры отрисовки.


Завести в переменных флаги отрисовки? Так этого и хотелось избежать. Навешивать отдельный класс-отрисовыватель? Некрасиво как-то.
Re[3]: Объект про себя знает не все, но должен себя отрисовывать.
От: Stanislav V. Zudin Россия  
Дата: 09.02.17 12:47
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

S>>Код отрисовки отдельно, сам алгоритм — отдельно. По графу алгоритма строить граф визуальных компонентов, при построении подсовывать нужные параметры отрисовки.


SO>Завести в переменных флаги отрисовки? Так этого и хотелось избежать. Навешивать отдельный класс-отрисовыватель? Некрасиво как-то.


Как раз тут всё красиво, хотя реализация будет посложнее.
Представь, если рисовать надо в разных случаях по разному? Будешь запихивать кучу функций рисования в класс с данными?

Я бы посмотрел в сторону нелюбимого Визитёра.
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 09.02.17 12:53
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Как раз тут всё красиво, хотя реализация будет посложнее.

SVZ>Представь, если рисовать надо в разных случаях по разному? Будешь запихивать кучу функций рисования в класс с данными?

У меня сейчас и есть разделение — данные и визуализаторы. Точнее даже 4 класса у меня. Класс ноды(чисто данные), класс графа (чисто данные)-работает с классами нод и линами между ними, класс рисователь ноды и класс рисователь графа. Так вот input нода или output — хранится только в классе графа. И это правильно. А класс рисователь ноды не знает про класс графа, он знает только про класс ноды.
Re[3]: Объект про себя знает не все, но должен себя отрисовывать.
От: Sinix  
Дата: 09.02.17 12:54
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>Навешивать отдельный класс-отрисовыватель? Некрасиво как-то.

Именно. Из графа данных, которые ничего не знают об отрисовке получить граф, размеченный доп. информацией для отрисовки

SO>Некрасиво как-то.

Ну а какие ещё варианты?

Не, можно каждый раз обходить граф и восстанавливать информацию в процессе обхода, но для частого обновления это точно не прокатит
Re: Объект про себя знает не все, но должен себя отрисовывать.
От: GlebZ Россия  
Дата: 09.02.17 12:54
Оценка: +1
Здравствуйте, SergeyOsipov, Вы писали:

Visiter
Re[5]: Объект про себя знает не все, но должен себя отрисовывать.
От: Sinix  
Дата: 09.02.17 12:56
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>У меня сейчас и есть разделение — данные и визуализаторы. Точнее даже 4 класса у меня. Класс ноды(чисто данные), класс графа (чисто данные)-работает с классами нод и линами между ними, класс рисователь ноды и класс рисователь графа. Так вот input нода или output — хранится только в классе графа. И это правильно. А класс рисователь ноды не знает про класс графа, он знает только про класс ноды.


Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.
Re[6]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 09.02.17 13:02
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.


Вопрос, собственно, был не как сделать, чтоб работало, потому что это не проблема. А как сделать чтоб уоасиво
Что-то не нравится мне вариант с флагом для рисовальщика, но видать нет вариантов.

А если во всех рисовальщиков пропихивать указатель на граф, а в графе слелать метод, который говорит о типе ноды — это красивее?
Re[6]: Объект про себя знает не все, но должен себя отрисовывать.
От: Stanislav V. Zudin Россия  
Дата: 09.02.17 13:04
Оценка: +1
Здравствуйте, Sinix, Вы писали:

SO>>...Так вот input нода или output — хранится только в классе графа. И это правильно. А класс рисователь ноды не знает про класс графа, он знает только про класс ноды.


S>Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.


Последнее мне кажется наиболее удобным.
Кто-то же инициализирует и запускает отрисовщик, логично в этот момент и передать дополнительные знания.
_____________________
С уважением,
Stanislav V. Zudin
Re[7]: Объект про себя знает не все, но должен себя отрисовывать.
От: Stanislav V. Zudin Россия  
Дата: 09.02.17 13:07
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

S>>Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.


SO>А если во всех рисовальщиков пропихивать указатель на граф, а в графе слелать метод, который говорит о типе ноды — это красивее?


Я бы пропихивал указатель не на граф, а на "возвращателя типа ноды" (коим по совместительству может являться граф).
_____________________
С уважением,
Stanislav V. Zudin
Re[8]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 09.02.17 13:09
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Я бы пропихивал указатель не на граф, а на "возвращателя типа ноды" (коим по совместительству может являться граф).


Хмм, а зачем выделать это в отдельный интерфейс? Вроде у него больше не будет наследников, только граф знает такие вещи.
Re[9]: Объект про себя знает не все, но должен себя отрисовывать.
От: Stanislav V. Zudin Россия  
Дата: 09.02.17 13:12
Оценка: 2 (1) +1
Здравствуйте, SergeyOsipov, Вы писали:

SVZ>>Я бы пропихивал указатель не на граф, а на "возвращателя типа ноды" (коим по совместительству может являться граф).

SO>Хмм, а зачем выделать это в отдельный интерфейс? Вроде у него больше не будет наследников, только граф знает такие вещи.

Зависимости уменьшить. Да и всякое бывает, вдруг потребуется брать типы нодов (и, возможно, не только их) из другого источника.
Но это так, перестраховка.
Лично мне этот вариант больше всех нравится.
_____________________
С уважением,
Stanislav V. Zudin
Re[10]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 09.02.17 13:13
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Лично мне этот вариант больше всех нравится.


Да, пожалуй, мне тоже нравится. По крайней мере позволяет избежать флагов в отрисовщике, не люблю я такие флаги-заплатки.
Re: Объект про себя знает не все, но должен себя отрисовывать.
От: ylem  
Дата: 09.02.17 15:20
Оценка:
SO>Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.

Отрисовываете вы (отрисовывает сам себя) параметр, а не переменная. А параметр уже знает, входной он, или выходной.
Кстати, очень вероятно, что на каком-нибудь этапе захочется отделить модель (Parameter) от его графического представления (ParameterImage). Этакий MVVM, но не ради байнинга, а по-делу
Re: Объект про себя знает не все, но должен себя отрисовывать.
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.02.17 10:33
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.


Сначала рендерится в граф, потом граф рендерится в картинку. Непонятно, зачем переменной самой себя рендерить. Мб во время выполнения просто писать инфу в некий лог, который потом трансформировать в граф ?
Re[2]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 10.02.17 10:57
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I> Непонятно, зачем переменной самой себя рендерить.


Предлагаешь графу знать какая нода как себе отрисовывает?

Re[3]: Объект про себя знает не все, но должен себя отрисовывать.
От: kov_serg Россия  
Дата: 10.02.17 11:10
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>Здравствуйте, Ikemefula, Вы писали:


I>> Непонятно, зачем переменной самой себя рендерить.


SO>Предлагаешь графу знать какая нода как себе отрисовывает?


SO>
  Скрытый текст

Жуть какая. А для чего всё это? Ещё один simulink

Сделайте у переменной вход и выход. А лучше ящик с N входами и M выходами.
Re[4]: Объект про себя знает не все, но должен себя отрисовывать.
От: SergeyOsipov Россия  
Дата: 10.02.17 11:15
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>Сделайте у переменной вход и выход. А лучше ящик с N входами и M выходами.


Забавно, на моей визуализации думаю все поймут сразу, где входные, где выходные. Чтоб понять вашу схему, надо долго думать.
Вообще, думаю разработчики UnrealEngine подумали об удобстве и юзабилити . Я повторяю их Blueprint для собственных нужд
Re: Объект про себя знает не все, но должен себя отрисовывать.
От: sr_dev  
Дата: 10.02.17 16:40
Оценка:
Здравствуйте, SergeyOsipov, Вы писали:

SO>Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.


В умных и не очень книжках был типа такой GRAPS паттерн Informational Expert — обязанности распределять тому, у кого есть данные для их выполнения. Это к слову.

Вашу задачу я бы решал иначе. Никаких классов-рисовальщиков, которые на вход получают ноду/дугу с данными. Можно разработать/найти компонент VectorDraw, который рисует группу примитивов на поверхности. Браузер с svg графикой хороший кандидат. Т.е. вью пусть будет декларативное (набор примитивов, закрепленных за нодой), а не императивное (процедура, которая получила ноду и нарисовала ее с помощью gdi). При создании ваших переменных тот кто их создает, он же создает набор примитивов для визуализации переменной и закрепляет их за этой переменной. Этот создатель располагает графом и вообще всем. Будут у вас классы переменные/алгоритмы, которые ничего не знают о визуализации, даже своих координат на плоскости (если конечно эти координаты не нужны для основного алгоритма). И буду в сторонке группы графических примитивов со ссылками на ваши переменные/алгоритмы по id. Рисовать примитивы будет VectorDraw.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.