Revision: 54099
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54099&view=rev
Author:   bob1961
Date:     2012-12-20 12:41:46 +0000 (Thu, 20 Dec 2012)
Log Message:
-----------
This mod will allow a vertex to be combined with another if dropped in close 
proximity.

Modified Paths:
--------------
    brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl

Modified: brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl      2012-12-20 
08:22:54 UTC (rev 54098)
+++ brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl      2012-12-20 
12:41:46 UTC (rev 54099)
@@ -110,6 +110,7 @@
        variable move_start_x
        variable move_start_y
        variable curr_seg ""
+       variable curr_vertex ""
        variable save_entry
        variable angle
        variable bezier_indices ""
@@ -1008,20 +1009,52 @@
 }
 
 
-::itcl::body SketchEditFrame::continue_move {_state _sx _sy} {
-    if {$_state != 2} {
-#      $this show_coords $_sx $_sy
-       set x [$itk_component(canvas) canvasx $_sx]
-       set y [$itk_component(canvas) canvasy $_sy]
+::itcl::body SketchEditFrame::continue_move {_state _mx _my} {
+    if {$curr_vertex != ""} {
+       set index [pick_vertex $_mx $_my p$curr_vertex]
+       if {$index == $curr_vertex} {
+           set index -1
+       }
+    } else {
+       set index -1
+    }
+
+    set slist [vert_is_used $curr_vertex]
+    set slen [llength $slist]
+
+    if {$_state == 0 || $index == -1 || $slen != 1} {
+       set x [$itk_component(canvas) canvasx $_mx]
+       #       $this show_coords $_mx $_my
+       set y [$itk_component(canvas) canvasy $_my]
        set dx [expr $x - $move_start_x]
        set dy [expr $y - $move_start_y]
     } else {
-       set id [$itk_component(canvas) find withtag first_select]
-       set tags [$itk_component(canvas) gettags $id]
-       set index [string range [lindex $tags 0] 1 end]
-       set old_coords [$itk_component(canvas) coords $id]
-       set dx [expr { $x_coord * $myscale - ([lindex $old_coords 0] + [lindex 
$old_coords 2])/2.0}]
-       set dy [expr { -$y_coord * $myscale - ([lindex $old_coords 1] + [lindex 
$old_coords 3])/2.0}]
+       set item $slist
+       set type [$item get_type]
+       set vlist [$item get_verts]
+       set vindex [lsearch $vlist $curr_vertex]
+       switch -- $type {
+           "SketchCArc" -
+           "SketchLine" {
+               if {$vindex == 0} {
+                   $item set_vars S $index
+               } else {
+                   $item set_vars E $index
+               }
+           }
+           "SketchBezier" {
+               set vlist [lreplace $vlist $vindex $vindex $index]
+               $item set_vars P $vlist
+           }
+       }
+
+       set VL [lreplace $VL $curr_vertex $curr_vertex]
+       fix_vertex_references $curr_vertex
+
+       set mEscapeCreate 1
+       set mLastIndex -1
+
+       return
     }
     $itk_component(canvas) move moving $dx $dy
 
@@ -1171,7 +1204,7 @@
        $itk_component(canvas) delete ::SketchEditFrame::$_segment
 
        set vindex [lindex $bezier_indices 0]
-       if {![vert_is_used $vindex]} {
+       if {[vert_is_used $vindex] == {}} {
            set VL [lreplace $VL $vindex $vindex]
            drawVertices
        }
@@ -1309,6 +1342,8 @@
                set curr_seg ""
            }
        }
+
+       set curr_vertex ""
     } else {
        # Strip off the first character
        set item [string range $item 1 end]
@@ -1318,10 +1353,14 @@
        if {[lsearch $ids $pid] == -1} {
            $itk_component(canvas) itemconfigure p$item -fill red -outline red
            $itk_component(canvas) addtag selected withtag p$item
+           set curr_vertex $item
        } else {
            $itk_component(canvas) itemconfigure p$item -fill black -outline 
black
            $itk_component(canvas) dtag p$item selected
+           set curr_vertex ""
        }
+
+       set curr_seg ""
     }
 }
 
@@ -1430,7 +1469,7 @@
     if {$_vflag} {
        set unused_vindices {}
        foreach vindex [lsort -integer -decreasing [$item get_verts]] {
-           if {![vert_is_used $vindex]} {
+           if {[vert_is_used $vindex] == {}} {
                set VL [lreplace $VL $vindex $vindex]
                lappend unused_vindices $vindex
            }
@@ -1608,7 +1647,7 @@
        drawVertices
     }
 
-    set curr_seg [Sketch_bezier \#auto $this $itk_component(canvas) \
+    set curr_seg [SketchBezier \#auto $this $itk_component(canvas) \
                     "D [expr [llength $bezier_indices] - 1] P [list 
$bezier_indices]"]
     lappend segments ::SketchEditFrame::$curr_seg
     $curr_seg draw ""
@@ -1644,7 +1683,7 @@
     set index2 $index1
 
     set radius 0.0
-    set new_seg [Sketch_carc \#auto $this $itk_component(canvas) "S $index1 E 
$index2 R -1 L 0 O 0"]
+    set new_seg [SketchCArc \#auto $this $itk_component(canvas) "S $index1 E 
$index2 R -1 L 0 O 0"]
     lappend segments ::SketchEditFrame::$new_seg
     set needs_saving 1
     continue_circle $new_seg 0 3 $_mx $_my
@@ -1688,7 +1727,6 @@
        }
 
        set index2 $index1
-
        start_line_guts
     }
 }
@@ -1868,7 +1906,7 @@
     set index [pick_vertex $_sx $_sy]
     if {$index == -1} return
 
-    if {[vert_is_used $index]} {
+    if {[vert_is_used $index] != {}} {
        $::ArcherCore::application putString \
            "Cannot delete a vertex being used by a segment."
        $itk_component(canvas) dtag p$index selected
@@ -1882,13 +1920,15 @@
 
 
 ::itcl::body SketchEditFrame::vert_is_used {_vindex} {
+    set slist {}
     foreach seg $segments {
        if {[$seg is_vertex_used $_vindex]} {
-           $seg describe
-           return 1
+           #$seg describe
+           lappend slist $seg
        }
     }
-    return 0
+
+    return $slist
 }
 
 
@@ -1930,6 +1970,7 @@
 }
 
 
+# Fixme: This needs to inherit from a common base class
 class SketchCArc {
     private variable canv
     private variable editor
@@ -1979,6 +2020,10 @@
        return 0
     }
 
+    method get_type {} {
+       return SketchCArc
+    }
+
     method get_verts {} {
        return "$start_index $end_index"
     }
@@ -2174,6 +2219,7 @@
 }
 
 
+# Fixme: This needs to inherit from a common base class
 class SketchBezier {
     private variable canv
     private variable editor
@@ -2195,6 +2241,10 @@
        }
     }
 
+    method get_type {} {
+       return SketchBezier
+    }
+
     method get_verts {} {
        return $index_list
     }
@@ -2282,6 +2332,8 @@
     }
 }
 
+
+# Fixme: This needs to inherit from a common base class
 class SketchLine {
     private variable canv
     private variable editor
@@ -2304,6 +2356,10 @@
        }
     }
 
+    method get_type {} {
+       return SketchLine
+    }
+
     method get_verts {} {
        return "$start_index $end_index"
     }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to