[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24361] trunk/blender: 2.5 Modifiers: mesh deform, boolean and decimation work again.

Brecht Van Lommel brecht at blender.org
Thu Nov 5 19:05:55 CET 2009


Revision: 24361
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24361
Author:   blendix
Date:     2009-11-05 19:05:55 +0100 (Thu, 05 Nov 2009)

Log Message:
-----------
2.5 Modifiers: mesh deform, boolean and decimation work again.

Modified Paths:
--------------
    trunk/blender/intern/bsp/SConscript
    trunk/blender/intern/decimation/SConscript
    trunk/blender/source/blender/blenkernel/intern/booleanops.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/editors/armature/meshlaplacian.c
    trunk/blender/source/blender/editors/armature/meshlaplacian.h
    trunk/blender/source/blender/editors/include/ED_armature.h
    trunk/blender/source/blender/editors/object/object_modifier.c
    trunk/blender/source/blender/makesdna/DNA_modifier_types.h
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/creator/CMakeLists.txt

Modified: trunk/blender/intern/bsp/SConscript
===================================================================
--- trunk/blender/intern/bsp/SConscript	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/intern/bsp/SConscript	2009-11-05 18:05:55 UTC (rev 24361)
@@ -8,5 +8,5 @@
 if (env['OURPLATFORM'] == 'win32-mingw'):
     env.BlenderLib ('blender_BSP', sources, Split(incs), [], libtype='core', priority=26 )
 else:
-    env.BlenderLib ('blender_BSP', sources, Split(incs), [], libtype='core', priority=20 )
+    env.BlenderLib ('blender_BSP', sources, Split(incs), [], libtype='core', priority=200 )
 

Modified: trunk/blender/intern/decimation/SConscript
===================================================================
--- trunk/blender/intern/decimation/SConscript	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/intern/decimation/SConscript	2009-11-05 18:05:55 UTC (rev 24361)
@@ -5,4 +5,4 @@
 
 incs = '. ../moto/include ../container ../memutil'
 
-env.BlenderLib ('bf_decimation', sources, Split(incs) , [], libtype=['core'], priority = [10] )
+env.BlenderLib ('bf_decimation', sources, Split(incs) , [], libtype=['core'], priority = [200] )

Modified: trunk/blender/source/blender/blenkernel/intern/booleanops.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/booleanops.c	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/blenkernel/intern/booleanops.c	2009-11-05 18:05:55 UTC (rev 24361)
@@ -526,8 +526,8 @@
 			CSG_FreeVertexDescriptor(&vd_o);
 			CSG_FreeFaceDescriptor(&fd_o);
 		}
-//		else
-// XXX			error("Unknown internal error in boolean");
+		else
+			printf("Unknown internal error in boolean");
 
 		CSG_FreeBooleanOperation(bool_op);
 

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2009-11-05 18:05:55 UTC (rev 24361)
@@ -82,7 +82,7 @@
 #include "BKE_anim.h"
 #include "BKE_action.h"
 #include "BKE_bmesh.h"
-// XXX #include "BKE_booleanops.h"
+#include "BKE_booleanops.h"
 #include "BKE_cloth.h"
 #include "BKE_collision.h"
 #include "BKE_cdderivedmesh.h"
@@ -113,18 +113,12 @@
 #include "BKE_shrinkwrap.h"
 #include "BKE_simple_deform.h"
 
-//XXX #include "LOD_DependKludge.h"
 #include "LOD_decimation.h"
 
-// XXX
-static struct DerivedMesh *NewBooleanDerivedMesh() {return NULL;}
-
 #include "CCGSubSurf.h"
 
 #include "RE_shader_ext.h"
 
-//XXX #include "BIF_meshlaplacian.h"
-
 /* Utility */
 
 static int is_last_displist(Object *ob)
@@ -4138,11 +4132,11 @@
 		ModifierData *md, Object *ob, DerivedMesh *derivedData,
   int useRenderParams, int isFinalCalc)
 {
-	// DecimateModifierData *dmd = (DecimateModifierData*) md;
+	DecimateModifierData *dmd = (DecimateModifierData*) md;
 	DerivedMesh *dm = derivedData, *result = NULL;
 	MVert *mvert;
 	MFace *mface;
-	// LOD_Decimation_Info lod;
+	LOD_Decimation_Info lod;
 	int totvert, totface;
 	int a, numTris;
 
@@ -4164,8 +4158,6 @@
 		goto exit;
 	}
 
