Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2017, 15:26   #21
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

А это точно обсуждение 2017-ого года?
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 28.11.2017, 06:15   #22
LV1974
Заблокирован
 
Регистрация: 09.08.2017
Сообщений: 1,136
По умолчанию

Цитата:
Сообщение от New man Посмотреть сообщение
А это точно обсуждение 2017-ого года?
Ась?


*****

Отвечаю. Я перестал следить за технологиями визуализации примерно с 2010 года.
Мне не хватило мотивации, чтобы разобраться с WPF. Некоторые её особенности и глюки - не добавляли энтузиазма.
А когда я столкнулся с прагмой перенумеровки строк - то это окончательно выбило меня из седла.

*****

Если бы кто-то взялся сделать обзор значимых технологий в теме визуализация 2D-3D, анимация, интерактив и печать - то это будет очень интересно.

+
Сейчас изучаю Direct 2D+3D.

Появляется ряд вопросов:
1. Как насчёт детекта попаданий и столкновений ?
2. Как насчёт синхронизации с интерактивной моделью ?
3. Как насчёт печати больших ватманов ?

+
Однако эта тема ближе к обсуждению архитектурных решений.
Далеко не всякая технология может на них повлиять.
Например, ряд вопросов:
1. Компенсирует ли альфа в цвете колор-кей в спрайтовой графике ?
2. Разве технология растрово-логических операций устарела ?
3. Актуален ли антиалиасинг при уплотнении дпи экрана ?
4. Можно ли на видюхе сделать трансформации как на agg ?

Последний раз редактировалось LV1974; 28.11.2017 в 16:10. Причина: +
LV1974 вне форума Ответить с цитированием
Старый 28.11.2017, 16:56   #23
LV1974
Заблокирован
 
Регистрация: 09.08.2017
Сообщений: 1,136
По умолчанию

Что-то на ум пришёл вопрос о сохранении визуальной модели.
(вопрос о синхронизации предметной и визуальной модели пока пропускаю).

Выделяется 4 способа сохранения:
1. Бинарный,
2. Командный,
3. Текстовый, DSL - XML,
4. Табличный,

Чем интересен каждый способ?
1. Бинарный - самый быстрый и компактный,
2. Командный - хорош для тестирования,
3. Текстовый - независимый,
4. Табличный - хорош для редактирования (метаописания отдельны от данных, поэтому можно использовать таблицу свойств),
LV1974 вне форума Ответить с цитированием
Старый 13.12.2017, 12:03   #24
LV1974
Заблокирован
 
Регистрация: 09.08.2017
Сообщений: 1,136
По умолчанию

Пока мы тут приятно болтаем, я стараюсь написать свой 7 графический редактор.
Точнее - встраиваемую библиотеку интерактивной графики.
Основные ставки - на простоту и расширяемость.
Уже есть интересные решения, на порядок простые чем в LikeView 2010.
Потихоньку работа идёт.

Если есть пожелания - то пишите сюда или в личку.
LV1974 вне форума Ответить с цитированием
Старый 23.12.2017, 13:40   #25
LV1974
Заблокирован
 
Регистрация: 09.08.2017
Сообщений: 1,136
По умолчанию Версия 0.4

Выпускаю первую стабильную версию.
Внутри архива - исходник, описание, история версий и исполняемый файл.

Цитата:
Библиотека и редактор интерактивной векторной графики LiteView
Реализация: C# DotNet 2.0.

В проект входит:
1. Библиотека основных классов LiteView,
2. Библиотека пользовательских элементов управления LiteViewControls,
3. Приложение редактор для тестов и демонстрации.
4. Этот документ описания и история версий.

Проект предназначен для создания встраиваемых редакторов схем, диаграмм, графиков и презентаций. В основу положен 15 летний опыт разработки подобных редакторов. Наиболее близким аналогом является библиотека Objective View от Stingray.
Отличительной особенностью LiteView является сочетание простоты и функциональности, что позволяет её гибко расширять и настраивать под конкретные задачи.

