Главная » 2015 » Сентябрь » 14 » Построение графов при помощи NodeXL
10:34
Построение графов при помощи NodeXL
В связи с производственной необходимостью, возникла потребность в компоненте для построения графов. Сходу были найдены вот эти три проекта: http://graphx.codeplex.com/http://graphsharp.codeplex.com/http://nodexl.codeplex.com/Т.к. по картинкам мне больше понравился третий, то его и пробовал. Он оказался неплох. Поэтому под катом рассказ о том, как при помощи NodeXL строить графики в WPF приложениях.На всякий пожарный ссылка на скачивание. Качаем, распакуем, присоединяем dll-ки в проект:Все, можно начинать использовать.Для показа графа используется контрол NodeXLControl из пространства имен Smrf.NodeXL.Visualization.Wpf. Можно его как добавить через XAML, так и создать из кода и поместить в какой-нибудь контейнер. Дополнительных настроек не требуется.Для данной статьи, я создал пустой WPF проект и на главную форму поместил вот такую разметку: >    <Grid>        <node:NodeXLControl  />    </Grid></Window>Ну а теперь, собственно построение графа. Информация о графе собрана в свойстве с говорящим именем Gpaph. Ну а вершины, соответственно, в свойстве Vertices графа. Чтобы постоянно не писать весь путь с имени контрола, можно это свойство скопировать в переменную и работать с Первая"); Да, вы правильно поняли, что второй параметр метода SetValue типа object и во многих случаях придется  угадывать какого типа он должен быть реально по замыслу разработчиков.Ну и еще пара вершин оформленных по Label");Ок, давайте запустим наше приложение. Но перед этим вызовем метод отрисовки графа:nxGraph.DrawGraph(); Вот так это выглядит:Мы можем задавать расположение вершин принудительно.  У каждой вершины есть свойство Location, вот только проблема, это свойство из библиотеки WinForms. Нет, мы можем подключить бибилотеку System.Drawing.dll и написать что-нибудь Из первой во вторую");Аналогично для остальных GroupFirstAndSecond", true, "Тут две вершины");// Вершины объединенные группойoGroup.Vertices.AddFirst(first);oGroup.Vertices.AddLast(second);// Добавляем группу в графnxGraph.Graph.SetValue(ReservedMetadataKeys.GroupInfo, new GroupInfo[] { oGroup });Обратили внимание на признак свернутости? Так вот, он игнорируется... Если сейчас запустить, то мы увидим все тоже самое, что и на предыдущей картинке.Поэтому предлагаю перейти к событиям и на них покажу работу с группами.Событий у вершин, групп и т.д. нет. Все события собраны в контроле. Например, чтобы обрабатывать клик на первой или второй вершине со сворачиванием группы мне придется подписаться на GroupFirstAndSecond", true);    }}Вызов через Dispatcher вынужденная мера, т.к. после сворачивания вершины из графа скрываются и обработка клика падает.Вот так выглядит граф после сворачивания двух вершин:На сегодня все. Может в следующий раз покажу какой-нибудь пример приближенный к реальности на основе этого контрола.
Просмотров: 517 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar