Revision: 53354
          http://brlcad.svn.sourceforge.net/brlcad/?rev=53354&view=rev
Author:   bob1961
Date:     2012-10-25 15:17:33 +0000 (Thu, 25 Oct 2012)
Log Message:
-----------
Added cadwidgets::Ged::pane_find_bot_edge_in_face and 
cadwidgets::Ged::pane_find_botpt_in_face. Updated 
cadwidgets::Ged::pane_mouse_find_bot_edge and 
cadwidgets::Ged::pane_mouse_find_botpt to call the new functions.

Modified Paths:
--------------
    brlcad/trunk/src/tclscripts/lib/Ged.tcl

Modified: brlcad/trunk/src/tclscripts/lib/Ged.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/lib/Ged.tcl     2012-10-25 14:46:48 UTC (rev 
53353)
+++ brlcad/trunk/src/tclscripts/lib/Ged.tcl     2012-10-25 15:17:33 UTC (rev 
53354)
@@ -191,6 +191,8 @@
        method faceplate {args}
        method facetize {args}
        method fb2pix {args}
+       method find_bot_edge_in_face {_bot _face _mx _my}
+       method find_botpt_in_face {_bot _face _mx _my}
        method find_pipept {args}
        method fontsize {args}
        method form {args}
@@ -259,8 +261,8 @@
        method mouse_append_pipept {args}
        method mouse_constrain_rot {args}
        method mouse_constrain_trans {args}
-       method mouse_find_bot_edge {args}
-       method mouse_find_botpt {args}
+       method mouse_find_bot_edge {_bot _mx _my}
+       method mouse_find_botpt {_bot _mx _my}
        method mouse_find_pipept {args}
        method mouse_move_arb_edge {args}
        method mouse_move_arb_face {args}
@@ -319,8 +321,10 @@
        method pane_eye {_pane args}
        method pane_eye_pos {_pane args}
        method pane_fb2pix {_pane args}
-       method pane_find_botpt {args}
-       method pane_find_pipept {args}
+       method pane_find_botpt {_pane args}
+       method pane_find_bot_edge_in_face {_pane _bot _face _mx _my}
+       method pane_find_botpt_in_face {_pane _bot _face _mx _my}
+       method pane_find_pipept {_pane args}
        method pane_fontsize {_pane args}
        method pane_get_eyemodel {_pane args}
        method pane_grid {_pane args}
@@ -342,9 +346,9 @@
        method pane_mouse_append_pipept {_pane args}
        method pane_mouse_constrain_rot {_pane args}
        method pane_mouse_constrain_trans {_pane args}
-       method pane_mouse_find_bot_edge {_pane args}
+       method pane_mouse_find_bot_edge {_pane _bot _viewz _mx _my}
        method pane_mouse_find_bot_face {_pane _bot _viewz _mx _my}
-       method pane_mouse_find_botpt {_pane args}
+       method pane_mouse_find_botpt {_pane _bot _viewz _mx _my}
        method pane_mouse_find_pipept {_pane args}
        method pane_mouse_move_arb_edge {_pane args}
        method pane_mouse_move_arb_face {_pane args}
@@ -619,9 +623,9 @@
        method init_data_poly_cont {{_button 1}}
        method init_data_poly_ell {{_button 1}}
        method init_data_poly_rect {{_button 1} {_sflag 0}}
-       method init_find_bot_edge {_obj {_button 1} {_callback {}}}
+       method init_find_bot_edge {_obj {_button 1} {_viewz 1.0} {_callback {}}}
        method init_find_bot_face {_obj {_button 1} {_viewz 1.0} {_callback {}}}
-       method init_find_botpt {_obj {_button 1} {_callback {}}}
+       method init_find_botpt {_obj {_button 1} {_viewz 1.0} {_callback {}}}
        method init_find_pipept {_obj {_button 1} {_callback {}}}
        method init_prepend_pipept {_obj {_button 1} {_callback {}}}
        method init_view_bindings {{_type default}}
@@ -1444,6 +1448,17 @@
     eval $mGed fb2pix $itk_component($itk_option(-pane)) $args
 }
 