Основа LiteView зависит только от сборок System и System.Drawing. LiteViewControls зависит ещё и от WindowsForms.
Такая слабая зависимость от системных библиотек позволяет её легко портировать на другую платформу или подключить альтернативное графическое ядро.

Основным классом является LContext. Через него происходит взаимодействие редактора с пользовательскими контролами.
Этот класс похож на контроллер из модели MVC. Однако его полномочия намного шире. Он доступен для любых объектов, т.к. объявлен как статический член LContext.Current. Для реализации нескольких редакторов, документов и видов, этот контекст надо переключать при активизации соответствующего элемента управления. Это небольшая плата за простоту и гибкость.

Иерархия объектов приложения может выглядеть следующим образом:
1. Приложение,
2. Документ,
3. Фрейм,
4. LControlView, - пользовательский элемент управления,
5. LContext, - контекст,
6. LComponentView, - вид,
7. LComponentCanvas, - холст или страницы,
8. LComponentGroup, - группа (опционно),
9. LComponentXXX, - любой другой компонент.

В библиотеке реализовано несколько иерархий:
1. Иерархия компонентов LComponent и фигур LShape.
2. Иерархия стилей LStyle, для шрифта, кисти и пера.
3. Иерархия команд LCommand для стеков Undo/Redo.
4. Иерархия действий для реакции на пользователя LUIAction, LUITracker.

Ещё есть ряд специализированных классов.


Базовый класс LComponent реализует несколько механизмов:
1. Механизм композиции Parent – LComponentGroup.Childs, предназначен для установления агрегатных отношений в модели.
2. Механизм обновлений Invalidate() – OnUpdate(),предназначен для оптимизации внутренних расчётов и реализован через флаг NeedUpdate.
3. Механизм каскадной отрисовки компонентов OnDraw() с опционной буферизацией и трансформацией.
4. Механизм каскадной проверки попаданий HitTest().
5. Механизм манипуляторов LHandle, для выделенных компонентов.
6. Опциональные механизмы трансформации и буферизации.

Контекст LContext реализует несколько механизмов:
1. Указатель на текущий контекст.
2. Состояние пользовательского интерфейса LUIState.
3. Процесс обработки действий пользователя LUIProcessor.
4. Список выбранных компонентов Selection и HitComponent.
5. Стеки Undo/Redo LCommandStack.
6. Указатель на компонент вида LComponentView.

Диспетчеризация пользовательского управления (обработчиков) осуществляется в LUIProcessor и подразделяется на мгновенные действия LUIAction и протяжённые трекеры LUITracker. Каждый из них может запускаться либо от клавиатуры и мышки (осуществляется проверка нажатия последовательности клавиш), либо от кнопок тулбаров (осуществляется прямой вызов).
Определение множества действий и трекеров в LUIProcessor делается на стороне приложения (вне библиотеки). Это позволяет гибко настраивать пользовательский интерфейс. Однако следует иметь ввиду, что порядок следования обработчиков в процессоре играет роль. Каждый обработчик (производный от LUIAction), имеет ключ – комбинацию нажатых клавиш, которая сопоставляется с текущим состоянием LUIState. Таким образом осуществляется управление.
Затем, при удачном выполнении действия, LUIAction или LUITracker формируют обратную команду LCommand и кладут её в стек отмены операций LCommandStack. В случае выделения нескольких компонентов, действие формирует макрокоманду LCommandMacro.