-	// XXX
-#if 0
 	lod.vertex_buffer= MEM_mallocN(3*sizeof(float)*totvert, "vertices");
 	lod.vertex_normal_buffer= MEM_mallocN(3*sizeof(float)*totvert, "normals");
 	lod.triangle_index_buffer= MEM_mallocN(3*sizeof(int)*numTris, "trias");
@@ -4250,10 +4242,6 @@
 	MEM_freeN(lod.vertex_buffer);
 	MEM_freeN(lod.vertex_normal_buffer);
 	MEM_freeN(lod.triangle_index_buffer);
-#else
-	modifier_setError(md, "Modifier not working yet in 2.5.");
-	goto exit;
-#endif
 
 exit:
 		return result;
@@ -6390,12 +6378,6 @@
 
 	dataMask |= (1 << CD_MDEFORMVERT);
 	
-	/* particles only need this if they are after a non deform modifier, and
-	* the modifier stack will only create them in that case. */
-// 	dataMask |= CD_MASK_ORIGSPACE;
-
-// 	dataMask |= CD_MASK_ORCO;
-	
 	return dataMask;
 }
 
@@ -7866,17 +7848,17 @@
       float (*vertexCos)[3], int numVerts)
 {
 	MeshDeformModifierData *mmd = (MeshDeformModifierData*) md;
-	Mesh *me= ob->data;
+	Mesh *me= (mmd->object)? mmd->object->data: NULL;
+	EditMesh *em = (me)? BKE_mesh_get_editmesh(me): NULL;
 	DerivedMesh *tmpdm, *cagedm;
 	MDeformVert *dvert = NULL;
 	MDeformWeight *dw;
-	EditMesh *em = BKE_mesh_get_editmesh(me);
 	MVert *cagemvert;
 	float imat[4][4], cagemat[4][4], iobmat[4][4], icagemat[3][3], cmat[4][4];
 	float weight, totweight, fac, co[3], *weights, (*dco)[3], (*bindcos)[3];
 	int a, b, totvert, totcagevert, defgrp_index;
 	
-	if(!mmd->object || (!mmd->bindcos && !mmd->needbind))
+	if(!mmd->object || (!mmd->bindcos && !mmd->bindfunc))
 		return;
 	
 	/* get cage derivedmesh */
@@ -7914,7 +7896,7 @@
 		/* progress bar redraw can make this recursive .. */
 		if(!recursive) {
 			recursive = 1;
-			//XXX harmonic_coordinates_bind(mmd, vertexCos, numVerts, cagemat);
+			mmd->bindfunc(md->scene, mmd, (float*)vertexCos, numVerts, cagemat);
 			recursive = 0;
 		}
 	}

Modified: trunk/blender/source/blender/editors/armature/meshlaplacian.c
===================================================================
--- trunk/blender/source/blender/editors/armature/meshlaplacian.c	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/editors/armature/meshlaplacian.c	2009-11-05 18:05:55 UTC (rev 24361)
@@ -69,7 +69,7 @@
 static void progress_bar() {}
 static void start_progress_bar() {}
 static void end_progress_bar() {}
-static void error() {}
+static void error(char *str) { printf("error: %s\n", str); }
 /* ************* XXX *************** */
 
 
@@ -1698,7 +1698,7 @@
 	nlDeleteContext(context);
 }
 
