diff options
Diffstat (limited to 'Perl')
-rw-r--r-- | Perl/demos/Tk/demos/zinc_lib/contours.pl | 90 |
1 files changed, 42 insertions, 48 deletions
diff --git a/Perl/demos/Tk/demos/zinc_lib/contours.pl b/Perl/demos/Tk/demos/zinc_lib/contours.pl index 039c159..8907dda 100644 --- a/Perl/demos/Tk/demos/zinc_lib/contours.pl +++ b/Perl/demos/Tk/demos/zinc_lib/contours.pl @@ -13,20 +13,19 @@ my $mw = MainWindow->new(); # The explanation displayed when running this demo my $text = $mw->Scrolled(qw/Text -relief sunken -borderwidth 2 -setgrid true - -height 10 -scrollbars e/); + -height 9 -scrollbars e/); $text->pack(qw/-expand yes -fill both/); $text->insert('0.0', -'All visibles items are made by combinig 2 items using contours: - - the firebrick curve1 has been holed using a diff with a circle, - - the lightblue curve2 is the intersection with a circle, - - the yellow curve3 is the union with a circle, - - the dark green curve4 has benn XORed with a circle, - - the grey curve5 is diff-ed, xor-ed and union-ed with many circle. +'All visibles items are made by combining 2 items using contours: + - the firebrick curve1 has been holed using a addhole with a circle, + - the lightblue curve2 has been "mickey-moused" by adding two circles, + - the yellow curve3 is the union with a disjoint circle, + - the grey curve4 is added to and holed with with many circle. The following operations are possible: - "Mouse Button 1" for dragging objects. - "Mouse Button 1" for dragging the black handle and - modifying the curve5 contour.'); + - "Mouse Button 1" for dragging objects. + - "Mouse Button 1" for dragging the black handle and + modifying the grey curve contour.'); # Creating the zinc widget my $zinc = $mw->Zinc(-width => 600, -height => 500, @@ -42,7 +41,7 @@ my $zinc = $mw->Zinc(-width => 600, -height => 500, my $curve0 = $zinc->add('curve', 1, [0,100 , 100,0, 300,0 , 400,100, 300,200, 100,200], -closed => 1, -visible => 0, -filled => 1, ); -my $cercle100 = $zinc->add('arc', 1, [150,50, 250,150], +my $cercle100 = $zinc->add('arc', 1, [130,30, 280,180], -visible => 0, ); @@ -57,8 +56,13 @@ my $curve2 = $zinc->clone($curve0, -visible => 1, -fillcolor => "lightblue2"); $zinc->translate($curve2,100,90); # adding an 'intersection' contour to the curve2 $zinc->contour($curve2, 'add', $cercle100); + +$zinc->translate($curve2,-200,0); +# adding an 'intersection' contour to the curve2 +$zinc->contour($curve2, 'add', $cercle100); + # ... translate to make it more visible -$zinc->translate($curve2, -10,20); +$zinc->translate($curve2, 320,20); # cloning curve0 as curve3 and moving it @@ -67,53 +71,48 @@ $zinc->translate($curve3,0,290); # adding an 'union' contour to the curve3 $zinc->contour($curve3, 'add', $cercle100); # ... translate to make it more visible -$zinc->translate($curve3, -50,-100); +$zinc->translate($curve3, -130,00); -# cloning curve0 as curve4 and moving it slightly -my $curve4 = $zinc->clone($curve0, -visible => 1, -fillcolor => "DarkGreen"); -$zinc->translate($curve4,-20,-90); -# adding an 'XOR' contour to the curve4 -$zinc->contour($curve4, 'addhole', $cercle100); -# ... translate to make it more visible -$zinc->translate($curve4, 230,130); - - -# cloning curve0 as curve5 and moving it slightly -my $curve5 = $zinc->clone($curve0, -visible => 1, -fillcolor => "grey50", +# cloning curve0 as curve4 and moving it slightly +my $curve4 = $zinc->clone($curve0, -visible => 1, -fillcolor => "grey50", -tags => ["grouped"], - # tag "grouped" of curve5 and a handle (see just below) - # is used for easily translating both + # the tag "grouped" is used for both curve4 and + # a handle (see just below) + # It is used for translating both easily ); -my ($x,$y) = $zinc->coords($curve5,0,1); +my ($x,$y) = $zinc->coords($curve4,0,1); my $handle = $zinc->add('rectangle', 1, [$x-5,$y-5,$x+5,$y+5], -fillcolor => 'black', -filled => 1, -tags => ["grouped"], ); -# adding a 'difference' contour to the curve5 -$zinc->contour($curve5, 'addhole', $cercle100); +# adding a 'difference' contour to the curve4 +$zinc->contour($curve4, 'addhole', $cercle100); $zinc->translate('grouped',110,0); -$zinc->contour($curve5, 'addhole', $cercle100); +$zinc->contour($curve4, 'addhole', $cercle100); $zinc->translate('grouped',-220,0); -$zinc->contour($curve5, 'add', $cercle100); +$zinc->contour($curve4, 'add', $cercle100); $zinc->translate('grouped',110,80); -$zinc->contour($curve5, 'add', $cercle100); +$zinc->contour($curve4, 'add', $cercle100); $zinc->translate('grouped',0,-160); -$zinc->contour($curve5, 'add', $cercle100); +$zinc->contour($curve4, 'add', $cercle100); $zinc->translate('grouped',200,80); -$zinc->contour($curve5, 'addhole', $cercle100); +$zinc->contour($curve4, 'addhole', $cercle100); $zinc->translate('grouped',-350,0); -$zinc->contour($curve5, 'add', $cercle100); +$zinc->contour($curve4, 'add', $cercle100); $zinc->translate('grouped',350,250); +#$zinc->lower('grouped'); # Deleting no more usefull items: curve0 and cercle100: $zinc->remove($curve0, $cercle100); +$zinc->raise($curve1); + # adding drag and drop callback to each visible curve! foreach my $item ($curve1, $curve2, $curve3, $curve4) { # Some bindings for dragging the items @@ -121,11 +120,11 @@ foreach my $item ($curve1, $curve2, $curve3, $curve4) { $zinc->bind($item, '<ButtonRelease-1>' => \&release); } -# adding drag and drop on curve5 which also moves handle -$zinc->bind($curve5, '<ButtonPress-1>' => [\&press, $curve5, \&motionWithHandle]); -$zinc->bind($curve5, '<ButtonRelease-1>' => \&release); +# adding drag and drop on curve4 which also moves handle +$zinc->bind($curve4, '<ButtonPress-1>' => [\&press, $curve4, \&motionWithHandle]); +$zinc->bind($curve4, '<ButtonRelease-1>' => \&release); -# adding drag and drop on handle which also modify curve5 +# adding drag and drop on handle which also modify curve4 $zinc->bind($handle, '<ButtonPress-1>' => [\&press, $handle, \&moveHandle]); $zinc->bind($handle, '<ButtonRelease-1>' => \&release); @@ -164,8 +163,7 @@ sub motionWithHandle { $y_orig = $y; } -# BUG BUG BUG -# Callback for moving the handle and modifying curve5 +# Callback for moving the handle and modifying curve4 # this code is far from being generic. Only for demonstrating how we can # modify a contour with a unique handle! sub moveHandle { @@ -175,12 +173,9 @@ sub moveHandle { my $y = $ev->y; $zinc->translate($handle, $x-$x_orig, $y-$y_orig); - print "Translating of ", $x-$x_orig, ",", $y-$y_orig, "\n"; - # LA LIGNE SUIVANTE EST OK LA 1ERE FOIS ET BUGGUE LES SUIVANTES! - # NB: CELA MARCHOTTE POUR LE CONTOUR 0, MAIS CE N'EST PAS CORRECT! - my ($vertxX,$vertxY) = $zinc->coords($curve5,0,1); - print "Vertex: $vertxX,$vertxY\n"; - $zinc->coords($curve5,0,1, [$vertxX+($x-$x_orig), $vertxY+($y-$y_orig)]); + + my ($vertxX,$vertxY) = $zinc->coords($curve4,0,1); + $zinc->coords($curve4,0,1, [$vertxX+($x-$x_orig), $vertxY+($y-$y_orig)]); $x_orig = $x; $y_orig = $y; } @@ -191,7 +186,6 @@ sub release { $zinc->Tk::bind('<Motion>', ''); } -print "1\n"; Tk::MainLoop(); |