Теперь хочется отметить ряд оригинальных решений и их побочные эффекты:
1. Реализация множества документов и видов в одном приложении, зависит от своевременного переключения текущего контекста LContext.Current.
2. Доступ к большинству параметров и к визуальной модели, осуществляется через текущий глобальный контекст LContext.Current. Это даёт огромные возможности, но усложняет отладку поведения.
3. Реализация множества страниц не является однозначным решением. Это может быть разбивка холста на страницы, а может быть многостраничной презентацией. Этот вопрос пока пропускаю.
4. Настройка интерактивного взаимодействия (семейство LUI_ классов) вынесена на уровень пользовательского приложения. Считаю это ценным решением, однако оно требует аккуратности в использовании.
5. Методы обратного вызова реализованы через действия LUIAction, который передаёт клиенту фазу действия.
6. Ряд возможностей компонента являются опциональными. Такие опции, как трансформация и буферизация определены в базовом компоненте. С другой стороны фигуры представляют собой семейство классов, унаследованных от LShape, в которой есть GraphicPath. Однако расширение в сторону эффектов, декораторов, анимации и т.п., требует либо развивать LComponent, либо плодить производные семейства классов, что приводит к их комбинаторному взрыву.

+
Действия пользователя проходят несколько этапов:
1. Вначале их перехватывает оконный контрол LControlView.
2. Затем эти действия изменяют состояние LUIState.
3. После этого управление передаётся в LUIProcessor.
4. Происходит поиск действия LUIAction или LUITracker.
5. Действие порождает команду LCommand и изменяет свойство компонента.
6. Команда попадает в стек отмены LCommandStack.

Для предотвращения комбинаторного взрыва компонентов, был выведен ряд ортогональных и опциональных способностей:
1. Свойства,
2. Стили,
3. Связи,
4. Трансформации,
5. Буферизация,
6. Растровые эффекты,
7. Декораторы,
8. Анимация,

Однако ряд компонентов имеет свои особенности, выходящие за рамки ортогональных способностей. Это:
1. Фигуры,
2. Картинки,
3. Текст,
4. Связки,
5. Группы,
6. Таблицы,
7. Графики,
8. Диаграммы,
Вложения
Тип файла: zip LiteView 0.4.zip (89.3 Кб, 12 просмотров)

Последний раз редактировалось LV1974; 23.12.2017 в 19:52. Причина: +
LV1974 вне форума Ответить с цитированием
Старый 23.12.2017, 20:18   #26
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от LV1974 Посмотреть сообщение
Приложение редактор для тестов и демонстрации.
А можно прочитать, что практически делает этот редактор? Запустил, увидел 2 стандартных объекта Shape. Они могут двигаться мышкой. Тоже вроде всё стандартно, как в редакторе форм, свойства, все дела. Как редактировать то? Изменить, удалить, добавить, сохранить, в каком формате, вектор или растр?
Пока очень непонятно. Из написанного описания вроде космос. По факту квадрат и овал.
kvitaliy вне форума Ответить с цитированием
Старый 24.12.2017, 04:13   #27
LV1974
Заблокирован
 
Регистрация: 09.08.2017
Сообщений: 1,136
По умолчанию

Цитата:
Сообщение от kvitaliy Посмотреть сообщение
А можно прочитать, что практически делает этот редактор? Запустил, увидел 2 стандартных объекта Shape. Они могут двигаться мышкой. Тоже вроде всё стандартно, как в редакторе форм, свойства, все дела. Как редактировать то? Изменить, удалить, добавить, сохранить, в каком формате, вектор или растр?
Пока очень непонятно. Из написанного описания вроде космос. По факту квадрат и овал.
Это не редактор. Это библиотека для написания редакторов.
Тема - для специалистов - пользователей библиотеки, а не для пользователей программы.
Меня уже во сне достают - кричат "почему скроллбары не работают?" и т.п.
Всему своё время.

Направление развития определяется исходя из конкретных задач.
Моя задача - обеспечить необходимые возможности для интеграции.

Посмотрите ещё раз на эти списки, которые определяют пространство возможностей и пространство компонентов.
Цитата:
Для предотвращения комбинаторного взрыва компонентов, был выведен ряд ортогональных и опциональных способностей:
1. Свойства,
2. Стили,
3. Связи,
4. Трансформации,
5. Буферизация,
6. Растровые эффекты,
7. Декораторы,
8. Анимация,

