diff --git a/source/blender/include/reeb.h b/source/blender/include/reeb.h index 6baaaf1ca96..815afed6dfa 100644 --- a/source/blender/include/reeb.h +++ b/source/blender/include/reeb.h @@ -161,6 +161,9 @@ void verifyBuckets(ReebGraph *rg); void verifyFaces(ReebGraph *rg); /*********************** PUBLIC *********************************/ + +#define REEB_MAX_MULTI_LEVEL 10 + ReebGraph *BIF_ReebGraphFromEditMesh(void); ReebGraph *BIF_ReebGraphMultiFromEditMesh(void); void BIF_flagMultiArcs(ReebGraph *rg, int flag); diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c index c0f1a1f99b9..da3f98231a0 100644 --- a/source/blender/src/buttons_editing.c +++ b/source/blender/src/buttons_editing.c @@ -5050,7 +5050,7 @@ static void editing_panel_mesh_skgen_display(Object *ob, Mesh *me) uiDefButBitS(block, TOG, SKGEN_DISP_WEIGHT, REDRAWVIEW3D, "Weight", 1108, 40, 83,19, &G.scene->toolsettings->skgen_options, 0, 0, 0, 0, "Show Weight"); uiDefButBitS(block, TOG, SKGEN_DISP_ORIG, REDRAWVIEW3D, "Original", 1191, 40, 84,19, &G.scene->toolsettings->skgen_options, 0, 0, 0, 0, "Show Original Graph"); - uiDefButC(block, NUM, REDRAWVIEW3D, "Level:", 1025, 20, 125,19, &G.scene->toolsettings->skgen_multi_level, 0, 5, 1, 0,"Specify the level to draw"); + uiDefButC(block, NUM, REDRAWVIEW3D, "Level:", 1025, 20, 125,19, &G.scene->toolsettings->skgen_multi_level, 0, REEB_MAX_MULTI_LEVEL, 1, 0,"Specify the level to draw"); } static void editing_panel_mesh_skgen_retarget(Object *ob, Mesh *me) diff --git a/source/blender/src/reeb.c b/source/blender/src/reeb.c index b3fe465830a..0a3f81de8e6 100644 --- a/source/blender/src/reeb.c +++ b/source/blender/src/reeb.c @@ -3153,7 +3153,7 @@ ReebGraph *BIF_ReebGraphMultiFromEditMesh(void) EditMesh *em = G.editMesh; ReebGraph *rg = NULL; ReebGraph *rgi, *previous; - int i, nb_levels = 5; + int i, nb_levels = REEB_MAX_MULTI_LEVEL; if (em == NULL) return NULL; @@ -3205,6 +3205,19 @@ ReebGraph *BIF_ReebGraphMultiFromEditMesh(void) { float internal_threshold = rg->length * G.scene->toolsettings->skgen_threshold_internal * (i / (float)nb_levels); float external_threshold = rg->length * G.scene->toolsettings->skgen_threshold_external * (i / (float)nb_levels); + + /* filter internal progressively in second half only*/ + if (i > nb_levels / 2) + { + internal_threshold = rg->length * G.scene->toolsettings->skgen_threshold_internal; + } + else + { + internal_threshold = rg->length * G.scene->toolsettings->skgen_threshold_internal * (2 * i / (float)nb_levels); + } + + external_threshold = rg->length * G.scene->toolsettings->skgen_threshold_external * (i / (float)nb_levels); + filterGraph(rgi, G.scene->toolsettings->skgen_options, internal_threshold, external_threshold); }