Нужно создать приложение, которое позволяет пользователю рисовать направленный граф на C#. Обратите внимание – любой направленный граф, а не только дерево или интеллект карту!
Для дальнейшего описания определимся с терминологией. Узлы (или ноды) – вершины графа. Связи – ребра графа.
Узлам должна быть возможность задавать размер, иконки, текст. Во внутреннем представлении узла должно присутствовать текстовое поле Description. Желательно сделать нод такой формы prntscr.com/dk7xfc . Высота у него всегда одинаковая, а длина может меняться в зависимости от длины текста в нем. Из вышесказанного также делаем вывод – текст должен всегда находиться в ноде Для связей нужно иметь возможность задать текст (который лежит на ребре) и оформление. На конце связи (то есть на узле, куда приходит связь) должна быть стрелочка prnt.sc/dk7yea
Требования к внешнему виду: жестких нету, но по возможности посимпатичнее) Чем ближе Mindjet MindManager , тем лучше) Должно поддерживаться: 1. при нажатии на нод он должен просто выделяться (для выделеного пусть будет окаемка какая то специфическая prntscr.com/dkuyg9 ) 2. Перемещение узлов: зажали мышку захватили и несем куда хотим. Когда завершили движение и отпустили мышку – все передвижение закончилось. 3. При клике левой кнопкой мышки на свободном участке экрана – создается нод. 4. при наведении мышки на нод у него на каждой из сторон появляются кружочки (по аналогии как здесь плюсики prntscr.com/dkuxk0 ). Для создания связи между двумя нодами пользователь должен сделать mousedown на одном из кружочков исходного нода и дотянуть мышку до другого нода. Таким образом у нода 4 кружочка и от любого из них может отходить к другим нодам любое количество связей. Связи на других нодах заканчиваются в произвольной локации. 5. Отображение поля Description нода. Создаем панель справа (она ВНЕ поля для рисования нодов). При выделении конкретного нода на панели отображается поле RichTextBox, в котором выводится Description этого нода. Пользователь может его редактировать. При снятии выделения новое значение (отредактированное) автоматически сохраняет как актуальный Description prntscr.com/dkuz6m
Будущее: - Автомасштабирование расположения новых вершин с окружения (других вершин), среди которых они созданы. - Возможность делать дуговые ребра prntscr.com/dml2hu Нарисованный граф должен сериализоваться в xml (и соответственно десериализоваться).
Приложение делаем на C# .NET4 под VS 2012. На выходе – проект с исходниками. Можно юзать любую готовую бесплатную либу. Обсудим варианты готовых решений или технологий на базе которых реализовать. Можно, например, на WPF. После реализации отдельно нужно будет создать документацию.