Smooth

$line configure -smooth yes
adds direction points, configures canvas item -smooth raw
$line configure -smooth no
removes direction points, configures canvas item -smooth 0

obj configuremethod line -smooth yesNo {
  set tag line$self
  if {$yesNo} then {
    # curvy
    if {[llength [my dots]] == 2} then {
      set x0 [$self firstDot cget -x]
      set y0 [$self firstDot cget -y]
      set x1 [$self lastDot cget -x]
      set y1 [$self lastDot cget -y]
      set xA [expr {$x0 + ($x1 - $x0) / 3}]
      set yA [expr {$y0 + ($y1 - $y0) / 3}]
      set xB [expr {$x0 + ($x1 - $x0) / 3 * 2}]
      set yB [expr {$y0 + ($y1 - $y0) / 3 * 2}]
      set first [$self firstDot]
      set last [$self lastDot]
      $self remove all
      $self add\
        $first [new dot -x $xA -y $yA] [new dot -x $xB -y $yB] $last
    }
    $self canvas itemconfigure $tag -smooth raw
  } else {
    # straight
    $self canvas itemconfigure $tag -smooth no
    my dots [lreplace [my dots] 1 end-1]
  }
  $self canvas coords $tag {*}[$self xy]
}

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