Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

QuickGraph




Существует прекрасная бесплатная библиотека для работы с графами – QuickGraph. Работа с графами в этой библиотека реализована очень просто.

Импортируем пространство имен:
Imports QuickGraph

Объявляем граф:
Dim graph As New BidirectionalGraph(Of Object, IEdge(Of Object))

Как ранее было сказано, компьютеры – это узлы нашего графа. Добавляем узел:
graph.AddVertex("ИмяКомпьютера")

Список компьютеров мы возьмем из Active Directory:
Dim de As New DirectoryServices.DirectoryEntry
Dim search As New DirectorySearcher(de)
search.Filter = "(objectCategory=computer)"
Dim results As SearchResultCollection = search.FindAll()
For i As Integer = 0 To results.Count - 1
Dim de2 As DirectoryEntry = results(i).GetDirectoryEntry
Dim ComputerName As String = CType(de2.InvokeGet("cn"), String)
graph.AddVertex(ComputerName)
Next

Замечательно, но полученный результат получился мало похожим на граф. У нас отсутствуют связи между узлами.

Как известно все компьютеры имеют общие точки, с которыми они связаны – маршрутизаторы (роутеры). Возможен вариант, когда локальная сеть не имеет маршрутизатора, но в этом случае ее визуализация достаточно проста.

Каждый компьютер сети напрямую связан с маршрутизатором, адрес которого прописан как шлюз в свойствах сетевой платы компьютера.

Пройдясь по компьютерам при помощи WMI…
Private Function GetGateway(ByVal ComputerName As String) As String
Dim s As String = String.Empty
Dim query As ManagementObjectSearcher
Dim queryCollection As ManagementObjectCollection
Dim msc As ManagementScope = New ManagementScope("\\" + ComputerName + "\root\cimv2")
query = New ManagementObjectSearcher(msc, New SelectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration"))
queryCollection = query.Get()
For Each mObject As ManagementObject In queryCollection
Try
If mObject("DefaultIPGateway").ToString <> "" Then
s = mObject("DefaultIPGateway")(0).ToString
End If
Catch
End Try
Next
Return s
End Function

… получим список всех шлюзов. Добавим их в граф, так же как и компьютеры:
graph.AddVertex("ИмяШлюза")

Одновременно с добавлением узлов, добавим связь между компьютером и шлюзом:
graph.AddEdge(New Edge(Of Object)("ИмяКомпьютера", "ИмяШлюза"))

Вот теперь мы получили граф, но только не визуальный.

Graph#


QuickGraph поддерживает MSAGL, GLEE и Graphviz для визуализации графов, но мы воспользуемся Graph#. Данный фреймворк содержит различные алгоритмы для визуализации графов в WPF приложениях.

Размещаем на форме GraphLayuot контрол из данного фреймворка и пишем простую строку для отображения созданного нами ранее графа:
GraphLayout.Graph = graph
И это все, что нам нужно. Все остальное возьмет на себя Graph#.


Литература





Дата публикования: 2015-03-26; Прочитано: 272 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...