rotateObj

$dot scaleObj x y x0 y0 refX refY mode
moves dots according to interactive scaling of containing object

obj method dot scaleObj {x y x0 y0 refX refY {mode both}} {
  set baseHlen [- $refX $x0]
  set hLen [- $x $x0]
  if {$mode eq "vertical"} then {
    set hScale 1.0
  } else {
    set hScale [/ [double $hLen] $baseHlen]
  }
  #
  set baseVlen [- $refY $y0]
  set vLen [- $y $y0]
  if {$mode eq "horizontal"} then {
    set vScale 1.0
  } else {
    set vScale [/ [double $vLen] $baseVlen]
  }
  #
  if {$mode eq "proportional"} then {
    set hScale [max $hScale $vScale]
    set vScale $hScale
  }
  #
  set x1 [my baseX]
  set y1 [my baseY]
  set hDist0 [- $x1 $x0]
  set vDist0 [- $y1 $y0]
  set hDist1 [* $hDist0 $hScale]
  set vDist1 [* $vDist0 $vScale]
  set x2 [+ $x0 $hDist1]
  set y2 [+ $y0 $vDist1]
  $self configure -x $x2 -y $y2
}

© Wolf-Dieter Busch | Home | Sitemap | Urheber | A-Z