Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.
Re: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
SO>Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.
Код отрисовки отдельно, сам алгоритм — отдельно. По графу алгоритма строить граф визуальных компонентов, при построении подсовывать нужные параметры отрисовки.
Re[2]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, Sinix, Вы писали:
S>Код отрисовки отдельно, сам алгоритм — отдельно. По графу алгоритма строить граф визуальных компонентов, при построении подсовывать нужные параметры отрисовки.
Завести в переменных флаги отрисовки? Так этого и хотелось избежать. Навешивать отдельный класс-отрисовыватель? Некрасиво как-то.
Re[3]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
S>>Код отрисовки отдельно, сам алгоритм — отдельно. По графу алгоритма строить граф визуальных компонентов, при построении подсовывать нужные параметры отрисовки.
SO>Завести в переменных флаги отрисовки? Так этого и хотелось избежать. Навешивать отдельный класс-отрисовыватель? Некрасиво как-то.
Как раз тут всё красиво, хотя реализация будет посложнее.
Представь, если рисовать надо в разных случаях по разному? Будешь запихивать кучу функций рисования в класс с данными?
Я бы посмотрел в сторону нелюбимого Визитёра.
_____________________
С уважением,
Stanislav V. Zudin
Re[4]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Как раз тут всё красиво, хотя реализация будет посложнее. SVZ>Представь, если рисовать надо в разных случаях по разному? Будешь запихивать кучу функций рисования в класс с данными?
У меня сейчас и есть разделение — данные и визуализаторы. Точнее даже 4 класса у меня. Класс ноды(чисто данные), класс графа (чисто данные)-работает с классами нод и линами между ними, класс рисователь ноды и класс рисователь графа. Так вот input нода или output — хранится только в классе графа. И это правильно. А класс рисователь ноды не знает про класс графа, он знает только про класс ноды.
Re[3]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
SO>Навешивать отдельный класс-отрисовыватель? Некрасиво как-то.
Именно. Из графа данных, которые ничего не знают об отрисовке получить граф, размеченный доп. информацией для отрисовки
SO>Некрасиво как-то.
Ну а какие ещё варианты?
Не, можно каждый раз обходить граф и восстанавливать информацию в процессе обхода, но для частого обновления это точно не прокатит
Re: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
SO>У меня сейчас и есть разделение — данные и визуализаторы. Точнее даже 4 класса у меня. Класс ноды(чисто данные), класс графа (чисто данные)-работает с классами нод и линами между ними, класс рисователь ноды и класс рисователь графа. Так вот input нода или output — хранится только в классе графа. И это правильно. А класс рисователь ноды не знает про класс графа, он знает только про класс ноды.
Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.
Re[6]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, Sinix, Вы писали:
S>Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.
Вопрос, собственно, был не как сделать, чтоб работало, потому что это не проблема. А как сделать чтоб уоасиво
Что-то не нравится мне вариант с флагом для рисовальщика, но видать нет вариантов.
А если во всех рисовальщиков пропихивать указатель на граф, а в графе слелать метод, который говорит о типе ноды — это красивее?
Re[6]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, Sinix, Вы писали:
SO>>...Так вот input нода или output — хранится только в классе графа. И это правильно. А класс рисователь ноды не знает про класс графа, он знает только про класс ноды.
S>Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.
Последнее мне кажется наиболее удобным.
Кто-то же инициализирует и запускает отрисовщик, логично в этот момент и передать дополнительные знания.
_____________________
С уважением,
Stanislav V. Zudin
Re[7]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
S>>Тогда ещё варианты: или завести разные типы узлов для входных / выходных переменных, или добавить в отрисовщик знание о входах / выходах узла.
SO>А если во всех рисовальщиков пропихивать указатель на граф, а в графе слелать метод, который говорит о типе ноды — это красивее?
Я бы пропихивал указатель не на граф, а на "возвращателя типа ноды" (коим по совместительству может являться граф).
_____________________
С уважением,
Stanislav V. Zudin
Re[8]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Я бы пропихивал указатель не на граф, а на "возвращателя типа ноды" (коим по совместительству может являться граф).
Хмм, а зачем выделать это в отдельный интерфейс? Вроде у него больше не будет наследников, только граф знает такие вещи.
Re[9]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
SVZ>>Я бы пропихивал указатель не на граф, а на "возвращателя типа ноды" (коим по совместительству может являться граф). SO>Хмм, а зачем выделать это в отдельный интерфейс? Вроде у него больше не будет наследников, только граф знает такие вещи.
Зависимости уменьшить. Да и всякое бывает, вдруг потребуется брать типы нодов (и, возможно, не только их) из другого источника.
Но это так, перестраховка.
Лично мне этот вариант больше всех нравится.
_____________________
С уважением,
Stanislav V. Zudin
Re[10]: Объект про себя знает не все, но должен себя отрисовывать.
SO>Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.
Отрисовываете вы (отрисовывает сам себя) параметр, а не переменная. А параметр уже знает, входной он, или выходной.
Кстати, очень вероятно, что на каком-нибудь этапе захочется отделить модель (Parameter) от его графического представления (ParameterImage). Этакий MVVM, но не ради байнинга, а по-делу
Re: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
SO>Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.
Сначала рендерится в граф, потом граф рендерится в картинку. Непонятно, зачем переменной самой себя рендерить. Мб во время выполнения просто писать инфу в некий лог, который потом трансформировать в граф ?
Re[2]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали: SO>Здравствуйте, Ikemefula, Вы писали: I>> Непонятно, зачем переменной самой себя рендерить. SO>Предлагаешь графу знать какая нода как себе отрисовывает? SO>
Скрытый текст
Жуть какая. А для чего всё это? Ещё один simulink
Сделайте у переменной вход и выход. А лучше ящик с N входами и M выходами.
Re[4]: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, kov_serg, Вы писали:
_>Сделайте у переменной вход и выход. А лучше ящик с N входами и M выходами.
Забавно, на моей визуализации думаю все поймут сразу, где входные, где выходные. Чтоб понять вашу схему, надо долго думать.
Вообще, думаю разработчики UnrealEngine подумали об удобстве и юзабилити . Я повторяю их Blueprint для собственных нужд
Re: Объект про себя знает не все, но должен себя отрисовывать.
Здравствуйте, SergeyOsipov, Вы писали:
SO>Есть некая визуализация алгоритма в виде графа. Этот алгоритм — это функция с входными и выходными параметрами. Любой параметр — это просто переменная. И сама переменная не знает и не должна знать про себя — входной она параметр или выходной. Но. Любая переменная сама себя отрисовывает в виде ноды графа. Так вот входные и выходные параметры по-разному себя отрисовывать должны, но они сами внутри себя не знают входные они или выходные. Как разрулить? Добавить флаг в функицю отрисовки — не вариант.
В умных и не очень книжках был типа такой GRAPS паттерн Informational Expert — обязанности распределять тому, у кого есть данные для их выполнения. Это к слову.
Вашу задачу я бы решал иначе. Никаких классов-рисовальщиков, которые на вход получают ноду/дугу с данными. Можно разработать/найти компонент VectorDraw, который рисует группу примитивов на поверхности. Браузер с svg графикой хороший кандидат. Т.е. вью пусть будет декларативное (набор примитивов, закрепленных за нодой), а не императивное (процедура, которая получила ноду и нарисовала ее с помощью gdi). При создании ваших переменных тот кто их создает, он же создает набор примитивов для визуализации переменной и закрепляет их за этой переменной. Этот создатель располагает графом и вообще всем. Будут у вас классы переменные/алгоритмы, которые ничего не знают о визуализации, даже своих координат на плоскости (если конечно эти координаты не нужны для основного алгоритма). И буду в сторонке группы графических примитивов со ссылками на ваши переменные/алгоритмы по id. Рисовать примитивы будет VectorDraw.
опа опа мы воюем с нато
любит хавать этот кал
путинская вата