Revision: 34414
          http://brlcad.svn.sourceforge.net/brlcad/?rev=34414&view=rev
Author:   bob1961
Date:     2009-05-04 19:05:43 +0000 (Mon, 04 May 2009)

Log Message:
-----------
Added code to edit ellipsoid attributes in Archer via the mouse.

Modified Paths:
--------------
    brlcad/trunk/include/ged.h
    brlcad/trunk/src/libged/Makefile.am
    brlcad/trunk/src/libtclcad/ged_obj.c
    brlcad/trunk/src/tclscripts/archer/Archer.tcl
    brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl
    brlcad/trunk/src/tclscripts/archer/EllEditFrame.tcl
    brlcad/trunk/src/tclscripts/archer/GeometryEditFrame.tcl
    brlcad/trunk/src/tclscripts/lib/Ged.tcl

Added Paths:
-----------
    brlcad/trunk/src/libged/scale_ell.c

Modified: brlcad/trunk/include/ged.h
===================================================================
--- brlcad/trunk/include/ged.h  2009-05-04 18:21:09 UTC (rev 34413)
+++ brlcad/trunk/include/ged.h  2009-05-04 19:05:43 UTC (rev 34414)
@@ -80,6 +80,7 @@
 #define GED_MOVE_ARB_EDGE_MODE 9
 #define GED_MOVE_ARB_FACE_MODE 10
 #define GED_ROTATE_ARB_FACE_MODE 11
