From 427cd9f93f61270bfdf172e9dfffe9e2a6b3b7be Mon Sep 17 00:00:00 2001 From: Clifford Yapp <238416+starseeker@users.noreply.github.com> Date: Fri, 7 Feb 2025 15:40:41 -0500 Subject: [PATCH] Adjust edit_xy methods, add sedit equiv. call Ah, OK. The edit_xy routines merely set the stage for the full-on processing edit call. Initial breakout was slightly off the mark in that it was having the edit_xy calls try to do everything in certain cases and not calling the main routine from sedit_mouse, which is why most things weren't updating properly. Will need another pass to make sure all the equivalents are in place as compared to the big case table, but with this change setting the A parameter in cone.s in moss.g example is behaving much better. --- src/librt/primitives/arb8/edarb.c | 2 -- src/librt/primitives/ars/edars.c | 2 -- src/librt/primitives/bot/edbot.c | 2 -- src/librt/primitives/bspline/edbspline.c | 2 -- src/librt/primitives/cline/edcline.c | 2 -- src/librt/primitives/dsp/eddsp.c | 2 -- src/librt/primitives/ebm/edebm.c | 2 -- src/librt/primitives/extrude/edextrude.c | 2 -- src/librt/primitives/metaball/edmetaball.c | 2 -- src/librt/primitives/nmg/ednmg.c | 2 -- src/librt/primitives/pipe/edpipe.c | 2 -- src/librt/primitives/tgc/edtgc.c | 30 ++++++++++++++-------- src/librt/primitives/vol/edvol.c | 2 -- src/mged/edsol.c | 8 +++++- 14 files changed, 27 insertions(+), 35 deletions(-) diff --git a/src/librt/primitives/arb8/edarb.c b/src/librt/primitives/arb8/edarb.c index 96095f2060..ce96da35ea 100644 --- a/src/librt/primitives/arb8/edarb.c +++ b/src/librt/primitives/arb8/edarb.c @@ -1329,7 +1329,6 @@ rt_solid_edit_arb_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_arb_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -1352,7 +1351,6 @@ rt_solid_edit_arb_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_arb_edit(s); return 0; } diff --git a/src/librt/primitives/ars/edars.c b/src/librt/primitives/ars/edars.c index 56bbfb1841..0e67e10c61 100644 --- a/src/librt/primitives/ars/edars.c +++ b/src/librt/primitives/ars/edars.c @@ -923,7 +923,6 @@ rt_solid_edit_ars_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_ars_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -948,7 +947,6 @@ rt_solid_edit_ars_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_ars_edit(s); return 0; } diff --git a/src/librt/primitives/bot/edbot.c b/src/librt/primitives/bot/edbot.c index 0b28d5e030..ac5de1e2a4 100644 --- a/src/librt/primitives/bot/edbot.c +++ b/src/librt/primitives/bot/edbot.c @@ -779,7 +779,6 @@ rt_solid_edit_bot_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_bot_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -814,7 +813,6 @@ rt_solid_edit_bot_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_bot_edit(s); return 0; } diff --git a/src/librt/primitives/bspline/edbspline.c b/src/librt/primitives/bspline/edbspline.c index 88f993fe44..459efabbe1 100644 --- a/src/librt/primitives/bspline/edbspline.c +++ b/src/librt/primitives/bspline/edbspline.c @@ -391,7 +391,6 @@ rt_solid_edit_bspline_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_bspline_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -421,7 +420,6 @@ rt_solid_edit_bspline_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_bspline_edit(s); return 0; } diff --git a/src/librt/primitives/cline/edcline.c b/src/librt/primitives/cline/edcline.c index 7096f92389..347ec8e1a3 100644 --- a/src/librt/primitives/cline/edcline.c +++ b/src/librt/primitives/cline/edcline.c @@ -330,7 +330,6 @@ rt_solid_edit_cline_edit_xy( case ECMD_CLINE_SCALE_T: case ECMD_CLINE_SCALE_R: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_cline_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -347,7 +346,6 @@ rt_solid_edit_cline_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_cline_edit(s); return 0; } diff --git a/src/librt/primitives/dsp/eddsp.c b/src/librt/primitives/dsp/eddsp.c index 01e4fa776b..06a40d13f3 100644 --- a/src/librt/primitives/dsp/eddsp.c +++ b/src/librt/primitives/dsp/eddsp.c @@ -279,7 +279,6 @@ rt_solid_edit_dsp_edit_xy( case ECMD_DSP_SCALE_Y: case ECMD_DSP_SCALE_ALT: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_dsp_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -293,7 +292,6 @@ rt_solid_edit_dsp_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_dsp_edit(s); return 0; } diff --git a/src/librt/primitives/ebm/edebm.c b/src/librt/primitives/ebm/edebm.c index e2bbc2a0b8..ea73233dd8 100644 --- a/src/librt/primitives/ebm/edebm.c +++ b/src/librt/primitives/ebm/edebm.c @@ -265,7 +265,6 @@ rt_solid_edit_ebm_edit_xy( case RT_SOLID_EDIT_PSCALE: case ECMD_EBM_HEIGHT: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_ebm_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -279,7 +278,6 @@ rt_solid_edit_ebm_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_ebm_edit(s); return 0; } diff --git a/src/librt/primitives/extrude/edextrude.c b/src/librt/primitives/extrude/edextrude.c index 818fb931b7..4985640c2b 100644 --- a/src/librt/primitives/extrude/edextrude.c +++ b/src/librt/primitives/extrude/edextrude.c @@ -364,7 +364,6 @@ rt_solid_edit_extrude_edit_xy( case RT_SOLID_EDIT_PSCALE: case ECMD_EXTR_SCALE_H: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_extrude_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -381,7 +380,6 @@ rt_solid_edit_extrude_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_extrude_edit(s); return 0; } diff --git a/src/librt/primitives/metaball/edmetaball.c b/src/librt/primitives/metaball/edmetaball.c index 29837ab8f5..20502fc17c 100644 --- a/src/librt/primitives/metaball/edmetaball.c +++ b/src/librt/primitives/metaball/edmetaball.c @@ -534,7 +534,6 @@ rt_solid_edit_metaball_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_metaball_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -558,7 +557,6 @@ rt_solid_edit_metaball_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_metaball_edit(s); return 0; } diff --git a/src/librt/primitives/nmg/ednmg.c b/src/librt/primitives/nmg/ednmg.c index 6e43dd6af1..902d17c659 100644 --- a/src/librt/primitives/nmg/ednmg.c +++ b/src/librt/primitives/nmg/ednmg.c @@ -1021,7 +1021,6 @@ rt_solid_edit_nmg_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_nmg_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -1049,7 +1048,6 @@ rt_solid_edit_nmg_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_nmg_edit(s); return 0; } diff --git a/src/librt/primitives/pipe/edpipe.c b/src/librt/primitives/pipe/edpipe.c index be0ce38cb5..b113b40a7b 100644 --- a/src/librt/primitives/pipe/edpipe.c +++ b/src/librt/primitives/pipe/edpipe.c @@ -1224,7 +1224,6 @@ rt_solid_edit_pipe_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_pipe_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -1250,7 +1249,6 @@ rt_solid_edit_pipe_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_pipe_edit(s); return 0; } diff --git a/src/librt/primitives/tgc/edtgc.c b/src/librt/primitives/tgc/edtgc.c index 0ad7425e23..fbbadf7d59 100644 --- a/src/librt/primitives/tgc/edtgc.c +++ b/src/librt/primitives/tgc/edtgc.c @@ -816,10 +816,13 @@ rt_solid_edit_tgc_pscale(struct rt_solid_edit *s) int rt_solid_edit_tgc_edit(struct rt_solid_edit *s) { + int ret = 0; + switch (s->edit_flag) { case RT_SOLID_EDIT_SCALE: /* scale the solid uniformly about its vertex point */ - return rt_solid_edit_generic_sscale(s, &s->es_int); + ret = rt_solid_edit_generic_sscale(s, &s->es_int); + break; case RT_SOLID_EDIT_TRANS: /* translate solid */ rt_solid_edit_generic_strans(s, &s->es_int); @@ -829,18 +832,28 @@ rt_solid_edit_tgc_edit(struct rt_solid_edit *s) rt_solid_edit_generic_srot(s, &s->es_int); break; case ECMD_TGC_MV_H: - return ecmd_tgc_mv_h(s); + ret = ecmd_tgc_mv_h(s); + break; case ECMD_TGC_MV_HH: - return ecmd_tgc_mv_hh(s); + ret = ecmd_tgc_mv_hh(s); + break; case ECMD_TGC_ROT_H: - return ecmd_tgc_rot_h(s); + ret = ecmd_tgc_rot_h(s); + break; case ECMD_TGC_ROT_AB: - return ecmd_tgc_rot_ab(s); + ret = ecmd_tgc_rot_ab(s); + break; default: - return rt_solid_edit_tgc_pscale(s); + ret = rt_solid_edit_tgc_pscale(s); } - return 0; + bu_clbk_t f = NULL; + void *d = NULL; + rt_solid_edit_map_clbk_get(&f, &d, s->m, ECMD_REPLOT_EDITING_SOLID, BU_CLBK_DURING); + if (f) + (*f)(0, NULL, d, NULL); + + return ret; } int @@ -858,7 +871,6 @@ rt_solid_edit_tgc_edit_xy( case RT_SOLID_EDIT_SCALE: case RT_SOLID_EDIT_PSCALE: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_tgc_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -879,12 +891,10 @@ rt_solid_edit_tgc_edit_xy( default: // Everything else should be a scale rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_tgc_edit(s); return 0; } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_tgc_edit(s); return 0; } diff --git a/src/librt/primitives/vol/edvol.c b/src/librt/primitives/vol/edvol.c index b2c0b0e094..488f5e2ce9 100644 --- a/src/librt/primitives/vol/edvol.c +++ b/src/librt/primitives/vol/edvol.c @@ -366,7 +366,6 @@ rt_solid_edit_vol_edit_xy( case ECMD_VOL_THRESH_LO: case ECMD_VOL_THRESH_HI: rt_solid_edit_generic_sscale_xy(s, mousevec); - rt_solid_edit_vol_edit(s); return 0; case RT_SOLID_EDIT_TRANS: rt_solid_edit_generic_strans_xy(&pos_view, s, mousevec); @@ -380,7 +379,6 @@ rt_solid_edit_vol_edit_xy( } rt_update_edit_absolute_tran(s, pos_view); - rt_solid_edit_vol_edit(s); return 0; } diff --git a/src/mged/edsol.c b/src/mged/edsol.c index 5a7ba86eaf..51a14714f3 100644 --- a/src/mged/edsol.c +++ b/src/mged/edsol.c @@ -754,15 +754,21 @@ sedit_mouse(struct mged_state *s, const vect_t mousevec) if (s->s_edit->edit_flag <= 0) return; + int ret = 0; const struct rt_db_internal *ip = &s->s_edit->es_int; if (EDOBJ[ip->idb_type].ft_edit_xy) { bu_vls_trunc(s->s_edit->log_str, 0); - (*EDOBJ[ip->idb_type].ft_edit_xy)(s->s_edit, mousevec); + ret = (*EDOBJ[ip->idb_type].ft_edit_xy)(s->s_edit, mousevec); if (bu_vls_strlen(s->s_edit->log_str)) { Tcl_AppendResult(s->interp, bu_vls_cstr(s->s_edit->log_str), (char *)NULL); bu_vls_trunc(s->s_edit->log_str, 0); } } + + if (ret == BRLCAD_ERROR) + return; + + rt_solid_edit_process(s->s_edit); }