-void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float (*vertexcos)[3], int totvert, float cagemat[][4])
+void harmonic_coordinates_bind(Scene *scene, MeshDeformModifierData *mmd, float *vertexcos, int totvert, float cagemat[][4])
 {
 	MeshDeformBind mdb;
 	MDefBindInfluence *inf;
@@ -1714,7 +1714,7 @@
 	memset(&mdb, 0, sizeof(MeshDeformBind));
 
 	/* get mesh and cage mesh */
-	mdb.vertexcos= vertexcos;
+	mdb.vertexcos= (float(*)[3])vertexcos;
 	mdb.totvert= totvert;
 	
 	mdb.cagedm= mesh_create_derived_no_deform(scene, mmd->object, NULL, CD_MASK_BAREMESH);

Modified: trunk/blender/source/blender/editors/armature/meshlaplacian.h
===================================================================
--- trunk/blender/source/blender/editors/armature/meshlaplacian.h	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/editors/armature/meshlaplacian.h	2009-11-05 18:05:55 UTC (rev 24361)
@@ -79,7 +79,7 @@
 /* Harmonic Coordinates */
 
 void harmonic_coordinates_bind(struct Scene *scene, struct MeshDeformModifierData *mmd,
-	float (*vertexcos)[3], int totvert, float cagemat[][4]);
+	float *vertexcos, int totvert, float cagemat[][4]);
 
 #endif
 

Modified: trunk/blender/source/blender/editors/include/ED_armature.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_armature.h	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/editors/include/ED_armature.h	2009-11-05 18:05:55 UTC (rev 24361)
@@ -42,6 +42,7 @@
 struct RegionView3D;
 struct SK_Sketch;
 struct IDProperty;
+struct MeshDeformModifierData;
 
 typedef struct EditBone
 {
@@ -162,6 +163,10 @@
 void BDR_drawSketch(const struct bContext *vc);
 int BDR_drawSketchNames(struct ViewContext *vc);
 
+/* meshlaplacian.c */
+void harmonic_coordinates_bind(struct Scene *scene, struct MeshDeformModifierData *mmd,
+	float *vertexcos, int totvert, float cagemat[][4]);
+
 #endif /* ED_ARMATURE_H */
 
 

Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/editors/object/object_modifier.c	2009-11-05 18:05:55 UTC (rev 24361)
@@ -65,6 +65,7 @@
 #include "RNA_define.h"
 #include "RNA_enum_types.h"
 
+#include "ED_armature.h"
 #include "ED_screen.h"
 
 #include "WM_api.h"
@@ -779,7 +780,7 @@
 		int mode= mmd->modifier.mode;
 
 		/* force modifier to run, it will call binding routine */
-		mmd->needbind= 1;
+		mmd->bindfunc= harmonic_coordinates_bind;
 		mmd->modifier.mode |= eModifierMode_Realtime;
 
 		if(ob->type == OB_MESH) {
@@ -796,7 +797,7 @@
 			makeDispListCurveTypes(scene, ob, 0);
 		}
 
-		mmd->needbind= 0;
+		mmd->bindfunc= NULL;
 		mmd->modifier.mode= mode;
 	}
 	

Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h	2009-11-05 18:05:55 UTC (rev 24361)
@@ -508,8 +508,7 @@
 	struct Object *object;			/* mesh object */
 	char defgrp_name[32];			/* optional vertexgroup name */
 
-	short gridsize, needbind;
-	short flag, pad;
+	short gridsize, flag, pad[2];
 
 	/* variables filled in when bound */
 	float *bindweights, *bindcos;	/* computed binding weights */
@@ -522,6 +521,10 @@
 	float dyncellmin[3];			/* offset of the dynamic bind grid */
 	float dyncellwidth;				/* width of dynamic bind cell */
 	float bindmat[4][4];			/* matrix of cage at binding time */
+
+	/* runtime */
+	void (*bindfunc)(struct Scene *scene, struct MeshDeformModifierData *mmd,
+		float *vertexcos, int totvert, float cagemat[][4]);
 } MeshDeformModifierData;
 
 typedef enum {

Modified: trunk/blender/source/blender/makesrna/intern/rna_modifier.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2009-11-05 17:44:02 UTC (rev 24360)
+++ trunk/blender/source/blender/makesrna/intern/rna_modifier.c	2009-11-05 18:05:55 UTC (rev 24361)
@@ -795,7 +795,7 @@
 	prop= RNA_def_property(srna, "start_position_object", PROP_POINTER, PROP_NONE);
 	RNA_def_property_pointer_sdna(prop, NULL, "objectcenter");
 	RNA_def_property_ui_text(prop, "Start Position Object", "");
-	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
 	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
 
 	prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -824,7 +824,7 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list