+#define GED_SCALE_ELL_MODE 12
 
 /**
  * S E M A P H O R E S
@@ -2465,6 +2466,14 @@
 GED_EXPORT BU_EXTERN(int ged_scale, (struct ged *gedp, int argc, const char 
*argv[]));
 
 /**
+ * Scale ellipsoid attribute by sf.
+ *
+ * Usage:
+ *     scale_ell ell a|b|c|3 sf
+ */
+GED_EXPORT BU_EXTERN(int ged_scale_ell, (struct ged *gedp, int argc, const 
char *argv[]));
+
+/**
  * Get/set the output handler script
  *
  * Usage:

Modified: brlcad/trunk/src/libged/Makefile.am
===================================================================
--- brlcad/trunk/src/libged/Makefile.am 2009-05-04 18:21:09 UTC (rev 34413)
+++ brlcad/trunk/src/libged/Makefile.am 2009-05-04 19:05:43 UTC (rev 34414)
@@ -172,6 +172,7 @@
        savekey.c \
        saveview.c \
        scale.c \
+       scale_ell.c \
        search.c \
        set_output_script.c \
        set_transparency.c \

Added: brlcad/trunk/src/libged/scale_ell.c
===================================================================
--- brlcad/trunk/src/libged/scale_ell.c                         (rev 0)
+++ brlcad/trunk/src/libged/scale_ell.c 2009-05-04 19:05:43 UTC (rev 34414)
@@ -0,0 +1,146 @@
+/*                         S C A L E _ E L L . C
+ * BRL-CAD
+ *
+ * Copyright (c) 2008-2009 United States Government as represented by
+ * the U.S. Army Research Laboratory.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this file; see the file named COPYING for more
+ * information.
+ */
+/** @file scale_ell.c
+ *
+ * The scale_ell command.
+ *
+ */
+
+#include "common.h"
+
+#include <string.h>
+#include "bio.h"
+
+#include "cmd.h"
+#include "rtgeom.h"
+#include "raytrace.h"
+
+#include "./ged_private.h"
+
+
+int
+ged_scale_ell(struct ged *gedp, int argc, const char *argv[])
+{
+    struct rt_db_internal intern;
+    struct rt_ell_internal *ell;
+    fastf_t sf;
+    mat_t mat;
+    char *last;
+    struct directory *dp;
+    static const char *usage = "ell a|b|c|3 sf";
+
+    GED_CHECK_DATABASE_OPEN(gedp, BRLCAD_ERROR);
+    GED_CHECK_READ_ONLY(gedp, BRLCAD_ERROR);
+    GED_CHECK_ARGC_GT_0(gedp, argc, BRLCAD_ERROR);
+
+    /* initialize result */
+    bu_vls_trunc(&gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_HELP;
+    }
+
+    if (argc != 4) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_ERROR;
+    }
+
+    if (argv[2][1] != '\0') {
+       bu_vls_printf(&gedp->ged_result_str, "bad ell attribute - %s", argv[2]);
+       return BRLCAD_ERROR;
+    }
+
+    if (sscanf(argv[3], "%lf", &sf) != 1 ||
+       sf <= SQRT_SMALL_FASTF) {
+       bu_vls_printf(&gedp->ged_result_str, "bad scale factor - %s", argv[3]);
+       return BRLCAD_ERROR;
+    }
+
+    if ((last = strrchr(argv[1], '/')) == NULL)
+       last = (char *)argv[1];
+    else
+       ++last;
+
+    if (last[0] == '\0') {
+       bu_vls_printf(&gedp->ged_result_str, "illegal input - %s", argv[1]);
+       return BRLCAD_ERROR;
+    }
+
+    if ((dp = db_lookup(gedp->ged_wdbp->dbip, last, LOOKUP_QUIET)) == 
DIR_NULL) {
+       bu_vls_printf(&gedp->ged_result_str, "%s not found", argv[1]);
+       return BRLCAD_ERROR;
+    }
+
+    if (wdb_import_from_path2(&gedp->ged_result_str, &intern, argv[1], 
gedp->ged_wdbp, mat) == BRLCAD_ERROR)
+       return BRLCAD_ERROR;
+
+    if (intern.idb_major_type != DB5_MAJORTYPE_BRLCAD ||
+       intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_ELL) {
+       bu_vls_printf(&gedp->ged_result_str, "Object not an ELL");
+       rt_db_free_internal(&intern, &rt_uniresource);
+
+       return BRLCAD_ERROR;
+    }
+
+    ell = (struct rt_ell_internal *)intern.idb_ptr;
+    RT_ELL_CK_MAGIC(ell);
+
+    switch (argv[2][0]) {
+    case 'a':
+    case 'A':
+       VSCALE(ell->a, ell->a, sf);
+       break;
+    case 'b':
+    case 'B':
+       VSCALE(ell->b, ell->b, sf);
+       break;
+    case 'c':
+    case 'C':
+       VSCALE(ell->c, ell->c, sf);
+       break;
+    case '3':
+       VSCALE(ell->a, ell->a, sf);
+       VSCALE(ell->b, ell->b, sf);
+       VSCALE(ell->c, ell->c, sf);
+       break;
+    default:
+       bu_vls_printf(&gedp->ged_result_str, "bad ell attribute - %s", argv[2]);
+       rt_db_free_internal(&intern, &rt_uniresource);
+
+       return BRLCAD_ERROR;
+    }
+
+    GED_DB_PUT_INTERNAL(gedp, dp, &intern, &rt_uniresource, BRLCAD_ERROR);
+
+    return BRLCAD_OK;
+}
+
+
+/*
+ * Local Variables:
+ * tab-width: 8
+ * mode: C
+ * indent-tabs-mode: t
+ * c-file-style: "stroustrup"
+ * End:
+ * ex: shiftwidth=4 tabstop=8
+ */


Property changes on: brlcad/trunk/src/libged/scale_ell.c
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Modified: brlcad/trunk/src/libtclcad/ged_obj.c
===================================================================
--- brlcad/trunk/src/libtclcad/ged_obj.c        2009-05-04 18:21:09 UTC (rev 
34413)
+++ brlcad/trunk/src/libtclcad/ged_obj.c        2009-05-04 19:05:43 UTC (rev 
34414)
@@ -278,6 +278,12 @@
                          ged_func_ptr  func,
                          const char    *usage,
                          int           maxargs);
+static int go_mouse_scale_ell(struct ged       *gedp,
+                             int               argc,
+                             const char        *argv[],
+                             ged_func_ptr      func,
+                             const char        *usage,
+                             int               maxargs);
 static int go_mouse_trans(struct ged   *gedp,
                          int           argc,
                          const char    *argv[],
@@ -362,6 +368,12 @@
                          ged_func_ptr  func,
                          const char    *usage,
                          int           maxargs);
