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