2012-01-24 5 views
3

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

Я создал файл DOT, который будет использоваться набором graphviz, но получившееся изображение непригодно, потому что оно слишком велико. Я не знаю, может ли эта программа быть настроена в соответствии с моими потребностями, потому что у меня есть плоская иерархия с множеством узлов-сестер, поэтому, возможно, мне нужна программа, специально предназначенная для этого (или написать мою собственную). Я попробовал unflatten инструмент, но безуспешно.

This is the test dot file - обратите внимание, что моя программа часто использует 10x эти данные ...

+0

Что такое _should_ подобный организационный график (плоская иерархия), если он был полностью выстроен? – marapet

+0

Вы, конечно, правы, но я надеялся, что это устроено более умным способом, чем я мог бы подумать, например, круг. – Raffaele

ответ

3

Основываясь на ваших комментариях, выполните быстрое тестирование с использованием других алгоритмов компоновки, чем dot. Поскольку вы сказали круг, я пробовал с circo и twopi.

я должен был сделать некоторые незначительные изменения в сценарии тестирования:

  • добавить цвета/формы/стиль/шрифт
  • стиль пользователя и отдел узлы по-разному
  • вставки новой строки между именем и функцией пользователей

Ввод длинного названия отделов на возможно, помогут две линии.

digraph G { 
overlap=false; 
splines=true; 
root="node0"; 

node[colorscheme=paired12, fontsize=11]; 
node0 [shape=house, label="Organizzazione", style="filled", fillcolor=3, color="4", fontsize=20, height=2, 
fontname="Times New Roman Bold"]; 

node[shape=doubleoctagon, style=filled, fillcolor=7, color=8, width=3]; 
node24 [label="C3 TERREMOTO"]; 
node28 [label="E POLIZIA URBANA E PROTEZIONE CIVILE"]; 
node14 [label="D1 SERVIZI SCOLASTICI"]; 
node35 [label="30: PROTOCOLLO ADMIN "]; 
node18 [label="B ECONOMICO E FINANZIARIO"]; 
node22 [label="C ASSETTO E TERRITORIO"]; 
node41 [label="A9 UFFICIO PUBBLICAZIONI"]; 
node38 [label="C1 TECNICO"]; 
node31 [label="A AFFARI GENERALI"]; 
node12 [label="A4 ANAGRAFE E STATO CIVILE"]; 
node20 [label="B1 TRIBUTI"]; 
node16 [label="A5 ELETTORALE E LEVA"]; 
node40 [label="31: PUBBLICAZIONI ALBO UTENTE "]; 
node26 [label="C2a TECNICO"]; 
node9 [label="A3 UFFICIO PROTOCOLLO CENTRALE"]; 

node[shape=box, style=filled, fillcolor="1", color="2", width=2]; 
node0 -> node24; 
node0 -> node28; 
node7 [label="14: ROCCO MARINACCIO\nVISUALIZZATORE"]; 
node0 -> node7; 
node25 [label="27: FRANCESCO MARINO "]; 
node26 -> node25; 
node39 [label="5: CIRO D'EMILIO\nPROTOCOLLATORE"]; 
node20 -> node39; 
node4 [label="15: FRANCESCO PAZIENZA\nVISUALIZZATORE"]; 
node0 -> node4; 
node3 [label="18: ADRIANA NATALE\nVISUALIZZATRICE"]; 
node0 -> node3; 
node42 [label="4: MICHELE ROGATO\nRESP DI REPARTO"]; 
node18 -> node42; 
node29 [label="29: FRANCESCO NOTA "]; 
node28 -> node29; 
node0 -> node14; 
node10 [label="12: STEFANO IEFFA "]; 
node0 -> node10; 
node13 [label="20: ANTONIO MARINO "]; 
node14 -> node13; 
node30 [label="3: PATRIZIA PLATANO\nPROTOCOLLATRICE"]; 
node31 -> node30; 
node1 [label="19: PATRIZIA PLATANO "]; 
node0 -> node1; 
node37 [label="6: GIUSEPPE CEGLIA\nRESP. DI REPARTO"]; 
node38 -> node37; 
node0 -> node35; 
node0 -> node18; 
node23 [label="26: PASQUALE RUSSO "]; 
node24 -> node23; 
node2 [label="17: MICHELE BICCARINO\nVISUALIZZATORE"]; 
node0 -> node2; 
node0 -> node22; 
node0 -> node41; 
node11 [label="21: GIUSEPPE DI FLUMERI "]; 
node12 -> node11; 
node43 [label="9: ROBERTO CAMPANELLA "]; 
node0 -> node43; 
node0 -> node38; 
node0 -> node31; 
node0 -> node12; 
node0 -> node20; 
node17 [label="23: MICHELE IPPOLITO "]; 
node18 -> node17; 
node6 [label="13: ALESSANDRO CAPANO "]; 
node0 -> node6; 
node19 [label="24: SALVATORE DOTO "]; 
node20 -> node19; 
node15 [label="22: BENVENUTA REA "]; 
node16 -> node15; 
node27 [label="28: ANTONIO CAMPANELLA "]; 
node28 -> node27; 
node8 [label="11: PASQUALE PALUMBO "]; 
node9 -> node8; 
node5 [label="16: PAOLO PIETRO TROCCOLA\nVISUALIZZATORE"]; 
node0 -> node5; 
node0 -> node16; 
node21 [label="25: RAFFAELA COFANO "]; 
node22 -> node21; 
node41 -> node40; 
node32 [label="2: MARIA CRISTINA ANELLI\nVISUALIZZATRICE"]; 
node0 -> node32; 
node0 -> node26; 
node33 [label="10: VINCENZO BOTTICELLI "]; 
node0 -> node33; 
node0 -> node9; 
node36 [label="7: ANTONIETTA STRAZZELLA\nRESP. DI REPARTO"]; 
node22 -> node36; 
node34 [label="1: AMBROGIO MASCIA\nAmministratore di sistema"]; 
node9 -> node34; 
node44 [label="8: MARIANO LAUDISI\nVISUALIZZATORE"]; 
node0 -> node44; 
} 

Возможно, вам придется открыть изображения и просмотреть их в оригинальном размере.

Twopi расположение:

graphviz output - twopi

Circo расположение:

graphviz output - circo

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

+0

Спасибо за эти предложения. Я уже пробовал эти команды и, наконец, решил сгруппировать пользователей по подразделениям, чтобы они вписывались в один ящик. Таким образом, график трудно прочитать, когда база данных нетривиальна. Я опубликую полученное изображение как можно скорее – Raffaele

4

язык точка имеет много тонких способов изменения изображения, чтобы сделать его более приятным. Возьмите несколько минут и снимите dot guide. Вы можете установить ограничения на практически любой аспект из соотношения X/Y на странице, отталкивания и компоновки узлов.

Один из пакетов contrib, доступных с помощью Graphviz, - это GVEdit, которое представляет собой небольшое приложение Qt, которое ссылается на библиотеки graphviz - одно окно для редактирования графиков, «нажмите», и оно отобразится в другое окно. Отличный способ мгновенной обратной связи для создания вещей.

+0

График будет сгенерирован программно, поэтому он не должен быть идеальным. Простое использование (также, это очень простой вид диаграммы IMHO). – Raffaele

+2

Правильно. Я предлагаю понять, что для понимания различных аспектов макета вы можете использовать GVEdit - как только вы прибиваете настройки атрибутов, которые набирают нужный размер/layout - тогда вы можете использовать их в качестве шаблона, который вы применяете против программно сгенерированного графика. – synthesizerpatel

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