Revision: 54060
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54060&view=rev
Author:   bob1961
Date:     2012-12-13 23:09:10 +0000 (Thu, 13 Dec 2012)
Log Message:
-----------
Added the functionality to create bezier curves.

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-13 
22:24:30 UTC (rev 54059)
+++ brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl      2012-12-13 
23:09:10 UTC (rev 54060)
@@ -159,10 +159,12 @@
        method create_bezier {}
        method create_circle {}
        method create_line {}
-       method end_arc {_x _y}
+       method end_arc {_mx _my}
        method end_arc_radius_adjust {_segment _mx _my}
+       method end_bezier {_segment}
        method fix_vertex_references {_unused_vindices}
        method item_pick_highlight {_sx _sy}
+       method next_bezier {_segment _mx _my}
        method pick_arbitrary {_sx _sy}
        method pick_segment {_sx _sy}
        method pick_vertex {_sx _sy}
@@ -174,10 +176,8 @@
        method setup_move_selected {}
        method start_arc_radius_adjust {_segment _mx _my}
        method start_arc {_x _y}
-       method start_bezier {_coord_type _x _y}
-       method start_bezier_pick {_x _y}
+       method start_bezier {_x _y}
        method start_circle {_coord_type _x _y}
-       method start_circle_pick {_x _y}
        method start_line {_coord_type _x _y}
        method start_line_guts {}
        method start_line_pick {_x _y}
@@ -820,6 +820,8 @@
     bind $itk_component(canvas) <Shift-ButtonRelease-1> {}
     bind $itk_component(canvas) <Control-Shift-ButtonPress-1> {}
 
+    bind $itk_component(canvas) <ButtonRelease-2> {}
+
     bind $itk_component(canvas) <ButtonRelease-3> {}
     bind $itk_component(canvas) <Shift-ButtonRelease-3> {}
 }
@@ -1018,6 +1020,7 @@
 
 
 ::itcl::body SketchEditFrame::create_bezier {} {
+    set bezier_indices ""
     clear_canvas_bindings
     bind $itk_component(canvas) <ButtonRelease-1> [code $this start_bezier %x 
%y]
 }
@@ -1070,6 +1073,20 @@
 }
 
 
+::itcl::body SketchEditFrame::end_bezier {_segment} {
+#    drawSegments
+    clear_canvas_bindings
+
+    if {[llength $bezier_indices] < 2} {
+       $::ArcherCore::application putString "A Bezier curve must have at least 
two points"
+       set bezier_indices ""
+       return
+    }
+
+    create_bezier
+}
+
+
 ::itcl::body SketchEditFrame::end_arc_radius_adjust {_segment _mx _my} {
     # screen coordinates
 #    show_coords $_mx $_my
@@ -1168,6 +1185,33 @@
 }
 
 
+::itcl::body SketchEditFrame::next_bezier {_segment _mx _my} {
+    set index [pick_vertex $_mx $_my]
+    if {$index != -1} {
+       if {[llength $bezier_indices] == 2 && [lindex $bezier_indices 0] == 
[lindex $bezier_indices 1]} {
+           set bezier_indices [lrange $bezier_indices 0 0]
+       }
+       lappend bezier_indices $index
+    } else {
+       # screen coords
+       #show_coords $_mx $_my
+       set sx [expr {[$itk_component(canvas) canvasx $_mx] / $myscale}]
+       set sy [expr {-[$itk_component(canvas) canvasy $_my] / $myscale}]
+
+       if {[llength $bezier_indices] == 2 && [lindex $bezier_indices 0] == 
[lindex $bezier_indices 1]} {
+           set bezier_indices [lrange $bezier_indices 0 0]
+       }
+       lappend bezier_indices [llength $VL]
+       lappend VL "$sx $sy"
+       drawVertices
+    }
+
+    $itk_component(canvas) delete ::SketchEditFrame::$_segment
+    $_segment set_vars D [expr [llength $bezier_indices] - 1] P $bezier_indices
+    $_segment draw ""
+}
+
+
 ::itcl::body SketchEditFrame::pick_arbitrary {_sx _sy} {
     set x [$itk_component(canvas) canvasx $_sx]
     set y [$itk_component(canvas) canvasy $_sy]
@@ -1378,11 +1422,33 @@
 }
 
 
-::itcl::body SketchEditFrame::start_bezier {_coord_type _mx _my} {
-}
+::itcl::body SketchEditFrame::start_bezier {_mx _my} {
+    set index [pick_vertex $_mx $_my]
+    if {$index != -1} {
+       set bezier_indices $index
+    } else {
+       # screen coords
+       #show_coords $_mx $_my
+       set sx [expr {[$itk_component(canvas) canvasx $_mx] / $myscale}]
+       set sy [expr {-[$itk_component(canvas) canvasy $_my] / $myscale}]
 
+       set bezier_indices [llength $VL]
+       lappend VL "$sx $sy"
+       drawVertices
+    }
 
-::itcl::body SketchEditFrame::start_bezier_pick {_mx _my} {
+    lappend bezier_indices $bezier_indices
+    set new_seg [Sketch_bezier \#auto $this $itk_component(canvas) \
+                    "D [expr [llength $bezier_indices] - 1] P [list 
$bezier_indices]"]
+    lappend segments ::SketchEditFrame::$new_seg
+    set needs_saving 1
+    drawSegments
+
+    # setup to pick next bezier point
+    bind $itk_component(canvas) <ButtonRelease-1> [code $this next_bezier 
$new_seg %x %y]
+    bind $itk_component(canvas) <ButtonRelease-2> [code $this end_bezier 
$new_seg]
+#    bind $itk_component(coords).x <Return> [code $this next_bezier $new_seg 0 
0 0]
+#    bind $itk_component(coords).y <Return> [code $this next_bezier $new_seg 0 
0 0]
 }
 
 
@@ -1424,10 +1490,6 @@
 }
 
 
-::itcl::body SketchEditFrame::start_circle_pick {_mx _my} {
-}
-
-
 ::itcl::body SketchEditFrame::start_line {_coord_type _mx _my} {
     if {$_coord_type == 1} {
        # screen coords

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