+static int go_scale_ell_mode(struct ged        *gedp,
+                         int           argc,
+                         const char    *argv[],
+                         ged_func_ptr  func,
+                         const char    *usage,
+                         int           maxargs);
 static int go_scale_mode(struct ged    *gedp,
                         int            argc,
                         const char     *argv[],
@@ -641,6 +653,7 @@
     {"mouse_rot",      "vname x y", MAXARGS, go_mouse_rot, GED_FUNC_PTR_NULL},
     {"mouse_rotate_arb_face",  "vname obj face v x y", MAXARGS, 
go_mouse_rotate_arb_face, GED_FUNC_PTR_NULL},
     {"mouse_scale",    "vname x y", MAXARGS, go_mouse_scale, 
GED_FUNC_PTR_NULL},
+    {"mouse_scale_ell",        "vname obj a|b|c|3 x y", MAXARGS, 
go_mouse_scale_ell, GED_FUNC_PTR_NULL},
     {"mouse_trans",    "vname x y", MAXARGS, go_mouse_trans, 
GED_FUNC_PTR_NULL},
     {"mv",     (char *)0, MAXARGS, go_pass_through_func, ged_move},
     {"mvall",  (char *)0, MAXARGS, go_pass_through_func, ged_move_all},
@@ -710,6 +723,8 @@
     {"savekey",        "vname filename", 3, go_view_func, ged_savekey},
     {"saveview",       "vname filename", 3, go_view_func, ged_saveview},
     {"sca",    "vname sf", 3, go_view_func, ged_scale},
+    {"scale_ell",      (char *)0, MAXARGS, go_pass_through_func, 
ged_scale_ell},
+    {"scale_ell_mode", "vname obj a|b|c|3 x y", MAXARGS, go_scale_ell_mode, 
GED_FUNC_PTR_NULL},
     {"scale_mode",     "vname x y", MAXARGS, go_scale_mode, GED_FUNC_PTR_NULL},
     {"screen2model",   "vname x y", MAXARGS, go_screen2model, 
GED_FUNC_PTR_NULL},
     {"screen2view",    "vname x y", MAXARGS, go_screen2view, 
GED_FUNC_PTR_NULL},
@@ -3648,7 +3663,6 @@
               int              maxargs)
 {
     int ret;
-    int ac;
     char *av[3];
     fastf_t x, y;
     fastf_t dx, dy;
@@ -3716,12 +3730,11 @@
     bu_vls_printf(&zoom_vls, "%lf", sf);
 
     gedp->ged_gvp = gdvp->gdv_view;
-    ac = 2;
     av[0] = "zoom";
     av[1] = bu_vls_addr(&zoom_vls);
     av[2] = (char *)0;
 
-    ret = ged_zoom(gedp, ac, (const char **)av);
+    ret = ged_zoom(gedp, 2, (const char **)av);
     bu_vls_free(&zoom_vls);
 
     if (ret == BRLCAD_OK)
@@ -3731,6 +3744,101 @@
 }
 
 static int
