Простой объектно-ориентированный 2D графический фреймворк для использования в Visual C ++? - PullRequest
3 голосов
/ 03 февраля 2009

Мы создаем метод визуального подключения компонентов через графический интерфейс в приложении Visual C ++ (MFC). Простые вещи, такие как нажатие на поля и рисование линий между теми, которые связаны, и хранение информации о них. Проблема в том, что мы делаем все это сами с нуля в GDI, и это быстро становится огромным количеством кода для поддержки.

Мы действительно изобретаем колесо здесь?

Я просматривал в Интернете компоненты, которые предоставляют объектно-ориентированную 2D-структуру (здесь интересна векторная графика). Объектно-ориентированный в том смысле, что квадрат на экране является квадратным объектом в коде или, по крайней мере, вы можете хранить пользовательскую информацию на графическом объекте. Он должен поддерживать извлечение информации о позициях объектов и т. Д. В коде, чтобы рисовать линии между объектами, и определять, находится ли мышь над объектом или нет.

Не очень сложные вещи, но становится довольно сложным и сложным в обслуживании, если есть сотни или тысячи строк, которые нужно поддерживать только потому, что вы написали все это сами, не говоря уже о возможности появления ошибок, которых можно избежать в зрелых рамках.

Ответы [ 5 ]

2 голосов
/ 03 февраля 2009

Может быть излишним, но проверьте это . А также это

2 голосов
/ 03 февраля 2009

Вы смотрели на direct2d, который является своего рода заменой gdi. http://blogs.technet.com/thomasolsen/archive/2008/10/29/introducing-the-microsoft-direct2d-api.aspx http://msdn.microsoft.com/en-us/library/dd370990(VS.85).aspx

0 голосов
/ 07 февраля 2009

Описание «рисования объектов и их соединения», звучит смутно, как то, что обрабатывает Fig (xfig / winfig / et al).

Другим продуктом, который может соответствовать цели (хотя и по цене), является Visio - Microsoft Office Visio SDK (см. http://office.microsoft.com/en-us/visio/HA101656401033.aspx), предположительно, довольно богатый.

Однако я не смотрел ни фига, ни Visio с точки зрения программиста, поэтому я понятия не имею, как выглядит базовый код или подходит ли он для ваших целей ... Но я думаю, что они оба являются хорошей отправной точкой для вдохновение. Возможно, есть еще одна библиотека графиков / диаграмм, которая может подойти вам.

Кстати, во время этой работы я наткнулся на AGD - автоматическое рисование графика на http://www.ads.tuwien.ac.at/research/graphDrawing.html. Опять же, не уверен, насколько это подходит для вашей конкретной ситуации, но это показалось достаточно интересным. укажите на это.

Удачи!

0 голосов
/ 03 февраля 2009

Я уверен, что вы отправитесь с ОО пакетом, но не ожидайте чудес. И вот почему.

Я предполагаю, что вы начинаете с некоторых данных приложения, набора объектов приложения, давайте назовем их объектами A.

Вы можете использовать пакет ОО графических объектов для представления графического представления объектов А, вызвать этот новый набор объектов G.

Теперь у вас есть два набора объектов, A и G, каждый из которых может динамически меняться, и вы столкнулись с проблемой поддержания их в правильном соответствии. Мало того, что вы должны генерировать G из A, вы должны изменить G, когда A меняется, и измените A, когда G изменится. Это требует большого количества кода, управляемого событиями, и вы никогда не можете быть уверены, что правильно обработали каждый случай. Вы можете легко попасть в ситуации, когда вы видите , а не , что вы получаете. (WYSINWYG)

У меня есть два предложения:

  • Что вы делаете

Имейте подпрограмму "рисования", которая непосредственно отображает объекты A (используя "blt", если вы хотите избежать мигания). Прикрепите простую графическую информацию к объектам A, например, положение и размер экрана. Самостоятельно обрабатывайте события мыши для выделения, перетаскивания, создания проводов и т. Д. Это может показаться большим трудом, но позволяет избежать всех проблем со связью, с которыми вы сталкиваетесь при избыточных наборах объектов. И у вас есть полный контроль над кодом.

Это общая методика управления избыточными наборами объектов. Тем не менее, он имеет жесткую кривую обучения. Большинство программистов не до этого, но это уменьшает код и гарантирует правильность.

0 голосов
/ 03 февраля 2009

В качестве библиотеки SVG, которая выглядит полезной (спасибо Малкокоглу за идею!), Я нашел такую: libboard . Простота в примерах кода выглядит потрясающе; моя единственная оставшаяся проблема заключается в том, чтобы пользователь взаимодействовал со своими сгенерированными чертежами SVG. : / AFAIK, он даже не включает рендер, тем более метод взаимодействия с его рисунком. Я не уверен, что хочу сам разработать SVG-парсер для контроля этих потребностей. Но простота кода для программной сборки чертежей выглядит как раз то, что мне нужно. Хм.

...