Revision: 33270 http://brlcad.svn.sourceforge.net/brlcad/?rev=33270&view=rev Author: bob1961 Date: 2008-12-03 21:00:43 +0000 (Wed, 03 Dec 2008)
Log Message: ----------- Activate Archer's wizard menu and primitive edit toolbar. Added commands for editing primitives via the mouse to libtclcad's Ged object. Modified Paths: -------------- brlcad/trunk/include/ged.h brlcad/trunk/src/libtclcad/ged_obj.c brlcad/trunk/src/tclscripts/archer/Archer.tcl brlcad/trunk/src/tclscripts/lib/Ged.tcl Modified: brlcad/trunk/include/ged.h =================================================================== --- brlcad/trunk/include/ged.h 2008-12-02 16:38:21 UTC (rev 33269) +++ brlcad/trunk/include/ged.h 2008-12-03 21:00:43 UTC (rev 33270) @@ -74,6 +74,9 @@ #define GED_SCALE_MODE 3 #define GED_CONSTRAINED_ROTATE_MODE 4 #define GED_CONSTRAINED_TRANSLATE_MODE 5 +#define GED_OROTATE_MODE 6 +#define GED_OSCALE_MODE 7 +#define GED_OTRANSLATE_MODE 8 /** * S E M A P H O R E S Modified: brlcad/trunk/src/libtclcad/ged_obj.c =================================================================== --- brlcad/trunk/src/libtclcad/ged_obj.c 2008-12-02 16:38:21 UTC (rev 33269) +++ brlcad/trunk/src/libtclcad/ged_obj.c 2008-12-03 21:00:43 UTC (rev 33270) @@ -218,6 +218,30 @@ ged_func_ptr func, const char *usage, int maxargs); +static int go_mouse_orotate(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); +static int go_mouse_oscale(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); +static int go_mouse_otranslate(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); +static int go_mouse_translate(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); static int go_mouse_ray(struct ged *gedp, int argc, const char *argv[], @@ -248,6 +272,24 @@ ged_func_ptr func, const char *usage, int maxargs); +static int go_orotate_mode(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); +static int go_oscale_mode(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); +static int go_otranslate_mode(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); static int go_paint_rect_area(struct ged *gedp, int argc, const char *argv[], @@ -552,6 +594,9 @@ {"move_arb_face", (char *)0, MAXARGS, go_pass_through_func, ged_move_arb_face}, {"mouse_constrain_rot", "vname coord x y", MAXARGS, go_mouse_constrain_rot, GED_FUNC_PTR_NULL}, {"mouse_constrain_trans", "vname coord x y", MAXARGS, go_mouse_constrain_trans, GED_FUNC_PTR_NULL}, + {"mouse_orotate", "vname obj x y", MAXARGS, go_mouse_orotate, GED_FUNC_PTR_NULL}, + {"mouse_oscale", "vname obj x y", MAXARGS, go_mouse_oscale, GED_FUNC_PTR_NULL}, + {"mouse_otranslate", "vname obj x y", MAXARGS, go_mouse_otranslate, GED_FUNC_PTR_NULL}, {"mouse_ray", "vname x y", MAXARGS, go_mouse_ray, GED_FUNC_PTR_NULL}, {"mouse_rot", "vname x y", MAXARGS, go_mouse_rot, GED_FUNC_PTR_NULL}, {"mouse_scale", "vname x y", MAXARGS, go_mouse_scale, GED_FUNC_PTR_NULL}, @@ -566,8 +611,11 @@ {"open", (char *)0, MAXARGS, go_pass_through_and_refresh_func, ged_reopen}, {"orient", "vname quat", 6, go_view_func, ged_orient}, {"orotate", (char *)0, MAXARGS, go_pass_through_func, ged_orotate}, + {"orotate_mode", "vname obj x y", MAXARGS, go_orotate_mode, GED_FUNC_PTR_NULL}, {"oscale", (char *)0, MAXARGS, go_pass_through_func, ged_oscale}, + {"oscale_mode", "vname obj x y", MAXARGS, go_oscale_mode, GED_FUNC_PTR_NULL}, {"otranslate", (char *)0, MAXARGS, go_pass_through_func, ged_otranslate}, + {"otranslate_mode", "vname obj x y", MAXARGS, go_otranslate_mode, GED_FUNC_PTR_NULL}, {"overlay", (char *)0, MAXARGS, go_autoview_func, ged_overlay}, {"paint_rect_area", "vname", MAXARGS, go_paint_rect_area, GED_FUNC_PTR_NULL}, {"pathlist", (char *)0, MAXARGS, go_pass_through_func, ged_pathlist}, @@ -2760,7 +2808,7 @@ else if (gdvp->gdv_view->gv_maxMouseDelta < dy) dy = gdvp->gdv_view->gv_maxMouseDelta; - inv_width = 1.0 / gdvp->gdv_dmp->dm_width; + inv_width = 1.0 / (fastf_t)gdvp->gdv_dmp->dm_width; dx *= inv_width * gdvp->gdv_view->gv_size * gedp->ged_wdbp->dbip->dbi_local2base; dy *= inv_width * gdvp->gdv_view->gv_size * gedp->ged_wdbp->dbip->dbi_local2base; @@ -2795,6 +2843,307 @@ } static int +go_mouse_orotate(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; + point_t model; + point_t view; + mat_t inv_rot; + struct bu_vls rot_x_vls; + struct bu_vls rot_y_vls; + struct bu_vls rot_z_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 != 5) { + 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[3], "%lf", &x) != 1 || + sscanf(argv[4], "%lf", &y) != 1) { + bu_vls_printf(&gedp->ged_result_str, "Usage: %s %s", argv[0], usage); + return BRLCAD_ERROR; + } + + dx = y - gdvp->gdv_view->gv_prevMouseY; + dy = x - gdvp->gdv_view->gv_prevMouseX; + + 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; + + dx *= gdvp->gdv_view->gv_rscale; + dy *= gdvp->gdv_view->gv_rscale; + + VSET(view, dx, dy, 0.0); + bn_mat_inv(inv_rot, gdvp->gdv_view->gv_rotation); + MAT4X3PNT(model, inv_rot, view); + + bu_vls_init(&rot_x_vls); + bu_vls_init(&rot_y_vls); + bu_vls_init(&rot_z_vls); + bu_vls_printf(&rot_x_vls, "%lf", model[X]); + bu_vls_printf(&rot_y_vls, "%lf", model[Y]); + bu_vls_printf(&rot_z_vls, "%lf", model[Z]); + + gedp->ged_gvp = gdvp->gdv_view; + av[0] = "orotate"; + av[1] = (char *)argv[2]; + av[2] = bu_vls_addr(&rot_x_vls); + av[3] = bu_vls_addr(&rot_y_vls); + av[4] = bu_vls_addr(&rot_z_vls); + av[5] = (char *)0; + + ret = ged_orotate(gedp, 5, (const char **)av); + bu_vls_free(&rot_x_vls); + bu_vls_free(&rot_y_vls); + bu_vls_free(&rot_z_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_oscale(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 != 5) { + 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[3], "%lf", &x) != 1 || + sscanf(argv[4], "%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] = "oscale"; + av[1] = (char *)argv[2]; + av[2] = bu_vls_addr(&sf_vls); + av[3] = (char *)0; + + ret = ged_oscale(gedp, 3, (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_otranslate(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 inv_width; + point_t model; + point_t view; + mat_t inv_rot; + struct bu_vls tran_x_vls; + struct bu_vls tran_y_vls; + struct bu_vls tran_z_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 != 5) { + 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[3], "%lf", &x) != 1 || + sscanf(argv[4], "%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_size; + dy *= inv_width * gdvp->gdv_view->gv_size; + VSET(view, dx, dy, 0.0); + bn_mat_inv(inv_rot, gdvp->gdv_view->gv_rotation); + MAT4X3PNT(model, inv_rot, view); + + bu_vls_init(&tran_x_vls); + bu_vls_init(&tran_y_vls); + bu_vls_init(&tran_z_vls); + bu_vls_printf(&tran_x_vls, "%lf", model[X]); + bu_vls_printf(&tran_y_vls, "%lf", model[Y]); + bu_vls_printf(&tran_z_vls, "%lf", model[Z]); + + gedp->ged_gvp = gdvp->gdv_view; + av[0] = "otranslate"; + av[1] = (char *)argv[2]; + av[2] = bu_vls_addr(&tran_x_vls); + av[3] = bu_vls_addr(&tran_y_vls); + av[4] = bu_vls_addr(&tran_z_vls); + av[5] = (char *)0; + + ret = ged_otranslate(gedp, 5, (const char **)av); + bu_vls_free(&tran_x_vls); + bu_vls_free(&tran_y_vls); + bu_vls_free(&tran_z_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_ray(struct ged *gedp, int argc, const char *argv[], @@ -2846,7 +3195,7 @@ return BRLCAD_ERROR; } - inv_width = 1.0 / gdvp->gdv_dmp->dm_width; + inv_width = 1.0 / (fastf_t)gdvp->gdv_dmp->dm_width; x *= inv_width * 2.0 - 1.0; y *= inv_width * -2.0 + 1.0; VSET(view, x, y, -1.0); @@ -3024,7 +3373,7 @@ else if (gdvp->gdv_view->gv_maxMouseDelta < dy) dy = gdvp->gdv_view->gv_maxMouseDelta; - inv_width = 1.0 / gdvp->gdv_dmp->dm_width; + 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; @@ -3114,7 +3463,7 @@ else if (gdvp->gdv_view->gv_maxMouseDelta < dy) dy = gdvp->gdv_view->gv_maxMouseDelta; - inv_width = 1.0 / gdvp->gdv_dmp->dm_width; + inv_width = 1.0 / (fastf_t)gdvp->gdv_dmp->dm_width; dx *= inv_width * gdvp->gdv_view->gv_size * gedp->ged_wdbp->dbip->dbi_local2base; dy *= inv_width * gdvp->gdv_view->gv_size * gedp->ged_wdbp->dbip->dbi_local2base; @@ -3337,6 +3686,180 @@ } static int +go_orotate_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 != 5) { + 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[3], "%lf", &x) != 1 || + sscanf(argv[4], "%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_OROTATE_MODE; + + bu_vls_init(&bindings); + bu_vls_printf(&bindings, "bind %V <Motion> {%V mouse_orotate %V %s %%x %%y}", + &gdvp->gdv_dmp->dm_pathName, + &go_current_gop->go_name, + &gdvp->gdv_name, + argv[2]); + Tcl_Eval(go_current_gop->go_interp, bu_vls_addr(&bindings)); + bu_vls_free(&bindings); + + return BRLCAD_OK; +} + +static int +go_oscale_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 != 5) { + 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[3], "%lf", &x) != 1 || + sscanf(argv[4], "%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_OSCALE_MODE; + + bu_vls_init(&bindings); + bu_vls_printf(&bindings, "bind %V <Motion> {%V mouse_oscale %V %s %%x %%y}", + &gdvp->gdv_dmp->dm_pathName, + &go_current_gop->go_name, + &gdvp->gdv_name, + argv[2]); + Tcl_Eval(go_current_gop->go_interp, bu_vls_addr(&bindings)); + bu_vls_free(&bindings); + + return BRLCAD_OK; +} + +static int +go_otranslate_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 != 5) { + 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[3], "%lf", &x) != 1 || + sscanf(argv[4], "%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_OTRANSLATE_MODE; + + bu_vls_init(&bindings); + bu_vls_printf(&bindings, "bind %V <Motion> {%V mouse_otranslate %V %s %%x %%y}", + &gdvp->gdv_dmp->dm_pathName, + &go_current_gop->go_name, + &gdvp->gdv_name, + argv[2]); + Tcl_Eval(go_current_gop->go_interp, bu_vls_addr(&bindings)); + bu_vls_free(&bindings); + + return BRLCAD_OK; +} + +static int go_paint_rect_area(struct ged *gedp, int argc, const char *argv[], Modified: brlcad/trunk/src/tclscripts/archer/Archer.tcl =================================================================== --- brlcad/trunk/src/tclscripts/archer/Archer.tcl 2008-12-02 16:38:21 UTC (rev 33269) +++ brlcad/trunk/src/tclscripts/archer/Archer.tcl 2008-12-03 21:00:43 UTC (rev 33270) @@ -3797,8 +3797,8 @@ updateUtilityMenu } -# updateWizardMenu -# updateViewToolbarForEdit + updateWizardMenu + updateViewToolbarForEdit if {$mTarget != "" && $mBindingMode == 0} { @@ -3914,8 +3914,8 @@ updateUtilityMenu } -# updateWizardMenu -# updateViewToolbarForEdit + updateWizardMenu + updateViewToolbarForEdit if {$mTarget != "" && $mBindingMode == 0} { @@ -4658,16 +4658,10 @@ return } - # These values are insignificant (i.e. they will be ignored by the callback) - set x 0 - set y 0 - set z 0 - foreach dname {ul ur ll lr} { - set dm [$itk_component(mged) component $dname] - set win [$dm component dm] - bind $win <1> "$dm orotate_mode %x %y [list [::itcl::code $this handleObjRotate]] $obj $x $y $z; break" - bind $win <ButtonRelease-1> "[::itcl::code $this endObjRotate $dm $obj]; break" + set win [$itk_component(mged) component $dname] + bind $win <1> "$itk_component(mged) pane_orotate_mode $dname $obj %x %y; break" + bind $win <ButtonRelease-1> "[::itcl::code $this endObjRotate $dname $obj]; break" } } @@ -4684,16 +4678,10 @@ return } - # These values are insignificant (i.e. they will be ignored by the callback) - set x 0 - set y 0 - set z 0 - foreach dname {ul ur ll lr} { - set dm [$itk_component(mged) component $dname] - set win [$dm component dm] - bind $win <1> "$dm oscale_mode %x %y [list [::itcl::code $this handleObjScale]] $obj $x $y $z; break" - bind $win <ButtonRelease-1> "[::itcl::code $this endObjScale $dm $obj]; break" + set win [$itk_component(mged) component $dname] + bind $win <1> "$itk_component(mged) pane_oscale_mode $dname $obj %x %y; break" + bind $win <ButtonRelease-1> "[::itcl::code $this endObjScale $dname $obj]; break" } } @@ -4711,10 +4699,9 @@ } foreach dname {ul ur ll lr} { - set dm [$itk_component(mged) component $dname] - set win [$dm component dm] - bind $win <1> "$dm otranslate_mode %x %y [list [::itcl::code $this handleObjTranslate]] $obj; break" - bind $win <ButtonRelease-1> "[::itcl::code $this endObjTranslate $dm $obj]; break" + set win [$itk_component(mged) component $dname] + bind $win <1> "$itk_component(mged) pane_otranslate_mode $dname $obj %x %y; break" + bind $win <ButtonRelease-1> "[::itcl::code $this endObjTranslate $dname $obj]; break" } } @@ -4732,45 +4719,64 @@ } foreach dname {ul ur ll lr} { - set dm [$itk_component(mged) component $dname] - set win [$dm component dm] + set win [$itk_component(mged) component $dname] bind $win <1> "[::itcl::code $this handleObjCenter $obj %x %y]; break" - bind $win <ButtonRelease-1> "[::itcl::code $this endObjCenter $dm $obj]; break" + bind $win <ButtonRelease-1> "[::itcl::code $this endObjCenter $dname $obj]; break" } } -::itcl::body Archer::endObjCenter {dsp obj} { - $dsp idle_mode - +::itcl::body Archer::endObjCenter {dname obj} { if {![info exists itk_component(mged)]} { return } + $itk_component(mged) pane_idle_mode $dname + set mNeedSave 1 + updateSaveMode + set center [$itk_component(mged) ocenter $obj] addHistory "ocenter $center" } -::itcl::body Archer::endObjRotate {dsp obj} { - $dsp idle_mode +::itcl::body Archer::endObjRotate {dname obj} { + if {![info exists itk_component(mged)]} { + return + } + $itk_component(mged) pane_idle_mode $dname + set mNeedSave 1 + updateSaveMode + #XXX Need code to track overall transformation if {[info exists itk_component(mged)]} { #addHistory "orotate obj rx ry rz" } } -::itcl::body Archer::endObjScale {dsp obj} { - $dsp idle_mode +::itcl::body Archer::endObjScale {dname obj} { + if {![info exists itk_component(mged)]} { + return + } + $itk_component(mged) pane_idle_mode $dname + set mNeedSave 1 + updateSaveMode + #XXX Need code to track overall transformation if {[info exists itk_component(mged)]} { #addHistory "oscale obj sf" } } -::itcl::body Archer::endObjTranslate {dsp obj} { - $dsp idle_mode +::itcl::body Archer::endObjTranslate {dname obj} { + if {![info exists itk_component(mged)]} { + return + } + $itk_component(mged) pane_idle_mode $dname + set mNeedSave 1 + updateSaveMode + #XXX Need code to track overall transformation if {[info exists itk_component(mged)]} { #addHistory "otranslate obj dx dy dz" @@ -4787,18 +4793,18 @@ } set ocenter [vscale $ocenter [dbCmd local2base]] - set ovcenter [eval dbCmd m2vPoint $ocenter] + set ovcenter [eval dbCmd m2v_point $ocenter] # This is the updated view center (i.e. we keep the original view Z) set vcenter [dbCmd screen2view $x $y] set vcenter [list [lindex $vcenter 0] [lindex $vcenter 1] [lindex $ovcenter 2]] - set ocenter [vscale [eval dbCmd v2mPoint $vcenter] [dbCmd base2local]] + set ocenter [vscale [eval dbCmd v2m_point $vcenter] [dbCmd base2local]] if {[info exists itk_component(mged)]} { - eval archerWrapper ocenter 0 0 1 0 $obj $ocenter + eval archerWrapper ocenter 0 0 0 0 $obj $ocenter } else { - eval archerWrapper ocenter 0 0 1 0 $obj $ocenter + eval archerWrapper ocenter 0 0 0 0 $obj $ocenter cd $savePwd } Modified: brlcad/trunk/src/tclscripts/lib/Ged.tcl =================================================================== --- brlcad/trunk/src/tclscripts/lib/Ged.tcl 2008-12-02 16:38:21 UTC (rev 33269) +++ brlcad/trunk/src/tclscripts/lib/Ged.tcl 2008-12-03 21:00:43 UTC (rev 33270) @@ -219,6 +219,9 @@ method more_args_callback {args} method mouse_constrain_rot {args} method mouse_constrain_trans {args} + method mouse_orotate {args} + method mouse_oscale {args} + method mouse_otranslate {args} method mouse_rot {args} method mouse_scale {args} method mouse_trans {args} @@ -233,8 +236,11 @@ method open {args} method orient {args} method orotate {args} + method orotate_mode {args} method oscale {args} + method oscale_mode {args} method otranslate {args} + method otranslate_mode {args} method overlay {args} method paint_rect_area {args} method pane_adc {_pane args} @@ -260,11 +266,17 @@ method pane_model2view {_pane args} method pane_mouse_constrain_rot {_pane args} method pane_mouse_constrain_trans {_pane args} + method pane_mouse_orotate {_pane args} + method pane_mouse_oscale {_pane args} + method pane_mouse_otranslate {_pane args} method pane_mouse_rot {_pane args} method pane_mouse_scale {_pane args} method pane_mouse_trans {_pane args} method pane_nirt {_pane args} method pane_orient {_pane args} + method pane_orotate_mode {_pane args} + method pane_oscale_mode {_pane args} + method pane_otranslate_mode {_pane args} method pane_paint_rect_area {_pane args} method pane_perspective {_pane args} method pane_plot {_pane args} @@ -363,6 +375,7 @@ method saveview {args} method sca {args} method scale_mode {args} + method screen2view {args} method set_coord {args} method set_fb_mode {args} method set_output_script {args} @@ -1192,6 +1205,18 @@ eval $mGed mouse_constrain_trans $itk_component($itk_option(-pane)) $args } +::itcl::body cadwidgets::Ged::mouse_orotate {args} { + eval $mGed mouse_orotate $itk_component($itk_option(-pane)) $args +} + +::itcl::body cadwidgets::Ged::mouse_oscale {args} { + eval $mGed mouse_oscale $itk_component($itk_option(-pane)) $args +} + +::itcl::body cadwidgets::Ged::mouse_otranslate {args} { + eval $mGed mouse_otranslate $itk_component($itk_option(-pane)) $args +} + ::itcl::body cadwidgets::Ged::mouse_rot {args} { eval $mGed mouse_rot $itk_component($itk_option(-pane)) $args } @@ -1248,14 +1273,26 @@ eval $mGed orotate $args } +::itcl::body cadwidgets::Ged::orotate_mode {args} { + eval $mGed orotate_mode $itk_component($itk_option(-pane)) $args +} + ::itcl::body cadwidgets::Ged::oscale {args} { eval $mGed oscale $args } +::itcl::body cadwidgets::Ged::oscale_mode {args} { + eval $mGed oscale_mode $itk_component($itk_option(-pane)) $args +} + ::itcl::body cadwidgets::Ged::otranslate {args} { eval $mGed otranslate $args } +::itcl::body cadwidgets::Ged::otranslate_mode {args} { + eval $mGed otranslate_mode $itk_component($itk_option(-pane)) $args +} + ::itcl::body cadwidgets::Ged::overlay {args} { eval $mGed overlay $args } @@ -1356,12 +1393,24 @@ eval $mGed mouse_constrain_trans $itk_component($_pane) $args } +::itcl::body cadwidgets::Ged::pane_mouse_orotate {_pane args} { + eval $mGed mouse_orotate $itk_component($_pane) $args +} + +::itcl::body cadwidgets::Ged::pane_mouse_oscale {_pane args} { + eval $mGed mouse_oscale $itk_component($_pane) $args +} + +::itcl::body cadwidgets::Ged::pane_mouse_otranslate {_pane args} { + eval $mGed mouse_otranslate $itk_component($_pane) $args +} + ::itcl::body cadwidgets::Ged::pane_mouse_rot {_pane args} { - eval $mGed mouse_rot $itk_component($_pane) $args + eval $mGed mouse_rot $itk_component($_pane) $args } ::itcl::body cadwidgets::Ged::pane_mouse_scale {_pane args} { - eval $mGed mouse_scale $itk_component($_pane) $args + eval $mGed mouse_scale $itk_component($_pane) $args } ::itcl::body cadwidgets::Ged::pane_mouse_trans {_pane args} { @@ -1376,6 +1425,18 @@ eval $mGed orient $itk_component($_pane) $args } +::itcl::body cadwidgets::Ged::pane_orotate_mode {_pane args} { + eval $mGed orotate_mode $itk_component($_pane) $args +} + +::itcl::body cadwidgets::Ged::pane_oscale_mode {_pane args} { + eval $mGed oscale_mode $itk_component($_pane) $args +} + +::itcl::body cadwidgets::Ged::pane_otranslate_mode {_pane args} { + eval $mGed otranslate_mode $itk_component($_pane) $args +} + ::itcl::body cadwidgets::Ged::pane_paint_rect_area {_pane args} { eval $mGed paint_rect_area $itk_component($_pane) $args } @@ -1787,6 +1848,10 @@ eval $mGed sca $itk_component($itk_option(-pane)) $args } +::itcl::body cadwidgets::Ged::screen2view {args} { + eval $mGed screen2view $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. ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ BRL-CAD Source Commits mailing list brlcad-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/brlcad-commits