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