#!/usr/bin/perl # $Id$ # This simple demo has been developped by C. Schlienger use Tk; use Tk::Zinc; use strict; use constant; my constant $PI=3.1416; my $defaultfont = '-adobe-helvetica-bold-r-normal-*-120-*-*-*-*-*-*'; my $mw = MainWindow->new(); ########################################### # Text zone ########################################### my $text = $mw->Text(-relief => 'sunken', -borderwidth => 2, -height => 4); $text->pack(qw/-expand yes -fill both/); $text->insert('0.0', 'This toy-appli shows rotations on waypoint items. The following operations are possible: Click "<-" for negative rotation Click "->" for positive rotation' ); ########################################### # Zinc ########################################### my $zinc_width=600; my $zinc_height=500; my $zinc = $mw->Zinc(-width => $zinc_width, -height => $zinc_height, -font => "10x20", -borderwidth => 3, -relief => 'sunken', )->pack; ########################################### # Waypoints ########################################### my $wp_group = $zinc->add('group', 1, -visible => 1); my $p1=[200, 200]; my $wp1 = $zinc->add('waypoint',$wp_group, 1, -position => $p1, -connectioncolor => 'green', -symbolcolor => 'blue', -labelformat => 'x20x18+0+0', -leaderwidth=>'0', -labeldx=>'-20' ); $zinc->itemconfigure($wp1, 0, -text => "DO", ); my $p2=[300, 300]; my $wp2 = $zinc->add('waypoint',$wp_group, 1, -position => $p2, -connecteditem => $wp1, -connectioncolor => 'blue', -symbolcolor => 'blue', -labelformat => 'x20x18+0+0', -leaderwidth=>'0', -labeldx=>'-20', #-labeldy=>'30' ); $zinc->itemconfigure($wp2, 0, -text => "RE", ); my $p3=[400, 150]; my $wp3 = $zinc->add('waypoint', $wp_group, 2, -position => $p3, -connecteditem => $wp2, -connectioncolor => 'blue', -symbolcolor => 'blue', -labelformat => 'x20x18+0+0', -leaderwidth=>'0', -labeldx=>'20', -labeldy=>'+10' ); $zinc->itemconfigure($wp3, 0, -text => "MI", ); ################################################### # control panel ################################################### my $rc = $mw->Frame()->pack(); my $left=$rc->Button(-width => 2, -height => 2, -text => '<-', -command=>sub{ #-------------------------------- # Negative rotation #-------------------------------- my @centre=$zinc->coords("$wp2"); #the center of the rotation is $wp2 $zinc->rotate("$wp_group",-$PI/6,$centre[0],$centre[1]); })->pack(-side => 'left'); my $right=$rc->Button(-width => 2, -height => 2, -text => '->', -command=>sub{ #-------------------------------- # Positive rotation #-------------------------------- my @centre=$zinc->coords("$wp2");#the center of the rotation is $wp2 $zinc->rotate("$wp_group",+$PI/6,$centre[0],$centre[1]); })->pack(-side=>'right'); MainLoop;