diff options
author | didier | 2007-11-09 14:28:40 +0000 |
---|---|---|
committer | didier | 2007-11-09 14:28:40 +0000 |
commit | f922efaa04b8e2ed1eb162bab3422015c1b5bfc9 (patch) | |
tree | 24865a5ef7105b2ad9de75c35fcd19985e263201 /src/MTools | |
parent | d587ffb205c30c978c3f44429266025728616178 (diff) | |
download | mtc-f922efaa04b8e2ed1eb162bab3422015c1b5bfc9.zip mtc-f922efaa04b8e2ed1eb162bab3422015c1b5bfc9.tar.gz mtc-f922efaa04b8e2ed1eb162bab3422015c1b5bfc9.tar.bz2 mtc-f922efaa04b8e2ed1eb162bab3422015c1b5bfc9.tar.xz |
Robustesse pour MMultiSelection MAntiRecouvrement
Ajout d'une fonctionnalite utile pour la reco d'ecriture dans MWritable
Ajout de la possibilite de passer en parametre une fonction "translate" particuliere dans le MMover
Diffstat (limited to 'src/MTools')
-rw-r--r-- | src/MTools/Comp/MAntiRecouvrement.pm | 1 | ||||
-rw-r--r-- | src/MTools/Comp/MMover.pm | 6 | ||||
-rw-r--r-- | src/MTools/Comp/MMultiSelection.pm | 1 | ||||
-rw-r--r-- | src/MTools/Comp/MWritable.pm | 42 |
4 files changed, 46 insertions, 4 deletions
diff --git a/src/MTools/Comp/MAntiRecouvrement.pm b/src/MTools/Comp/MAntiRecouvrement.pm index 04d7caa..b54f669 100644 --- a/src/MTools/Comp/MAntiRecouvrement.pm +++ b/src/MTools/Comp/MAntiRecouvrement.pm @@ -97,6 +97,7 @@ sub addObject { sub removeObject { my ($self, $target) = @_; + return if (!defined $self -> {__objects}); for (my $i = @{$self -> {__objects}} - 1; $i >= 0; $i --) { if (@{$self -> {__objects}} [$i] eq $target) diff --git a/src/MTools/Comp/MMover.pm b/src/MTools/Comp/MMover.pm index 0d2628c..6097bd9 100644 --- a/src/MTools/Comp/MMover.pm +++ b/src/MTools/Comp/MMover.pm @@ -55,6 +55,7 @@ sub new { $self -> recordProperty ('y', 0); $self -> recordProperty ('targets', $targets); $self -> recordProperty ('allower', undef); + $self -> recordProperty ('translate', 'translate'); $self -> mconfigure (%options); @@ -79,17 +80,18 @@ sub setPos { my $dy = $y - $self -> mget ('y'); my $tgs = $self -> mget ('targets'); my @targets; + my $translate_cbk = $self -> mget ('translate'); if (ref ($tgs) eq 'ARRAY') { @targets = @{$tgs}; for (my $i = 0; $i < @targets; $i++) { - $targets [$i] -> translate ($dx, $dy); + $targets [$i] -> $translate_cbk ($dx, $dy); } } else { - $tgs -> translate ($dx, $dy); + $tgs -> $translate_cbk ($dx, $dy); } $self -> mconfigure ('x', $x); $self -> mconfigure ('y', $y); diff --git a/src/MTools/Comp/MMultiSelection.pm b/src/MTools/Comp/MMultiSelection.pm index 0697a73..14c0c26 100644 --- a/src/MTools/Comp/MMultiSelection.pm +++ b/src/MTools/Comp/MMultiSelection.pm @@ -253,6 +253,7 @@ sub addObject { sub removeObject { my ($self, $target, $plan) = @_; if (!defined $plan) {$plan = 0;} + return if (!defined $self -> {__objects} [$plan]); for (my $i = @{$self -> {__objects} [$plan]} - 1; $i >= 0; $i --) { if (@{$self -> {__objects} [$plan]} [$i] eq $target) diff --git a/src/MTools/Comp/MWritable.pm b/src/MTools/Comp/MWritable.pm index 764e384..ec7fbd8 100644 --- a/src/MTools/Comp/MWritable.pm +++ b/src/MTools/Comp/MWritable.pm @@ -37,6 +37,7 @@ package MTools::Comp::MWritable; # * write : force l'ecriture # * end_write : force une fin d'ecriture # * erase : force un effacement +# * getArrayFromCurves : renvoie les coordonnees des curves sous forme de tableau use strict; @@ -101,8 +102,8 @@ sub __endWrite { ($x, $y) = $zinc -> transform ('device', minstance ($self), [$x, $y]); $self -> writing ($x, $y); $self -> notify ('WRITE', $x, $y); - $self -> notify ('END_WRITE'); $self -> endWrite (); + $self -> notify ('END_WRITE'); } else { @@ -247,7 +248,44 @@ sub erase { } } } - +sub getArrayFromCurves { + my ($self,$format) = @_; + my @tab = (); + if (defined $self -> {__curves}) + { + my @curves = @{$self -> {__curves}}; + for (my $i = $#curves; $i >= 0 ; $i --) + { + my $single = ""; + my @points = $zinc -> coords ($curves [$i]); + for (my $j = 0; $j <= $#points; $j ++) + { + if (defined $format && $format eq "RECO") + { + $single .= sprintf" %d %d,",$points[$j]-> [0],$points[$j] -> [1]; + if ($j == $#points) + { + $single .=" break"; + } + } + else + { + $single .= sprintf"\[%d,%d",$points[$j]-> [0],$points[$j] -> [1]; + if (defined $points[$j] -> [2]) + { + $single .= sprintf",%s\]-",$points[$j] -> [2]; + } + else + { + $single .= sprintf"\]-"; + } + } + } + push (@tab,$single); + } + } + return \@tab; +} sub __deleteCurve { my ($self, $index) = @_; $self -> notify ('ERASE', $index); |