aboutsummaryrefslogtreecommitdiff
path: root/Perl/demos/Tk/demos/zinc_lib/contours.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Perl/demos/Tk/demos/zinc_lib/contours.pl')
-rw-r--r--Perl/demos/Tk/demos/zinc_lib/contours.pl202
1 files changed, 0 insertions, 202 deletions
diff --git a/Perl/demos/Tk/demos/zinc_lib/contours.pl b/Perl/demos/Tk/demos/zinc_lib/contours.pl
deleted file mode 100644
index db0b960..0000000
--- a/Perl/demos/Tk/demos/zinc_lib/contours.pl
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/perl -w
-# $Id$
-# This simple demo has been developped by C. Mertz <mertz@cena.fr>
-
-package contours; # for avoiding symbol collision between different demos
-
-use Tk;
-use Tk::Zinc;
-
-use strict;
-
-use vars qw( $VERSION );
-($VERSION) = sprintf("%d.%02d", q$Revision$ =~ /(\d+)\.(\d+)/);
-
-my $mw = MainWindow->new();
-
-# The explanation displayed when running this demo
-my $text = $mw->Text(-relief => 'sunken', -borderwidth => 2,
- -setgrid => 'true', -height => 9);
-$text->pack(qw/-expand yes -fill both/);
-
-$text->insert('0.0',
-'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 combined with 7 circles, with \'positive\' -fillrule.
-The following operations are possible:
- - "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,
- -font => "10x20", # usually fonts are sets in resources
- # but for this example it is set in the code!
- -borderwidth => 3, -relief => 'sunken',
- )->pack;
-
-
-# Creation of 2 items NOT visible, but used for creating visible
-# curves[1-5] with more than one contours.
-# The center of these 2 items is 200,100
-my $curve0 = $zinc->add('curve', 1, [ [300,0], [400,100, 'c'], [300,200], [200,300,'c'], [100,200], [0,100,'c'], [100,0], ],
- -closed => 1, -visible => 0, -filled => 1,
- );
-my $cercle100 = $zinc->add('arc', 1, [130,30, 280,180],
- -visible => 0,
- );
-
-# cloning curve0 as curve1 and moving it
-my $curve1 = $zinc->clone($curve0, -visible => 1, -fillcolor => "firebrick1");
-# adding a 'difference' contour to the curve1
-$zinc->contour($curve1, 'add', +1, $cercle100);
-
-
-# cloning curve0 as curve2 and moving it
-# creating a curve without contour to control contour clockwise/counterclockwise
-my $curve2 = $zinc->add('curve', 1, [], -closed => 1, -filled => 1,
- -visible => 1, -fillcolor => "lightblue2", -fillrule => 'positive');
-$zinc->contour($curve2, 'add', -1, $curve0); ## why must the flag be -1 and not -1 !?
-# adding the left ear of mickey mouse!
-$zinc->translate($curve2,100,90);
-# adding the right ear of mickey mouse!
-$zinc->contour($curve2, 'add', +1, $cercle100);
-
-$zinc->translate($curve2,-200,0);
-# adding an 'intersection' contour to the curve2
-$zinc->contour($curve2, 'add', +1, $cercle100);
-
-# ... translate to make it more visible
-$zinc->translate($curve2, 320,20);
-
-
-# cloning curve0 as curve3 and moving it
-my $curve3 = $zinc->clone($curve0, -visible => 1, -fillcolor => "yellow3");
-$zinc->translate($curve3,0,290);
-# adding an 'union' contour to the curve3
-$zinc->contour($curve3, 'add', +1, $cercle100);
-# ... translate to make it more visible
-$zinc->translate($curve3, -130,00);
-
-
-
-
-# cloning curve0 as curve4 and moving it slightly
-my $curve4 = $zinc->clone($curve0, -visible => 1, -fillcolor => "grey50",
- -tags => ["grouped"],
- -fillrule => 'positive',
- # the tag "grouped" is used for both curve4 and
- # a handle (see just below)
- # It is used for translating both easily
- );
-
-my $index = 2; ## index of the vertex associated to the handle
-my ($x,$y) = $zinc->coords($curve4,0,$index);
-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 curve4
-$zinc->contour($curve4, 'add', +1, $cercle100);
-$zinc->translate('grouped',110,0);
-$zinc->contour($curve4, 'add', +1, $cercle100);
-$zinc->translate('grouped',-220,0);
-$zinc->contour($curve4, 'add', +1, $cercle100);
-$zinc->translate('grouped',110,80);
-$zinc->contour($curve4, 'add', -1, $cercle100);
-$zinc->translate('grouped',0,-160);
-$zinc->contour($curve4, 'add', +1, $cercle100);
-
-$zinc->translate('grouped',200,80);
-$zinc->contour($curve4, 'add', +1, $cercle100);
-$zinc->translate('grouped',-350,0);
-$zinc->contour($curve4, 'add', +1, $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
- $zinc->bind($item, '<ButtonPress-1>' => [\&press, $item, \&motion]);
- $zinc->bind($item, '<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 curve4
-$zinc->bind($handle, '<ButtonPress-1>' => [\&press, $handle, \&moveHandle]);
-$zinc->bind($handle, '<ButtonRelease-1>' => \&release);
-
-# callback for starting a drag
-my ($x_orig, $y_orig);
-sub press {
- my ($zinc, $item, $action) = @_;
- my $ev = $zinc->XEvent();
- $x_orig = $ev->x;
- $y_orig = $ev->y;
- $zinc->Tk::bind('<Motion>', [$action, $item]);
-}
-
-# Callback for moving an item
-sub motion {
- my ($zinc, $item) = @_;
- my $ev = $zinc->XEvent();
- my $x = $ev->x;
- my $y = $ev->y;
-
- $zinc->translate($item, $x-$x_orig, $y-$y_orig);
- $x_orig = $x;
- $y_orig = $y;
-}
-
-# Callback for moving an item and its handle
-sub motionWithHandle {
- my ($zinc, $item) = @_;
- my $ev = $zinc->XEvent();
- my $x = $ev->x;
- my $y = $ev->y;
-
- my ($tag) = $zinc->itemcget($item, -tags);
- $zinc->translate($tag, $x-$x_orig, $y-$y_orig);
- $x_orig = $x;
- $y_orig = $y;
-}
-
-# 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 {
- my ($zinc, $handle) = @_;
- my $ev = $zinc->XEvent();
- my $x = $ev->x;
- my $y = $ev->y;
-
- $zinc->translate($handle, $x-$x_orig, $y-$y_orig);
-
- my ($vertxX,$vertxY) = $zinc->coords($curve4,0,$index);
- $zinc->coords($curve4,0,$index, [$vertxX+($x-$x_orig), $vertxY+($y-$y_orig)]);
- $x_orig = $x;
- $y_orig = $y;
-}
-
-# Callback when releasing the mouse button. It removes any motion callback
-sub release {
- my ($zinc) = @_;
- $zinc->Tk::bind('<Motion>', '');
-}
-
-Tk::MainLoop();
-
-
-1;