Блок-схема кампаноўкі з пункту/GraphViz

Я хацеў бы рэалізаваць наступны макет з кропкай:

mockup to be implemented in dot

Да гэтага часу я атрымаў гэта шмат:

digraph G {
graph [rankdir = LR, splines=ortho]

  unit [shape=box, width = 2, height = 10];

  more_different_unit [shape=box, height=4];
  other_unit [shape=box, height=4];


  unit -> other_unit [label = "foo"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> other_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
  unit -> more_different_unit [label = "bar"];
}

Я скампіляваць яго так:

<Р> не кропка -Gsplines = няма test.gv | Neato -n -Gsplines = орта -Tpng -otest.png

Гэта прымушае мяне блізка, але ёсць некалькі рэчаў, якія я хацеў бы ведаць.

  1. Як можна атрымаць блокі злева і справа ад Foo, а не толькі правы? Я не быў у стане зразумець, што яшчэ.

  2. Ці можна паставіць пазнакі рэбраў паслядоўна зверху ці пад край?

  3. Як можна выраўнаваць правыя вузлы злева, а левыя вузлы правільна? Адным з магчымых варыянтаў былі б зрабіць іх такімі жа шырыні, што ўсё будзе ў парадку.

Дзякуй !!

UPDATE:

На падставе прынятага адказу, я цяпер раблю наступнае, якое менавіта тое, што мне было трэба, зноў генеруецца праз кропку канвееры Neato, як ужо згадвалася вышэй:

digraph G {
    graph [rankdir = LR, splines=ortho];

    node[shape=record];
    Bar[label="Bar", height=2];
    Foo[label="Foo", height=4];

    Bew[label="Bew", height=2];
    Gate[label="Gate", height=2];

    Bar -> Foo [label="Bar2Foo"];
    Bar -> Foo [label="Bar2Foo"];
    Bar -> Foo [label="Bar2Foo"];

    Foo -> Bew [label="Foo2Bew"];
    Foo -> Bew [label="Foo2Bew"];
    Bew -> Foo [label="Bew2Foo"];


    Foo -> Gate [label="Foo2Gate"];
    Foo -> Gate [label="Foo2Gate"];
}
13
Вы ведаеце, што ёсць спецыялізаванае праграмнае забеспячэнне, каб зрабіць гэта, ці не так? Пошук «контур» у Ubuntu Software Center дае 13 вынікаў, з якіх каля 4 здаецца правільным для працы. Тады ёсць Inkscape , диам , Skencil , Xara Xtreme , у больш агульным аддзеле вектарных малюнкаў; Калі вам трэба стварыць рэчы дынамічна, падумайце аб выкарыстанні пітона з pySVG і аналагічныя
дададзена аўтар sehe, крыніца
Добра, мы будзем шчасліва апрацоўваць любыя іншыя пытанні, якія могуць паўстаць. Я бы ўдзячны за upvote, калі мая інфармацыя сканчаецца, дапамагаючы вам у рэшце рэшт.
дададзена аўтар sehe, крыніца
Я павінен зрабіць гэта дынамічна, так што кропка ўсё, што я быў у курсе. Я праверу pySVG хоць і паглядзець, калі гэта робіць трук! Дзякуй!
дададзена аўтар Christoph, крыніца
Я upvoted тваё з-за pySVG. Не думаю, што трэба выкарыстоўваць, але добры савет. Яшчэ адзін будзе Tikz, гэта выглядае магутным.
дададзена аўтар Christoph, крыніца
гэта справаздачу Увага: артаганальнай краю ў цяперашні час не апрацоўваць краю этыкеткі. Паспрабуйце выкарыстоўваць xlabels, што гэтая праблема? дзякуй!
дададзена аўтар netawater, крыніца

1 адказы

гэта, каб вы пачалі ці што?

digraph G {
    graph [rankdir = LR];

    node[shape=record];
    Bar[label="{ \"Bar\"|{pin 1|     2|     3|     4|     5} }"];
    Foo[label="{ {data0|data1|data2|data3|data4}|\"Foo\" |{out0|out1|out2|gnd|ex0|hi|lo} }"];

    Bew[label="{ {clk|syn|mux0|mux1|signal}|\"Bew\" |{out0|out1|out2} }"];
    Bar:p1 -> Foo:data0;
    Bar:p2 -> Foo:data1;
    Bar:p3 -> Foo:data2;
    Bar:p4 -> Foo:data3;
    Bar:p5 -> Foo:data4;

    Foo:out0 -> Bew:mux0;
    Foo:out1 -> Bew:mux1;
    Bew:clk -> Foo:ex0;

    Gate[label="{ {a|b}|OR|{a\|b} }"];

    Foo:hi -> Gate:a;
    Foo:lo -> Gate:b;
    Gate:ab -> Bew:signal;
}

enter image description here

Звярніце ўвагу, што я выкарыстаў непарыўныя прабелы як нахабны спосаб атрымаць выраўноўванне (я думаю, я зрабіў <суб> Ск Space Space у Vim, што прыводзіць да Hex 00A0 голец)

You can also employ HTML inside the label definitions, so you can use fonts, colors and create 'spacers': http://www.graphviz.org/doc/info/shapes.html#html

Я мяркую, сумясціўшы пазнакі будзе прасцей з HTML-вузлоў.

19
дададзена
Нічога асаблівага, дададзена больш «ІС для дэманстрацыі
дададзена аўтар sehe, крыніца
Прывітання, і дзякуй за абмен вашых поспехаў
дададзена аўтар sehe, крыніца
Хм, я буду гуляць з ім, дзякуй! Гэта сапраўды нашмат складаней, чым мне трэба, але можа быць альтэрнатывай. Я мяркую, што гэта не вялікая справа, каб дадаць яшчэ адзін блок справа ад Foo?
дададзена аўтар Christoph, крыніца
Прымаецца свой адказ, так як ён атрымаў мяне, што я хацеў, але мой канчатковы вынік трохі адрозніваецца. Я абнавіў свой пытанне з кодам. Дзякуй!
дададзена аўтар Christoph, крыніца