Однако ряд компонентов имеет свои особенности, выходящие за рамки ортогональных способностей. Это:
1. Фигуры,
2. Картинки,
3. Текст,
4. Связки,
5. Группы,
6. Таблицы,
7. Графики,
8. Диаграммы,
Кроме этого, редактор можно развивать в пространстве действий (LUIAction и LUITracker), в пространстве команд (LCommand) и в пространстве визуальных контролов управления (LiteViewControls).
За каждым таким пространством стоит полиморфная иерархия.
Вот и Вы подсказываете, что есть пространство форматов хранения.

Я постараюсь наполнять библиотеку содержательным функционалом по мере своих возможностей. А вы можете пока просто наблюдать за процессом и определяться - что нужно Вам для своих задач.

+
Прошу не предъявлять ко мне претензий - типа я обманом заставил читать специфическую документацию и т.п. Я понимаю, что клиенту надо было всё сразу, бесплатно и вчера.
Однако с самого начала ветки я предупреждал, что эта тема - для специалистов с опытом разработки разного рода редакторов.
Меня интересует проработка архитектуры для интеграции возможностей и расширений.

+
Вот, кстати, пример кода клиентского "редактора".
Вначале - идёт настройка действий, а затем добавляются компоненты холста и пары фигур:
Код:
            LUIProcessor proc = Context.Processor;
            proc.Add(new LUIActionUndo(LUIKeys.ControlKey, LUIKeys.Z));
            proc.Add(new LUIActionRedo(LUIKeys.ControlKey, LUIKeys.Y));

            proc.Add(new LUIActionSelectAll(LUIKeys.ControlKey, LUIKeys.A));
            proc.Add(new LUIActionSelectAdd(LUIKeys.ShiftKey, LUIKeys.LButton));
            proc.Add(new LUIActionSelect(LUIKeys.LButton));

            proc.Add(new LUITrackerPan(LUIKeys.LButton, LUIKeys.MouseMove));
            proc.Add(new LUITrackerMove(LUIKeys.LButton, LUIKeys.MouseMove));


            LComponentCanvas canvas = new LComponentCanvas();
            canvas.Bounds = new RectangleF(10, 10, 300, 300);
            Context.View.Add(canvas);

            LShapeRectangle rc1 = new LShapeRectangle();
            rc1.Bounds = new RectangleF(20, 20, 100, 100);
            canvas.Add(rc1);

            LShapeEllipse el1 = new LShapeEllipse();
            el1.Bounds = new RectangleF(140, 20, 100, 100);
            canvas.Add(el1);
Реализацию действий, компонентов, трансформаций и эффектов - можно вообще перенести в плагины или компилировать налету.

Последний раз редактировалось LV1974; 24.12.2017 в 06:40. Причина: +
LV1974 вне форума Ответить с цитированием
Старый 24.12.2017, 13:29   #28
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

скажите пжл, то что Вы делаете в вебе будет работать? и ничего похожего ещё в вебе не реализовано? спс
Ципихович Эндрю вне форума Ответить с цитированием
Старый 24.12.2017, 15:26   #29
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

Цитата:
Сообщение от Ципихович Эндрю Посмотреть сообщение
ничего похожего ещё в вебе не реализовано?
В HTML5 представлено два элемента для работы с web графикой: Canvas и SVG. Элемент SVG позволяет создавать векторную графику, а элемент Canvas предназначен для создания растровых изображений. Элемент Сanvas также используется технологией WebGL для аппаратного ускорения 3D-графики.
kvitaliy вне форума Ответить с цитированием
Старый 24.12.2017, 15:42   #30
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,034
По умолчанию

что-то типа отсюда: http://www.dejurka.ru/web-design/10-...web-designers/
??
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Геометрия, как найти скалярное произведение? Алексей_2012 Помощь студентам 8 10.11.2014 23:29
Как откосить от информатики? Max1548 Свободное общение 5 25.10.2011 17:18
Как Программно создать раздел E:\ KWN, lnc Общие вопросы Delphi 18 27.08.2009 13:37
как добавить модули в раздел uses kate158 Общие вопросы Delphi 1 25.08.2009 09:52