+go_mouse_scale_ell(struct ged  *gedp,
+                  int          argc,
+                  const char   *argv[],
+                  ged_func_ptr func,
+                  const char   *usage,
+                  int          maxargs)
+{
+    int ret;
+    char *av[6];
+    fastf_t x, y;
+    fastf_t dx, dy;
+    fastf_t sf;
+    fastf_t inv_width;
+    struct bu_vls sf_vls;
+    struct ged_dm_view *gdvp;
+
+    /* initialize result */
+    bu_vls_trunc(&gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_HELP;
+    }
+
+    if (argc != 6) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_ERROR;
+    }
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, &go_current_gop->go_head_views.l)) {
+       if (!strcmp(bu_vls_addr(&gdvp->gdv_name), argv[1]))
+           break;
+    }
+
+    if (BU_LIST_IS_HEAD(&gdvp->l, &go_current_gop->go_head_views.l)) {
+       bu_vls_printf(&gedp->ged_result_str, "View not found - %s", argv[1]);
+       return BRLCAD_ERROR;
+    }
+
+    if (sscanf(argv[4], "%lf", &x) != 1 ||
+       sscanf(argv[5], "%lf", &y) != 1) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_ERROR;
+    }
+
+    dx = x - gdvp->gdv_view->gv_prevMouseX;
+    dy = gdvp->gdv_view->gv_prevMouseY - y;
+
+    gdvp->gdv_view->gv_prevMouseX = x;
+    gdvp->gdv_view->gv_prevMouseY = y;
+
+    if (dx < gdvp->gdv_view->gv_minMouseDelta)
+       dx = gdvp->gdv_view->gv_minMouseDelta;
+    else if (gdvp->gdv_view->gv_maxMouseDelta < dx)
+       dx = gdvp->gdv_view->gv_maxMouseDelta;
+
+    if (dy < gdvp->gdv_view->gv_minMouseDelta)
+       dy = gdvp->gdv_view->gv_minMouseDelta;
+    else if (gdvp->gdv_view->gv_maxMouseDelta < dy)
+       dy = gdvp->gdv_view->gv_maxMouseDelta;
+
+    inv_width = 1.0 / (fastf_t)gdvp->gdv_dmp->dm_width;
+    dx *= inv_width * gdvp->gdv_view->gv_sscale;
+    dy *= inv_width * gdvp->gdv_view->gv_sscale;
+
+    if (fabs(dx) < fabs(dy))
+      sf = 1.0 + dy;
+    else
+      sf = 1.0 + dx;
+
+    bu_vls_init(&sf_vls);
+    bu_vls_printf(&sf_vls, "%lf", sf);
+
+    gedp->ged_gvp = gdvp->gdv_view;
+    av[0] = "scale_ell";
+    av[1] = (char *)argv[2];
+    av[2] = (char *)argv[3];
+    av[3] = bu_vls_addr(&sf_vls);
+    av[4] = (char *)0;
+
+    ret = ged_scale_ell(gedp, 4, (const char **)av);
+    bu_vls_free(&sf_vls);
+
+    if (ret == BRLCAD_OK) {
+       av[0] = "draw";
+       av[1] = (char *)argv[2];
+       av[2] = (char *)0;
+       go_autoview_func(gedp, 2, (const char **)av, ged_draw, (char *)0, 
MAXARGS);
+    }
+
+    return BRLCAD_OK;
+}
+
+static int
 go_mouse_trans(struct ged      *gedp,
               int              argc,
               const char       *argv[],
@@ -4635,6 +4743,65 @@
 }
 
 static int
+go_scale_ell_mode(struct ged   *gedp,
+                 int           argc,
+                 const char    *argv[],
+                 ged_func_ptr  func,
+                 const char    *usage,
+                 int           maxargs)
+{
+    fastf_t x, y;
+    struct bu_vls bindings;
+    struct ged_dm_view *gdvp;
+
+    /* initialize result */
+    bu_vls_trunc(&gedp->ged_result_str, 0);
+
+    /* must be wanting help */
+    if (argc == 1) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_HELP;
+    }
+
+    if (argc != 6) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_ERROR;
+    }
+
+    for (BU_LIST_FOR(gdvp, ged_dm_view, &go_current_gop->go_head_views.l)) {
+       if (!strcmp(bu_vls_addr(&gdvp->gdv_name), argv[1]))
+           break;
+    }
+
+    if (BU_LIST_IS_HEAD(&gdvp->l, &go_current_gop->go_head_views.l)) {
+       bu_vls_printf(&gedp->ged_result_str, "View not found - %s", argv[1]);
+       return BRLCAD_ERROR;
+    }
+
+    if (sscanf(argv[4], "%lf", &x) != 1 ||
+       sscanf(argv[5], "%lf", &y) != 1) {
+       bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage);
+       return BRLCAD_ERROR;
+    }
+
+    gdvp->gdv_view->gv_prevMouseX = x;
+    gdvp->gdv_view->gv_prevMouseY = y;
+    gdvp->gdv_view->gv_mode = GED_SCALE_ELL_MODE;
+
+    bu_vls_init(&bindings);
+    bu_vls_printf(&bindings, "bind %V <Motion> {%V mouse_scale_ell %V %s %s 
%%x %%y}",
+                 &gdvp->gdv_dmp->dm_pathName,
+                 &go_current_gop->go_name,
+                 &gdvp->gdv_name,
+                 argv[2],
+                 argv[3]);
+    Tcl_Eval(go_current_gop->go_interp, bu_vls_addr(&bindings));
+    bu_vls_free(&bindings);
+
+    return BRLCAD_OK;
+}
+
+static int
 go_scale_mode(struct ged       *gedp,
              int               argc,
              const char        *argv[],

Modified: brlcad/trunk/src/tclscripts/archer/Archer.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/Archer.tcl       2009-05-04 18:21:09 UTC 
(rev 34413)
+++ brlcad/trunk/src/tclscripts/archer/Archer.tcl       2009-05-04 19:05:43 UTC 
(rev 34414)
@@ -3757,11 +3757,17 @@
        return
     }
 
