[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16094] branches/soc-2008-nicholasbishop/ source/blender: Added back the choice between simple subdiv vs.

Nicholas Bishop nicholasbishop at gmail.com
Thu Aug 14 02:42:54 CEST 2008


Revision: 16094
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16094
Author:   nicholasbishop
Date:     2008-08-14 02:42:54 +0200 (Thu, 14 Aug 2008)

Log Message:
-----------
Added back the choice between simple subdiv vs. catmull clark for multires.

Modified Paths:
--------------
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
    branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
    branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c
    branches/soc-2008-nicholasbishop/source/blender/makesdna/DNA_modifier_types.h
    branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-08-14 00:05:39 UTC (rev 16093)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/BKE_multires.h	2008-08-14 00:42:54 UTC (rev 16094)
@@ -135,7 +135,7 @@
 
 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);
 

Modified: branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-08-14 00:05:39 UTC (rev 16093)
+++ branches/soc-2008-nicholasbishop/source/blender/blenkernel/intern/multires.c	2008-08-14 00:42:54 UTC (rev 16094)
@@ -1181,7 +1181,7 @@
 
 				/* 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 @@
 	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 @@
 		}
 	}
 
-	/*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 @@
 	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 @@
 		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 @@
 			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);

Modified: branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c	2008-08-14 00:05:39 UTC (rev 16093)
+++ branches/soc-2008-nicholasbishop/source/blender/blenloader/intern/readfile.c	2008-08-14 00:42:54 UTC (rev 16094)
@@ -7793,7 +7793,7 @@
 					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);

Modified: branches/soc-2008-nicholasbishop/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/makesdna/DNA_modifier_types.h	2008-08-14 00:05:39 UTC (rev 16093)
+++ branches/soc-2008-nicholasbishop/source/blender/makesdna/DNA_modifier_types.h	2008-08-14 00:42:54 UTC (rev 16094)
@@ -495,7 +495,8 @@
 	ModifierData modifier;
 
 	char lvl, totlvl;
-	char pad[6];
+	char simple;
+	char pad[5];
 } MultiresModifierData;
 
 #endif

Modified: branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c
===================================================================
--- branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c	2008-08-14 00:05:39 UTC (rev 16093)
+++ branches/soc-2008-nicholasbishop/source/blender/src/buttons_editing.c	2008-08-14 00:42:54 UTC (rev 16094)
@@ -1658,7 +1658,7 @@
 	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 @@
 			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);





More information about the Bf-blender-cvs mailing list