Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4714[/thread]

Extremale Koordinaten in Canvas: wie ermitteln?

Leser: 2


<< >> 8 Einträge, 1 Seite
Crian
 2004-02-06 16:38
#46834 #46834
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Ich möchte gern die minimalen und maximalen Koordinaten (des sichtbaren Bereiches oder wie auch immer) einer Canvas ermitteln. Weiß jemand, wie das geht (in Pixeln)?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-02-06 17:25
#46835 #46835
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
$canvas->bbox("all")
Crian
 2004-02-07 00:53
#46836 #46836
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
danke :)

Auf Dich ist immer wieder verlass. Ich hätte das bestimmt auch theoretisch finden können, aber ich muss sagen, dass das Mastering Perl/Tk mir bisher auch nicht viel aufschlußreicher als das Werk von Nancy Walsh alleine ist. Oder gut versteckt, oder ich hab an den falschen Stellen gesucht.

Aber so ein Werk steht und fällt mit der Qualität des Index... ;)

edit: wenn man unter bbox schaut findet mans sofort... aber nicht unter canvas ;-/

Hmmm wenn ich da nachlese, dann gibt mir das einen Ausschnitt in dem alles zu sehen ist, oder? Ich will aber die sichtbare Zeichenfläche (von 0,0 an bis zu den Maximalwerten halt.)

Oder seh ich das falsch?\n\n

<!--EDIT|Crian|1076108205-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Crian
 2004-02-07 01:20
#46837 #46837
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Das bewirkt nichts... bzw. ich krieg kein Ergebnis. Was soll denn da zurückkommen?

Inzwischen hab ich gesehen, dass man x und y-Koordinate der linken oberen Ecke zurückbekommen soll und die Breite und die Höhe. Ich bekomme aber gar nichts ???

Ich versuche es mit

Code: (dl )
1
2
    my ($x, $y, $w, $h) = $Konfig{canvas}->bbox("all");
print "x=$x y=$y w=$w h=$h\n";


und bekomme "x= y= w= h="... ???\n\n

<!--EDIT|Crian|1076110420-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
eisbeer
 2004-02-07 15:47
#46838 #46838
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Gibs mal im Dumper aus, vielleicht is das aufschlussreicher ...
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
coax
 2004-02-07 19:56
#46839 #46839
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Hi Crian du bekommt von bbox nur nichts zurueck wenn es keine Elemente im Canvas gibt.
Beim nicht scrollbaren Canvas ist imho der sichtbare Bereich gleich der Groesze des Canvas.
Beim scrollbaren Canvas vermute ich mal dass du auf die Scrollbars zurueckgreifen musst.

Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
Crian
 2004-02-08 01:06
#46840 #46840
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Ich habe gerade herausgefunden wie es geht:

Code: (dl )
my $geom = $Konfig{canvas}->geometry();


Quelle: Mastering Perl/Tk Chapter 13 p 291
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-02-09 12:34
#46841 #46841
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wie schon geschrieben wurde, bbox kann nur angewandt werden, um die min/max-Koordinaten aller vorhandenen Canvas-Elemente zurueckzugeben --- sehr hilfreich, um dann die scrollregion zu setzen, so dass die Scrollbars die aktuelle Groesse des Canvas reflektieren.

Ein anderes Problem ist das Feststellen der Koordinaten der Ecken in einem scrollbaren Canvas. Dazu verwende ich get_corners:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
=item get_corners

Return the corners of the visible part of the canvas as a list:
(minx, miny, maxx, maxy).  This will not work if the scrollregion is
smaller than the visible region.

=cut

sub get_corners {
    my $c = shift;
    $c->view_to_coords($c->xview, $c->yview);
}

=item view_to_coords($xv1,$xv2,$yv1,$yv2)

Convert the result of xview/yview to coordinates. See comment in
C<get_corners>. The result is the list ($x1,$y1,$x2,$y2). (Please note
that the order is not the same as in the argument list! This is too
make it easier to pass the arguments from xview and yview and to use
the result in a scrollregion configuration.)

=cut

sub view_to_coords {
    my($c,$xv1,$xv2,$yv1,$yv2) = @_;
    my(@scrollregion) = ($Tk::VERSION == 800.017
                         ? $c->cget(-scrollregion)
                         : @{$c->cget(-scrollregion)});
    my $width  = ($scrollregion[2]-$scrollregion[0]);
    my $height = ($scrollregion[3]-$scrollregion[1]);
    ($xv1 * $width + $scrollregion[0],
     $yv1 * $height + $scrollregion[1],
     $xv2 * $width + $scrollregion[0],
     $yv2 * $height + $scrollregion[1],
    );
}


@Board-Programmierer: Das [ perl ]-Tag sollte wohl die Pod-Abschnitte ignorieren. Und Tabulatoren sollten wohl mit Text::Tabs::expand umgewandelt werden...
<< >> 8 Einträge, 1 Seite



View all threads created 2004-02-06 16:38.