-    initEdit
+#    initEdit
 
     foreach dname {ul ur ll lr} {
        set win [$itk_component(ged) component $dname]
-       bind $win <1> "$itk_component(ged) pane_oscale_mode $dname $obj %x %y; 
break"
+
+       if {$GeometryEditFrame::mEditCommand != ""} {
+           bind $win <1> "$itk_component(ged) 
pane_$GeometryEditFrame::mEditCommand\_mode $dname $obj 
$GeometryEditFrame::mEditParam1 %x %y; break"
+       } else {
+           bind $win <1> "$itk_component(ged) pane_oscale_mode $dname $obj %x 
%y; break"
+       }
+
        bind $win <ButtonRelease-1> "[::itcl::code $this endObjScale $dname 
$obj]; break"
     }
 }

Modified: brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl   2009-05-04 18:21:09 UTC 
(rev 34413)
+++ brlcad/trunk/src/tclscripts/archer/ArcherCore.tcl   2009-05-04 19:05:43 UTC 
(rev 34414)
@@ -209,6 +209,7 @@
        method rm                  {args}
        method rmater              {args}
        method rotate_arb_face     {args}
+       method scale_ell           {args}
        method shader              {args}
        method shells              {args}
        method tire                {args}
@@ -393,7 +394,8 @@
                                           mv mvall nmg_collapse nmg_simplify \
                                           ocenter orotate oscale otranslate 
packTree prefix push \
                                           put put_comb putmat pwd r rcodes red 
rfarb rm rmater \
-                                          rotate_arb_face shader shells tire 
title track unhide units unpackTree \
+                                          rotate_arb_face scale_ell shader 
shells tire title track \
+                                          unhide units unpackTree \
                                           vmake wmater xpush Z zap
        }
        variable mUnwrappedDbCommands {}
@@ -3827,6 +3829,10 @@
     eval gedWrapper rotate_arb_face 0 0 1 0 $args
 }
 
+::itcl::body ArcherCore::scale_ell {args} {
+    eval gedWrapper scale_ell 0 0 1 0 $args
+}
+
 ::itcl::body ArcherCore::shader {args} {
     eval gedWrapper shader 0 0 1 0 $args
 }

Modified: brlcad/trunk/src/tclscripts/archer/EllEditFrame.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/EllEditFrame.tcl 2009-05-04 18:21:09 UTC 
(rev 34413)
+++ brlcad/trunk/src/tclscripts/archer/EllEditFrame.tcl 2009-05-04 19:05:43 UTC 
(rev 34414)
@@ -32,14 +32,6 @@
     constructor {args} {}
     destructor {}
 
-    # Methods used by the constructor
-    protected {
-       # override methods in GeometryEditFrame
-       method buildUpperPanel
-       method buildLowerPanel
-       method buildValuePanel
-    }
-
     public {
        # Override what's in GeometryEditFrame
        method initGeometry {gdata}
@@ -48,6 +40,11 @@
     }
 
     protected {
+       common setA 1
+       common setB 2
+       common setC 3
+       common setA,B,C 4
+
        variable mVx ""
        variable mVy ""
        variable mVz ""
@@ -61,8 +58,18 @@
        variable mCy ""
        variable mCz ""
 
+       # Methods used by the constructor
+       # override methods in GeometryEditFrame
+       method buildUpperPanel
+       method buildLowerPanel
+       method buildValuePanel
+
+       method updateValuePanel {}
+
        # Override what's in GeometryEditFrame
        method updateGeometryIfMod {}
+
+       method initValuePanel {}
     }
 
     private {}
@@ -77,6 +84,74 @@
     eval itk_initialize $args
 }
 
