2013-10-11 4 views
0

Я пытаюсь показать атрибуты статусов под меткой узлов.Атрибуты объекта в graphviz

Это в настоящее время, как это:

________________________    ________________________ 
|      | pause() |      | 
|      |------------>|      | 
|      | continue() |      | 
|________________________|<------------|________________________| 

У меня есть код:

 Graph = new Graph<State>(); 
     var a = new State() 
     { 
      Status = "Ready", 
      AllowedPurchaserOperations = "operation1, operation2", 
      AllowedSupplierOperations = "operarion1, operation 3" 
     }; 
     var b = new State() 
     { 
      Status = "Paused", 
      AllowedPurchaserOperations = "operation1, operation2", 
      AllowedSupplierOperations = "operarion1, operation 3" 
     }; 

     Graph.AddVertex(a); 
     Graph.AddVertex(b); 

     Graph.AddEdge(new Edge<State>(a, b) {Label = "pause()"}); 
     Graph.AddEdge(new Edge<State>(b, a) {Label = "continue()"}); 

Я хочу, чтобы показать его более или менее, как это:

________________________    ________________________ 
|   Ready   | pause() |   Paused   | 
| operation1, operation2 |------------>| operation1, operation2 | 
| operation1, operation3 | continue() | operation1, operation3 | 
|________________________|<------------|________________________| 

Как это трудно найти примеры реализации с использованием graphviz, я не знаю, как добавить значения в узлах. Кто-нибудь знает, что я должен сделать, прежде чем преобразовывать его?

+0

Вы используете QuickGraph? – marapet

+0

@marapet Я использую graphviz4net – Th3B0Y

+0

К сожалению, вопрос не был отмечен графиком, а лучше поздно, чем никогда. Краткая статья о настройке элементов графа в WPF: http://graphviz4net.codeplex.com/wikipage?title=Customization%20of%20various%20graph%20elements&referringTitle=Documentation – Steves

ответ

1

Я ничего graphviz4net не знаю, но это довольно легко достичь только с помощью Graphviz-х DOT language использованием clusters:

graph

Файл DOT для этого графа следующим образом:

digraph g{ 

    // Set the graph direction from left to right 
    // otherwise the boxes will be above eachother 
    // with the arrows pointing up and down 
    rankdir="LR" 

    // hide the border of the nodes in the cluster supgraph 
    node [shape = "none"] 

    // make the lines dashed, remove if you want solid lines 
    edge [style = "dashed"] 

    subgraph cluster_ready { 
     label = "Ready" 

     ready_op_1_2 [label="operation1, operation2"] 
     ready_op_1_3 [label="operation1, operation3"] 
    } 

    subgraph cluster_paused { 
     label = "Paused" 

     paused_op_1_2 [label="operation1, operation2"] 
     paused_op_1_3 [label="operation1, operation3"] 
    } 

    ready_op_1_2 -> paused_op_1_2 [label="pause()"] 
    paused_op_1_3 -> ready_op_1_3 [label="continue()"] 
} 

Вы можете довольно легко настроить внешний вид, изменив шрифт, цвет и стиль различных элементов. Чтобы поиграть с ним, я бы предложил использовать GraphViz Workspace, чтобы быстро понять, что делает этот атрибут (и его настройка). attribute manual может быть немного подавляющим, но в нем есть все, что вам нужно.

+0

Ваш ответ прояснился, спасибо. Вы знаете, как я мог установить узел [shape = "none"] в C#? Я использую graphviz4net. – Th3B0Y

+0

Добро пожаловать, рад помочь. К сожалению, у меня нет опыта работы с graphviz4net. Я взглянул на проект, но мне кажется, что это слишком сложный способ переноса Graphviz. Поскольку проект * очень * редко документирован, я также не буду указывать на то, кроме исходного кода :-(Если вы знаете, как изменить цвет для узлов, вы можете установить его в том же цвете, что и фон? подумайте, что ваш синтаксис DOT для [класса AntlrParserAdapter] (http://graphviz4net.codeplex.com/wikipage?title=DOT%20parsing%20with%20Graphviz4Net) может быть вашим лучшим выбором. – Potherca

Смежные вопросы