Revision: 54171
          http://brlcad.svn.sourceforge.net/brlcad/?rev=54171&view=rev
Author:   bob1961
Date:     2013-01-14 20:35:44 +0000 (Mon, 14 Jan 2013)
Log Message:
-----------
The following tweaks are for Archer's sketch editor. Update the sketch panel 
when the units are changed. Use bboxVerts to get the bounding box instead of 
calling the canvas' bbox method. This results in a better initial scale factor 
for the sketch view.  Hook the edit panel entries to non-array variables. Other 
minor tweaks.

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

Modified: brlcad/trunk/src/tclscripts/archer/Archer.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/Archer.tcl       2013-01-14 20:21:02 UTC 
(rev 54170)
+++ brlcad/trunk/src/tclscripts/archer/Archer.tcl       2013-01-14 20:35:44 UTC 
(rev 54171)
@@ -1730,6 +1730,10 @@
        set mGridAnchor "$X $Y $Z"
        set mGridRh [expr {$sf * $mGridRh}]
        set mGridRv [expr {$sf * $mGridRv}]
+
+       if {[info exists itk_component(sketchView)]} {
+           $itk_component(sketchView) configure -units $mDbUnits
+       }
     }
 
     return $ret
@@ -7584,8 +7588,9 @@
        -mged $itk_component(ged) \
        -labelFont $mFontText \
        -boldLabelFont $mFontTextBold \
-       -entryFont $mFontText
-    $itk_component(sketchView) initGeometry $odata
+       -entryFont $mFontText \
+       -units $mDbUnits
+    #$itk_component(sketchView) initGeometry $odata
 
     pack $itk_component(sketchView) \
        -expand yes \