+# ------------------------------------------------------------
+#                        OPTIONS
+# ------------------------------------------------------------
+
+
+# ------------------------------------------------------------
+#                      PUBLIC METHODS
+# ------------------------------------------------------------
+
+## - initGeometry
+#
+# Initialize the variables containing the object's specification.
+#
+::itcl::body EllEditFrame::initGeometry {gdata} {
+    set _V [bu_get_value_by_keyword V $gdata]
+    set mVx [lindex $_V 0]
+    set mVy [lindex $_V 1]
+    set mVz [lindex $_V 2]
+    set _A [bu_get_value_by_keyword A $gdata]
+    set mAx [lindex $_A 0]
+    set mAy [lindex $_A 1]
+    set mAz [lindex $_A 2]
+    set _B [bu_get_value_by_keyword B $gdata]
+    set mBx [lindex $_B 0]
+    set mBy [lindex $_B 1]
+    set mBz [lindex $_B 2]
+    set _C [bu_get_value_by_keyword C $gdata]
+    set mCx [lindex $_C 0]
+    set mCy [lindex $_C 1]
+    set mCz [lindex $_C 2]
+
+    GeometryEditFrame::initGeometry $gdata
+}
+
+::itcl::body EllEditFrame::updateGeometry {} {
+    if {$itk_option(-mged) == "" ||
+       $itk_option(-geometryObject) == ""} {
+       return
+    }
+
+    $itk_option(-mged) adjust $itk_option(-geometryObject) \
+       V [list $mVx $mVy $mVz] \
+       A [list $mAx $mAy $mAz] \
+       B [list $mBx $mBy $mBz] \
+       C [list $mCx $mCy $mCz]
+
+    if {$itk_option(-geometryChangedCallback) != ""} {
+       $itk_option(-geometryChangedCallback)
+    }
+}
+
+::itcl::body EllEditFrame::createGeometry {obj} {
+    if {![GeometryEditFrame::createGeometry $obj]} {
+       return
+    }
+
+    $itk_option(-mged) put $obj ell \
+       V [list $mCenterX $mCenterY $mCenterZ] \
+       A [list $mDelta 0 0] \
+       B [list 0 $mDelta 0] \
+       C [list 0 0 $mDelta]
+}
+
+
+# ------------------------------------------------------------
+#                      PROTECTED METHODS
+# ------------------------------------------------------------
+
 ::itcl::body EllEditFrame::buildUpperPanel {} {
     set parent [$this childsite]
     itk_component add ellType {
@@ -135,6 +210,7 @@
     } {}
     itk_component add ellAL {
        ::ttk::label $parent.ellAL \
+           -state disabled \
            -text "A:" \
            -anchor e
     } {}
@@ -166,6 +242,7 @@
     } {}
     itk_component add ellBL {
        ::ttk::label $parent.ellBL \
+           -state disabled \
            -text "B:" \
            -anchor e
     } {}
@@ -197,6 +274,7 @@
     } {}
     itk_component add ellCL {
        ::ttk::label $parent.ellCL \
+           -state disabled \
            -text "C:" \
            -anchor e
     } {}
@@ -294,80 +372,30 @@
 }
 
 ::itcl::body EllEditFrame::buildLowerPanel {} {
-}
+    set parent [$this childsite lower]
 
-::itcl::body EllEditFrame::buildValuePanel {} {
-}
+    foreach attribute {A B C A,B,C} {
+       itk_component add set$attribute {
+           ::ttk::radiobutton $parent.set_$attribute \
+               -variable [::itcl::scope mEditMode] \
+               -value [subst $[subst set$attribute]] \
+               -text "Set $attribute" \
+               -command [::itcl::code $this initValuePanel]
+       } {}
 
-
-# ------------------------------------------------------------
-#                        OPTIONS
-# ------------------------------------------------------------
-
-
-# ------------------------------------------------------------
-#                      PUBLIC METHODS
-# ------------------------------------------------------------
-
-## - initGeometry
-#
-# Initialize the variables containing the object's specification.
-#
-::itcl::body EllEditFrame::initGeometry {gdata} {
-    set _V [bu_get_value_by_keyword V $gdata]
-    set mVx [lindex $_V 0]
-    set mVy [lindex $_V 1]
-    set mVz [lindex $_V 2]
-    set _A [bu_get_value_by_keyword A $gdata]
-    set mAx [lindex $_A 0]
-    set mAy [lindex $_A 1]
-    set mAz [lindex $_A 2]
-    set _B [bu_get_value_by_keyword B $gdata]
-    set mBx [lindex $_B 0]
-    set mBy [lindex $_B 1]
-    set mBz [lindex $_B 2]
-    set _C [bu_get_value_by_keyword C $gdata]
-    set mCx [lindex $_C 0]
-    set mCy [lindex $_C 1]
-    set mCz [lindex $_C 2]
-
-    GeometryEditFrame::initGeometry $gdata
+       pack $itk_component(set$attribute) \
+           -anchor w \
+           -expand yes
+    }
 }
 