+
+::itcl::body cadwidgets::Ged::find_bot_edge_in_face {_bot _face _mx _my} {
+    pane_find_bot_edge_in_face $itk_option(-pane) $_bot $_face $_mx $_my
+}
+
+
+::itcl::body cadwidgets::Ged::find_botpt_in_face {_bot _face _mx _my} {
+    pane_find_botpt_in_face $itk_option(-pane) $_bot $_face $_mx $_my
+}
+
+
 ::itcl::body cadwidgets::Ged::find_pipept {args} {
     eval $mGed find_pipept $itk_component($itk_option(-pane)) $args
 }
@@ -1798,12 +1813,12 @@
     eval $mGed mouse_constrain_trans $itk_component($itk_option(-pane)) $args
 }
 
-::itcl::body cadwidgets::Ged::mouse_find_bot_edge {args} {
+::itcl::body cadwidgets::Ged::mouse_find_bot_edge {_bot _mx _my} {
     eval $mGed mouse_find_bot_edge $itk_component($itk_option(-pane)) $args
 }
 
-::itcl::body cadwidgets::Ged::mouse_find_botpt {args} {
-    eval $mGed mouse_find_botpt $itk_component($itk_option(-pane)) $args
+::itcl::body cadwidgets::Ged::mouse_find_botpt {_bot _mx _my} {
+    eval $mGed mouse_find_botpt $itk_component($itk_option(-pane)) $_bot $_mx 
$_my
 }
 
 ::itcl::body cadwidgets::Ged::mouse_find_pipept {args} {
@@ -2042,10 +2057,112 @@
     eval $mGed fb2pix $itk_component($_pane) $args
 }
 
+
 ::itcl::body cadwidgets::Ged::pane_find_botpt {_pane args} {
     eval $mGed find_botpt $itk_component($_pane) $args
 }
 
+
+::itcl::body cadwidgets::Ged::pane_find_bot_edge_in_face {_pane _bot _face _mx 
_my} {
+    set vertices [$mGed get $_bot V]
+    if {[llength $vertices] < 3} {
+       return
+    }
+
+    set faces [$mGed get $_bot F]
+    if {[llength $faces] <= $_face} {
+       return
+    }
+
+    set flist [lindex $faces $_face]
+
+    set iA [lindex $flist 0]
+    set iB [lindex $flist 1]
+    set iC [lindex $flist 2]
+
+    set A [lindex $vertices $iA]
+    set B [lindex $vertices $iB]
+    set C [lindex $vertices $iC]
+
+    set A [lrange [eval pane_m2v_point $_pane $A] 0 1]
+    set B [lrange [eval pane_m2v_point $_pane $B] 0 1]
+    set C [lrange [eval pane_m2v_point $_pane $C] 0 1]
+
+    set pt [lrange [pane_screen2view $_pane $_mx $_my] 0 1]
+
+    set distAB [bn_dist_pt2_lseg2 $A $B $pt]
+    set distBC [bn_dist_pt2_lseg2 $B $C $pt]
+    set distAC [bn_dist_pt2_lseg2 $A $C $pt]
+
+
+    if {$distAB < $distBC} {
+       if {$distAB < $distAC} {
+           return [list $iA $iB]
+       }
+
+       return [list $iA $iC]
+    }
+
+    if {$distBC < $distAC} {
+       return [list $iB $iC]
+    }
+
+    return [list $iA $iC]
+}
+
+
+::itcl::body cadwidgets::Ged::pane_find_botpt_in_face {_pane _bot _face _mx 
_my} {
+    set vertices [$mGed get $_bot V]
+    if {[llength $vertices] < 3} {
+       return
+    }
+
+    set faces [$mGed get $_bot F]
+    if {[llength $faces] <= $_face} {
+       return
+    }
+
+    set flist [lindex $faces $_face]
+
+    set iA [lindex $flist 0]
+    set iB [lindex $flist 1]
+    set iC [lindex $flist 2]
+
+    set A [lindex $vertices $iA]
+    set B [lindex $vertices $iB]
+    set C [lindex $vertices $iC]
+
+    set viewA [eval pane_m2v_point $_pane $A]
+    set viewB [eval pane_m2v_point $_pane $B]
+    set viewC [eval pane_m2v_point $_pane $C]
+
+    set view [pane_screen2view $_pane $_mx $_my]
+    set viewZ [lindex $view 2]
+
+    set viewA [lreplace $viewA 2 2 $viewZ]
+    set viewB [lreplace $viewB 2 2 $viewZ]
+    set viewC [lreplace $viewC 2 2 $viewZ]
+
+    set deltaA [dist_pt_pt $view $viewA]
+    set deltaB [dist_pt_pt $view $viewB]
+    set deltaC [dist_pt_pt $view $viewC]
+
+    if {$deltaA < $deltaB} {
+       if {$deltaA < $deltaC} {
+           return $iA
+       } else {
+           return $iC
+       }
+    }
+
+    if {$deltaB < $deltaC} {
+       return $iB
+    }
+
+    return $iC
+}
+
+
 ::itcl::body cadwidgets::Ged::pane_find_pipept {_pane args} {
     eval $mGed find_pipept $itk_component($_pane) $args
 }
@@ -2140,9 +2257,19 @@
 }
 
 
-::itcl::body cadwidgets::Ged::pane_mouse_find_bot_edge {_pane args} {
-    set elist [eval $mGed mouse_find_bot_edge $itk_component($_pane) $args]
+::itcl::body cadwidgets::Ged::pane_mouse_find_bot_edge {_pane _bot _viewz _mx 
_my} {
+    if {$_viewz < 0.0} {
+       set elist [eval $mGed mouse_find_bot_edge $itk_component($_pane) $_bot 
$_mx $_my]
+    } else {
+       set face [pane_mouse_find_bot_face $_pane $_bot $_viewz $_mx $_my]
 
+       if {$face == ""} {
+           set elist [$mGed mouse_find_bot_edge $itk_component($_pane) $_bot 
$_mx $_my]
+       } else {
+           set elist [pane_find_bot_edge_in_face $_pane $_bot $face $_mx $_my]
+       }
+    }
+
     if {$mBotEdgeCallback != ""} {
        catch {$mBotEdgeCallback $elist}
     }
@@ -2177,9 +2304,19 @@
 }
 
 
-::itcl::body cadwidgets::Ged::pane_mouse_find_botpt {_pane args} {
-    set i [eval $mGed mouse_find_botpt $itk_component($_pane) $args]
+::itcl::body cadwidgets::Ged::pane_mouse_find_botpt {_pane _bot _viewz _mx 
_my} {
+    if {$_viewz < 0.0} {
+       set i [$mGed mouse_find_botpt $itk_component($_pane) $_bot $_mx $_my]
+    } else {
+       set face [pane_mouse_find_bot_face $_pane $_bot $_viewz $_mx $_my]
 
+       if {$face == ""} {
+           set i [$mGed mouse_find_botpt $itk_component($_pane) $_bot $_mx 
$_my]
+       } else {
+           set i [pane_find_botpt_in_face $_pane $_bot $face $_mx $_my]
+       }
+    }
+
     if {$mBotPointCallback != ""} {
        catch {$mBotPointCallback $i}
     }
@@ -4005,13 +4142,13 @@
 }
 
 
-::itcl::body cadwidgets::Ged::init_find_bot_edge {_obj {_button 1} {_callback 
{}}} {
+::itcl::body cadwidgets::Ged::init_find_bot_edge {_obj {_button 1} {_viewz 
1.0} {_callback {}}} {
     measure_line_erase
 
     set mBotEdgeCallback $_callback
 
     foreach dm {ur ul ll lr} {
-       bind $itk_component($dm) <$_button> "[::itcl::code $this 
pane_mouse_find_bot_edge $dm $_obj %x %y]; focus %W; break"
+       bind $itk_component($dm) <$_button> "[::itcl::code $this 
pane_mouse_find_bot_edge $dm $_obj $_viewz %x %y]; focus %W; break"
        bind $itk_component($dm) <ButtonRelease-$_button> ""
     }
 }
@@ -4029,13 +4166,13 @@
 }
 
 
-::itcl::body cadwidgets::Ged::init_find_botpt {_obj {_button 1} {_callback 
{}}} {
+::itcl::body cadwidgets::Ged::init_find_botpt {_obj {_button 1} {_viewz 1.0} 
{_callback {}}} {
     measure_line_erase
 
     set mBotPointCallback $_callback
 
     foreach dm {ur ul ll lr} {
-       bind $itk_component($dm) <$_button> "[::itcl::code $this 
pane_mouse_find_botpt $dm $_obj %x %y]; focus %W; break"
+       bind $itk_component($dm) <$_button> "[::itcl::code $this 
pane_mouse_find_botpt $dm $_obj $_viewz %x %y]; focus %W; break"
        bind $itk_component($dm) <ButtonRelease-$_button> ""
     }
 }

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


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to