Modified: brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl      2013-01-14 
20:21:02 UTC (rev 54170)
+++ brlcad/trunk/src/tclscripts/archer/SketchEditFrame.tcl      2013-01-14 
20:35:44 UTC (rev 54171)
@@ -28,6 +28,8 @@
 ::itcl::class SketchEditFrame {
     inherit GeometryEditFrame
 
+    itk_option define -units units Units ""
+
     constructor {args} {}
     destructor {}
 
@@ -80,9 +82,6 @@
 
     protected {
        variable mSegments {}
-       variable mV
-       variable mA
-       variable mB
        variable mVL {}
        variable mSL {}
 
@@ -97,11 +96,14 @@
        variable mBz ""
 
        variable mAnchorX 0
+       variable mAnchorXLabel "Anchor X (mm)"
        variable mAnchorY 0
+       variable mAnchorYLabel "Anchor Y (mm)"
        variable mDrawGrid 1
        variable mSnapGrid 1
        variable mMajorGridSpacing 5
        variable mMinorGridSpacing 0.5
+       variable mMinorGridSpacingLabel "Minor Grid Spacing (mm)"
        variable mPrevMouseX 0
        variable mPrevMouseY 0
        variable mCanvasCenterX 1
@@ -160,6 +162,7 @@
        method initEditState {}
 
        method applyData {}
+       method bboxVerts {}
        method createSegments {}
        method detailBrowseCommand {_row _col}
        method drawSegments {}
@@ -257,16 +260,26 @@
     bind $itk_component(canvas) <Enter> {::focus %W}
     bind $itk_component(canvas) <Escape> [::itcl::code $this handle_escape]
     bind $itk_component(canvas) <Configure> [::itcl::code $this 
handle_configure]
-
-    set tolocal [$::ArcherCore::application gedCmd base2local]
-    set tobase [$::ArcherCore::application gedCmd local2base]
 }
 
 # ------------------------------------------------------------
 #                        OPTIONS
 # ------------------------------------------------------------
 
+::itcl::configbody SketchEditFrame::units {
+    set mAnchorXLabel "Anchor X ($itk_option(-units))"
+    set mAnchorYLabel "Anchor Y ($itk_option(-units))"
+    set mMinorGridSpacingLabel "Minor Grid Spacing ($itk_option(-units))"
 
+    set tolocal [$::ArcherCore::application gedCmd base2local]
+    set tobase [$::ArcherCore::application gedCmd local2base]
+
+    if {$itk_option(-geometryObject) != ""} {
+       set_canvas
+    }
+}
+
+
 # ------------------------------------------------------------
 #                      PUBLIC METHODS
 # ------------------------------------------------------------
@@ -623,7 +636,7 @@
     itk_component add anchorXL {
        ::ttk::label $parent.anchorxL \
            -anchor e \
-           -text "Anchor X (mm)"
+           -textvariable [::itcl::scope mAnchorXLabel]
     } {}
     itk_component add anchorXE {
        ::ttk::entry $parent.anchorxE \
@@ -636,7 +649,7 @@
     itk_component add anchorYL {
        ::ttk::label $parent.anchoryL \
            -anchor e \
-           -text "Anchor Y (mm)"
+           -textvariable [::itcl::scope mAnchorYLabel]
     } {}
     itk_component add anchorYE {
        ::ttk::entry $parent.anchoryE \
@@ -662,7 +675,7 @@
     itk_component add minorgridL {
        ::ttk::label $parent.minorgridL \
            -anchor e \
-           -text "Minor Grid Spacing (mm)"
+           -textvariable [::itcl::scope mMinorGridSpacingLabel]
     } {}
     itk_component add minorgridE {
        ::ttk::entry $parent.minorgridE \
@@ -809,6 +822,35 @@
 }
 
 
+::itcl::body SketchEditFrame::bboxVerts {} {
+    set minX [expr {pow(2,32) - 1}]
+    set minY $minX
+    set maxX [expr {-$minX - 1}]
+    set maxY $maxX 
+
+    foreach vert $mVL {
+       set xc [lindex $vert 0]
+       set yc [lindex $vert 1]
+       set x [expr {$myscale * $xc}]
+       set y [expr {-$myscale * $yc}]
+
+       if {$x < $minX} {
+           set minX $x
+       } elseif {$x > $maxX} {
+           set maxX $x
+       }
+
+       if {$y < $minY} {
+           set minY $y
+       } elseif {$y > $maxY} {
+           set maxY $y
+       }
+    }
+
+    return [list $minX $minY $maxX $maxY]
+}
+
+
 ::itcl::body SketchEditFrame::createSegments {} {
     foreach seg $mSL {
        set type [lindex $seg 0]
@@ -951,17 +993,17 @@
     set mPrevEditMode 0
     set mLastIndex -1
 
-    set min_max [$itk_component(canvas) bbox segs verts]
+    set min_max [bboxVerts]
     if {[llength $min_max] != 4} {
        set min_max {-1 -1 1 1}
     }
 
-    set tmp_scale1 [expr {double($mCanvasWidth) / ([lindex $min_max 2] - 
[lindex $min_max 0])}]
+    set tmp_scale1 [expr {double($mCanvasWidth) / ([lindex $min_max 2] - 
[lindex $min_max 0]) * 0.5}]
     if {$tmp_scale1 < 0.0} {
        set tmp_scale1 [expr -$tmp_scale1]
     }
 
-    set tmp_scale2 [expr {double($mCanvasHeight) / ([lindex $min_max 3] - 
[lindex $min_max 1])}]
+    set tmp_scale2 [expr {double($mCanvasHeight) / ([lindex $min_max 3] - 
[lindex $min_max 1]) * 0.5}]
     if {$tmp_scale2 < 0.0} {
        set tmp_scale2 [expr -$tmp_scale2]
     }
@@ -1048,18 +1090,33 @@
     foreach {key value} $_gdata {
        switch $key {
            V {
-               for { set index 0 } { $index < 3 } { incr index } {
-                   set mV($index) [expr {$tolocal * [lindex $value $index]}]
+               if {[llength $value] == 3} {
+                   set mVx [expr {$tolocal * [lindex $value 0]}]
+                   set mVy [expr {$tolocal * [lindex $value 1]}]
+                   set mVz [expr {$tolocal * [lindex $value 2]}]
+                   #set mVx [format "%.8f" [expr {$tolocal * [lindex $value 
0]}]]
+                   #set mVy [format "%.8f" [expr {$tolocal * [lindex $value 
1]}]]
+                   #set mVz [format "%.8f" [expr {$tolocal * [lindex $value 
2]}]]
                }
            }
            A {
-               for { set index 0 } { $index < 3 } { incr index } {
-                   set mA($index) [expr {$tolocal * [lindex $value $index]}]
+               if {[llength $value] == 3} {
+                   set mAx [expr {$tolocal * [lindex $value 0]}]
+                   set mAy [expr {$tolocal * [lindex $value 1]}]
+                   set mAz [expr {$tolocal * [lindex $value 2]}]
+                   #set mAx [format "%.8f" [expr {$tolocal * [lindex $value 
0]}]]
+                   #set mAy [format "%.8f" [expr {$tolocal * [lindex $value 
1]}]]
+                   #set mAz [format "%.8f" [expr {$tolocal * [lindex $value 
2]}]]
                }
            }
            B {
-               for { set index 0 } { $index < 3 } { incr index } {
-                   set mB($index) [expr {$tolocal * [lindex $value $index]}]
+               if {[llength $value] == 3} {
+                   set mBx [expr {$tolocal * [lindex $value 0]}]
+                   set mBy [expr {$tolocal * [lindex $value 1]}]
+                   set mBz [expr {$tolocal * [lindex $value 2]}]
+                   #set mBx [format "%.8f" [expr {$tolocal * [lindex $value 
0]}]]
+                   #set mBy [format "%.8f" [expr {$tolocal * [lindex $value 
1]}]]
+                   #set mBz [format "%.8f" [expr {$tolocal * [lindex $value 
2]}]]
                }
            }
            VL {
@@ -1105,11 +1162,15 @@
 
     if {$_adjust_spacing} {
        if {$spacing < 10} {
-           set mMinorGridSpacing [expr {$mMinorGridSpacing * 10}]
-           set spacing [expr {$mMinorGridSpacing * $myscale}]
+           while {$spacing < 10} {
+               set mMinorGridSpacing [format "%.6f" [expr {$mMinorGridSpacing 
* 10}]]
+               set spacing [expr {$mMinorGridSpacing * $myscale}]
+           }
        } elseif {$spacing > 100} {
-           set mMinorGridSpacing [expr {$mMinorGridSpacing * 0.1}]
-           set spacing [expr {$mMinorGridSpacing * $myscale}]
+           while {$spacing > 100} {
+               set mMinorGridSpacing [format "%.6f" [expr {$mMinorGridSpacing 
* 0.1}]]
+               set spacing [expr {$mMinorGridSpacing * $myscale}]
+           }
        }
     }
 
@@ -1139,8 +1200,8 @@
     }
 
     set snap_2 [do_snap_sketch [expr {$_x2 / $myscale}] [expr {$_y2 / 
$myscale}]]
-    set end_x [expr {[lindex $snap_2 0] * $myscale}]
-    set end_y [expr {[lindex $snap_2 1] * $myscale}]
+    set end_x [expr {([lindex $snap_2 0] + 1) * $myscale}]
+    set end_y [expr {([lindex $snap_2 1] + 1) * $myscale}]
 
     set ruler_x [$itk_component(canvas) canvasx 10]
     set ruler_y [$itk_component(canvas) canvasy 15]