-::itcl::body EllEditFrame::updateGeometry {} {
-    if {$itk_option(-mged) == "" ||
-       $itk_option(-geometryObject) == ""} {
-       return
-    }
-
-    $itk_option(-mged) adjust $itk_option(-geometryObject) \
-       V [list $mVx $mVy $mVz] \
-       A [list $mAx $mAy $mAz] \
-       B [list $mBx $mBy $mBz] \
-       C [list $mCx $mCy $mCz]
-
-    if {$itk_option(-geometryChangedCallback) != ""} {
-       $itk_option(-geometryChangedCallback)
-    }
+::itcl::body EllEditFrame::buildValuePanel {} {
 }
 
-::itcl::body EllEditFrame::createGeometry {obj} {
-    if {![GeometryEditFrame::createGeometry $obj]} {
-       return
-    }
-
-    $itk_option(-mged) put $obj ell \
-       V [list $mCenterX $mCenterY $mCenterZ] \
-       A [list $mDelta 0 0] \
-       B [list 0 $mDelta 0] \
-       C [list 0 0 $mDelta]
+::itcl::body EllEditFrame::updateValuePanel {} {
 }
 
 
-# ------------------------------------------------------------
-#                      PROTECTED METHODS
-# ------------------------------------------------------------
-
 ::itcl::body EllEditFrame::updateGeometryIfMod {} {
     if {$itk_option(-mged) == "" ||
        $itk_option(-geometryObject) == ""} {
@@ -438,6 +466,38 @@
     }
 }
 
+::itcl::body EllEditFrame::initValuePanel {} {
+    switch -- $mEditMode \
+       $setA { \
+           set mEditCommand scale_ell; \
+           set mEditClass $EDIT_CLASS_SCALE; \
+           set mEditParam1 a; \
+           configure -valueUnits "mm"; \
+       } \
+       $setB { \
+           set mEditCommand scale_ell; \
+           set mEditClass $EDIT_CLASS_SCALE; \
+           set mEditParam1 b; \
+           configure -valueUnits "mm"; \
+       } \
+       $setC { \
+           set mEditCommand scale_ell; \
+           set mEditClass $EDIT_CLASS_SCALE; \
+           set mEditParam1 c; \
+           configure -valueUnits "mm"; \
+       } \
+       $setA,B,C { \
+           set mEditCommand scale_ell; \
+           set mEditClass $EDIT_CLASS_SCALE; \
+           set mEditParam1 3; \
+           configure -valueUnits "mm"; \
+       }
+
+    GeometryEditFrame::initValuePanel
+    updateValuePanel
+}
+
+
 # Local Variables:
 # mode: Tcl
 # tab-width: 8

Modified: brlcad/trunk/src/tclscripts/archer/GeometryEditFrame.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/archer/GeometryEditFrame.tcl    2009-05-04 
18:21:09 UTC (rev 34413)
+++ brlcad/trunk/src/tclscripts/archer/GeometryEditFrame.tcl    2009-05-04 
19:05:43 UTC (rev 34414)
@@ -399,10 +399,12 @@
 }
 
 ::itcl::body GeometryEditFrame::initValuePanel {} {
-    if {$mEditClass == $EDIT_CLASS_TRANS} {
+    if {$mEditClass == $EDIT_CLASS_ROT} {
+       $::ArcherCore::application setDefaultBindingMode 
$::ArcherCore::OBJECT_ROTATE_MODE
+    } elseif {$mEditClass == $EDIT_CLASS_SCALE} {
+       $::ArcherCore::application setDefaultBindingMode 
$::ArcherCore::OBJECT_SCALE_MODE
+    } elseif {$mEditClass == $EDIT_CLASS_TRANS} {
        $::ArcherCore::application setDefaultBindingMode $mEditLastTransMode
-    } else {
-       $::ArcherCore::application setDefaultBindingMode 
$::ArcherCore::OBJECT_ROTATE_MODE
     }
 }
 

Modified: brlcad/trunk/src/tclscripts/lib/Ged.tcl
===================================================================
--- brlcad/trunk/src/tclscripts/lib/Ged.tcl     2009-05-04 18:21:09 UTC (rev 
34413)
+++ brlcad/trunk/src/tclscripts/lib/Ged.tcl     2009-05-04 19:05:43 UTC (rev 
34414)
@@ -227,6 +227,7 @@
        method mouse_rot {args}
        method mouse_rotate_arb_face {args}
        method mouse_scale {args}
+       method mouse_scale_ell {args}
        method mouse_trans {args}
        method move_arb_edge {args}
        method move_arb_edge_mode {args}
@@ -281,6 +282,7 @@
        method pane_mouse_rot {_pane args}
        method pane_mouse_rotate_arb_face {_pane args}
        method pane_mouse_scale {_pane args}
+       method pane_mouse_scale_ell {_pane args}
        method pane_mouse_trans {_pane args}
        method pane_nirt {_pane args}
        method pane_orient {_pane args}
@@ -315,6 +317,7 @@
        method pane_savekey {_pane args}
        method pane_saveview {_pane args}
        method pane_sca {_pane args}
+       method pane_scale_ell_mode {_pane args}
        method pane_scale_mode {_pane args}
        method pane_set_coord {_pane args}
        method pane_set_fb_mode {_pane args}
@@ -386,6 +389,8 @@
        method savekey {args}
        method saveview {args}
        method sca {args}
+       method scale_ell {args}
+       method scale_ell_mode {args}
        method scale_mode {args}
        method screen2view {args}
        method set_coord {args}
@@ -1250,6 +1255,10 @@
     eval $mGed mouse_scale $itk_component($itk_option(-pane)) $args
 }
 
+::itcl::body cadwidgets::Ged::mouse_scale_ell {args} {
+    eval $mGed mouse_scale_ell $itk_component($itk_option(-pane)) $args
+}
+
 ::itcl::body cadwidgets::Ged::mouse_trans {args} {
     eval $mGed mouse_trans $itk_component($itk_option(-pane)) $args
 }
@@ -1466,6 +1475,10 @@
     eval $mGed mouse_scale $itk_component($_pane) $args
 }
 
