diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2008-08-14 04:42:54 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2008-08-14 04:42:54 +0400 |
commit | e3381f2203b09152108bf1075d4e7747c8e3ed8f (patch) | |
tree | 1c40376e699ce69c4066d89098f10035fdea105d | |
parent | c10cfc94bf31d6991cd578d846aa52212c3a8a40 (diff) |
Added back the choice between simple subdiv vs. catmull clark for multires.
-rw-r--r-- | source/blender/blenkernel/BKE_multires.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires.c | 18 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_modifier_types.h | 3 | ||||
-rw-r--r-- | source/blender/src/buttons_editing.c | 5 |
5 files changed, 16 insertions, 14 deletions
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index d00014a03f2..46ba254a012 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -135,7 +135,7 @@ struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData* int multiresModifier_switch_level(struct Object *ob, const int); void multiresModifier_join(struct Object *ob); -void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock); +void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int updateblock, int simple); void multiresModifier_setLevel(void *mmd_v, void *ob_v); int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src); diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c index b9f47114f6a..f62cff8fc0d 100644 --- a/source/blender/blenkernel/intern/multires.c +++ b/source/blender/blenkernel/intern/multires.c @@ -1181,7 +1181,7 @@ void multiresModifier_join(Object *ob) /* TODO: subdivision should be doable in one step rather than iteratively. */ for(i = mmd->totlvl; i < highest_lvl; ++i) - multiresModifier_subdivide(mmd, base->object, 0); + multiresModifier_subdivide(mmd, base->object, 0, 0); } } base = base->next; @@ -1245,13 +1245,16 @@ static void calc_face_ts_partial(float center[3], float target[3], float norm[][ VecCopyf(target, orco[f->v1]); } -DerivedMesh *multires_subdisp_pre(DerivedMesh *mrdm, int distance) +DerivedMesh *multires_subdisp_pre(DerivedMesh *mrdm, int distance, int simple) { DerivedMesh *final; SubsurfModifierData smd; memset(&smd, 0, sizeof(SubsurfModifierData)); smd.levels = distance; + if(simple) + smd.subdivType = ME_SIMPLE_SUBSURF; + final = subsurf_make_derived_from_derived_with_multires(mrdm, &smd, NULL, 0, NULL, 0, 0); return final; @@ -1454,11 +1457,6 @@ static void multires_subdisp(DerivedMesh *orig, Mesh *me, DerivedMesh *final, in } } - /*if(addverts) { - for(i = 0; i < totvert; ++i) - VecAddf(mvd[i].co, mvd[i].co, addverts[i].co); - }*/ - final->needsFree = 1; final->release(final); mrdm->needsFree = 1; @@ -1466,7 +1464,7 @@ static void multires_subdisp(DerivedMesh *orig, Mesh *me, DerivedMesh *final, in mrdm->release(mrdm); } -void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock) +void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple) { DerivedMesh *final = NULL; int totsubvert, totsubface, totsubedge; @@ -1501,7 +1499,7 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updat orig->needsFree = 1; orig->release(orig); - final = multires_subdisp_pre(mrdm, 1); + final = multires_subdisp_pre(mrdm, 1, simple); mrdm->needsFree = 1; mrdm->release(mrdm); } @@ -1903,7 +1901,7 @@ static void multiresModifier_update(DerivedMesh *dm) for(i = 0; i < dm->getNumVerts(dm); ++i) VecSubf(verts_new[i].co, verts_new[i].co, cur_lvl_orig_verts[i].co); - final = multires_subdisp_pre(dm, totlvl - lvl); + final = multires_subdisp_pre(dm, totlvl - lvl, 0); multires_subdisp(orig, me, final, lvl, totlvl, dm->getNumVerts(dm), dm->getNumEdges(dm), dm->getNumFaces(dm), 1); diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 6eabf18fe74..62b15e51b35 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -7793,7 +7793,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main) BLI_insertlinkbefore(&ob->modifiers, md, mmd); for(i = 1; i < me->mr->level_count; ++i) - multiresModifier_subdivide(mmd, ob, 1); + multiresModifier_subdivide(mmd, ob, 1, 0); mmd->lvl = mmd->totlvl; orig = CDDM_from_mesh(me, NULL); diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h index c67187ad410..ff202c5820f 100644 --- a/source/blender/makesdna/DNA_modifier_types.h +++ b/source/blender/makesdna/DNA_modifier_types.h @@ -495,7 +495,8 @@ typedef struct MultiresModifierData { ModifierData modifier; char lvl, totlvl; - char pad[6]; + char simple; + char pad[5]; } MultiresModifierData; #endif diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c index 3cee42e97a9..7e757d4031b 100644 --- a/source/blender/src/buttons_editing.c +++ b/source/blender/src/buttons_editing.c @@ -1658,7 +1658,7 @@ static void multiresModifier_subdivide_button(void *mmd_v, void *ob_v) MultiresModifierData *mmd = mmd_v; if(mmd && ob_v) { - multiresModifier_subdivide(mmd, ob_v, 0); + multiresModifier_subdivide(mmd, ob_v, 0, mmd->simple); BIF_undo_push("Multires subdivide"); } } @@ -2477,10 +2477,13 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco uiBlockEndAlign(block); } else if (md->type==eModifierType_Multires) { MultiresModifierData *mmd = (MultiresModifierData*) md; + char subsurfmenu[]= "Subsurf Type%t|Catmull-Clark%x0|Simple Subdiv.%x1"; uiBut *but; but = uiDefBut(block,BUT,B_MODIFIER_RECALC,"Subdivide", lx,(cy-=19),buttonWidth,19,0,0,0,0,0,"Increase the resolution of displacements"); uiButSetFunc(but, multiresModifier_subdivide_button, mmd, ob); + + uiDefButC(block, MENU, B_NOP, subsurfmenu, lx, (cy-=19), buttonWidth, 19, &mmd->simple, 0, 0, 0, 0, "Selects type of subdivision algorithm."); but = uiDefButC(block,NUM,B_MODIFIER_RECALC,"Level: ",lx,(cy-=19),buttonWidth,19, &mmd->lvl, 1.0, mmd->totlvl, 0,0,""); uiButSetFunc(but, multiresModifier_setLevel, mmd, ob); |