]> mj.ucw.cz Git - anim.git/blob - AA/Net.pm
3b17fdb1b1fdb3a47d675ab7df6538ab5d47ef7c
[anim.git] / AA / Net.pm
1 package AA::NetV;
2
3 our @ISA = ('AA::Vertex');
4
5 sub new($$$$) {
6         my ($class, $id) = @_;
7         my $v = AA::Vertex::new($class, $id);
8         $v->Set('x', 100);
9         $v->DefSet('y0', 100);
10         $v->DefSet('h', 0);
11         $v->DefSet('xs', '');
12         $v->DefSet('hint', 0);
13         $v->Bind('y', sub { $v->Get("y0") - 50*$v->Get("h") });
14         $v->{XS} = AA::Label->new("$id-label");
15         $v->{XS}->MultiSet(
16                 'x' => sub { $v->Get('x') },
17                 'y' => sub { $v->Get('y') + 80 },
18                 'size' => 50,
19                 'text' => sub { $v->Get('xs') },
20                 'color' => sub {
21                         $v->Get('hint') ? [0,1,0] :
22                         $v->Get('xs') ? [1,0,0] : [1,1,1]
23                 },
24         );
25         return $v;
26 }
27
28 package AA::NetE;
29
30 our @ISA = ('AA');
31
32 sub new($$$$) {
33         my ($class, $id, $v, $w) = @_;
34         my $e = AA::new($class, $id);
35         $e->{E} = AA::Edge->new("$id-e", $v, $w);
36         $e->{E}->Set('arrow', 1);
37         $e->{E}->Set('color', [1,0,0]);
38         $e->DefSet('c', 1);
39         $e->DefSet('f', 0);
40         $e->DefSet('d', 9);
41         $e->DefDep('ends', $e->{E}, 'ends');
42         $e->{E}->Bind('width', sub { $e->Get('f') * 5 + 1 });
43 #       $e->{E}->Bind('overshoot', sub { $e->Get('f') * 3 + 3});
44         $e->{E}->Bind('arrow-size', sub { $e->Get('f') * 5 + 20});
45         return $e;
46 }
47
48 sub Draw($$) {
49         my ($e, $cairo) = @_;
50         my ($x1, $y1, $x2, $y2) = @{$e->Get('ends')};
51         $cairo->new_path;
52         $cairo->set_source_rgb(0.3, 1, 0);
53         $cairo->set_line_width($e->Get('c') * 5 + 1);
54         $cairo->move_to($x1, $y1);
55         $cairo->line_to($x2, $y2);
56         $cairo->stroke;
57 }
58
59 1;