+::itcl::body cadwidgets::Ged::pane_mouse_scale_ell {_pane args} {
+    eval $mGed mouse_scale_ell $itk_component($_pane) $args
+}
+
 ::itcl::body cadwidgets::Ged::pane_mouse_trans {_pane args} {
     eval $mGed mouse_trans $itk_component($_pane) $args
 }
@@ -1602,6 +1615,10 @@
     eval $mGed sca $itk_component($_pane) $args
 }
 
+::itcl::body cadwidgets::Ged::pane_scale_ell_mode {_pane args} {
+    eval $mGed scale_ell_mode $itk_component($_pane) $args
+}
+
 ::itcl::body cadwidgets::Ged::pane_scale_mode {_pane args} {
     eval $mGed scale_mode $itk_component($_pane) $args
 }
@@ -1913,6 +1930,14 @@
     eval $mGed screen2view $itk_component($itk_option(-pane)) $args
 }
 
+::itcl::body cadwidgets::Ged::scale_ell {args} {
+    eval $mGed scale_ell $args
+}
+
+::itcl::body cadwidgets::Ged::scale_ell_mode {args} {
+    eval $mGed scale_ell_mode $itk_component($itk_option(-pane)) $args
+}
+
 ::itcl::body cadwidgets::Ged::scale_mode {args} {
     eval $mGed scale_mode $itk_component($itk_option(-pane)) $args
 }


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

------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations 
Conference from O'Reilly Media. Velocity features a full day of 
expert-led, hands-on workshops and two days of sessions from industry 
leaders in dedicated Performance & Operations tracks. Use code vel09scf 
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to