@@ -1159,7 +1220,7 @@
            }
 
            if {$y > $ruler_start_y} {
-               set t [format "%.3f" [expr {$y / $myscale}]]
+               set t [format "%.4f" [expr {$y / $myscale}]]
                $itk_component(canvas) create text $ruler_x $y -text $t -anchor 
sw -fill black -tags "grid ruler"
            }
        }
@@ -1175,7 +1236,7 @@
            }
 
            if {$x > $ruler_start_x} {
-               set t [format "%.3f" [expr {$x / $myscale}]]
+               set t [format "%.4f" [expr {$x / $myscale}]]
                $itk_component(canvas) create text $x $ruler_y -text $t -anchor 
center -fill black -tags "grid ruler"
            }
        }
@@ -2154,8 +2215,9 @@
 
 
 ::itcl::body SketchEditFrame::set_canvas {} {
+    set gdata [lrange [$itk_option(-mged) get $itk_option(-geometryObject)] 1 
end]
+
     if {$mDetailMode} {
-       set gdata [lrange [$itk_option(-mged) get $itk_option(-geometryObject)] 
1 end]
        initCanvas $gdata
 
        set i 1
@@ -2165,6 +2227,7 @@
        }
     } else {
        $::ArcherCore::application restoreCanvas
+       initSketchData $gdata
 
        set i 1
        set mEditMode 0
@@ -2684,9 +2747,9 @@
 
 
 ::itcl::body SketchEditFrame::write_sketch_to_db {} {
-    set out "V { [expr {$tobase * $mV(0)}] [expr {$tobase * $mV(1)}] [expr 
{$tobase * $mV(2)}] }"
-    append out " A { [expr {$tobase * $mA(0)}] [expr {$tobase * $mA(1)}] [expr 
{$tobase * $mA(2)}] }"
-    append out " B { [expr {$tobase * $mB(0)}] [expr {$tobase * $mB(1)}] [expr 
{$tobase * $mB(2)}] } VL {"
+    set out "V { [expr {$tobase * $mVx}] [expr {$tobase * $mVy}] [expr 
{$tobase * $mVz}] }"
+    append out " A { [expr {$tobase * $mAx}] [expr {$tobase * $mAy}] [expr 
{$tobase * $mAz}] }"
+    append out " B { [expr {$tobase * $mBx}] [expr {$tobase * $mBy}] [expr 
{$tobase * $mBz}] } VL {"
     foreach vert $mVL {
        append out " { [expr {$tobase * [lindex $vert 0]}] [expr {$tobase * 
[lindex $vert 1]}] }"
     }

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


------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. SALE $99.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122412
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to