GNU PIC で アクティビティ図

GNU PIC でアクティビティ図 を書く。

GNU PIC でアクティビティ図

.ps 14 # font size
.PS
scale = 2.54; # inch -> cm
arrowwid=0.5;
arrowhead=0;

define branch {[
    box $1 ht $2 wid $3 invisible;
    line from last box.n to last box.e;
    line from last box.n to last box.w;
    line from last box.s to last box.e;
    line from last box.s to last box.w;
]}

define merge {[
    branch($1, $2, $3);
]}

define folk {[
    line right thick 2;
    move to last line.start;
    line left thick 2;
]}

define join {[
    folk();
]}

define spawn {[
    circle fill 1;
]}

define finish {[
    circle rad 0.5 fill 1;
    circle with .c at last circle.c;
]}

down;
Start: spawn();

move to Start.s;
arrow;
Branch: branch("branch", 1, 3);

move to Branch.e;
line right;
arrow down;
Folk: folk();
"folk" ljust at Folk.e + (0.5, 0);

move to 1/2 of the way between Folk.s and Folk.sw;
line down;
line left;
arrow down;
Process: ellipse "process" wid 3;

move to 1/2 of the way between Folk.s and Folk.se;
line dashed 0.1 down;
line dashed 0.1 right;
arrow dashed 0.1 down;
Object: ellipse "<<object>>" "" "object" ht 2 wid 4;

move to (Folk.s.x, Object.s.y - moveht * 2);
Join: join();
"join" ljust at Join.e + (0.5, 0);

line up from 1/2 <Join.n, Join.nw> <-;
line left;
line up to Process.s;

line dashed 0.1 up from 1/2 <Join.n, Join.ne> <-;
line dashed 0.1 right;
line dashed 0.1 up to Object.s;

move to Join.s;
line down;
arrow left;
Merge: merge("merge", 1, 3)  with .e at last arrow.end;

move to Branch.w;
line left;
line down to (last line.end.x, Merge.w.y);
arrow to Merge.w;

arrow down from Merge.s;
finish();

.PE