[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11467] branches/pyapi_devel/source: merge from trunk

Campbell Barton cbarton at metavr.com
Wed Aug 1 22:26:25 CEST 2007


Revision: 11467
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11467
Author:   campbellbarton
Date:     2007-08-01 22:26:24 +0200 (Wed, 01 Aug 2007)

Log Message:
-----------
merge from trunk

Modified Paths:
--------------
    branches/pyapi_devel/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/pyapi_devel/source/blender/blenkernel/BKE_constraint.h
    branches/pyapi_devel/source/blender/blenkernel/BKE_global.h
    branches/pyapi_devel/source/blender/blenkernel/BKE_lattice.h
    branches/pyapi_devel/source/blender/blenkernel/BKE_modifier.h
    branches/pyapi_devel/source/blender/blenkernel/intern/DerivedMesh.c
    branches/pyapi_devel/source/blender/blenkernel/intern/armature.c
    branches/pyapi_devel/source/blender/blenkernel/intern/constraint.c
    branches/pyapi_devel/source/blender/blenkernel/intern/modifier.c
    branches/pyapi_devel/source/blender/blenkernel/intern/object.c
    branches/pyapi_devel/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/pyapi_devel/source/blender/blenlib/BLI_arithb.h
    branches/pyapi_devel/source/blender/blenlib/intern/arithb.c
    branches/pyapi_devel/source/blender/blenloader/intern/readfile.c
    branches/pyapi_devel/source/blender/blenloader/intern/writefile.c
    branches/pyapi_devel/source/blender/ftfont/FTF_Api.h
    branches/pyapi_devel/source/blender/ftfont/SConscript
    branches/pyapi_devel/source/blender/ftfont/intern/FTF_Api.cpp
    branches/pyapi_devel/source/blender/ftfont/intern/Makefile
    branches/pyapi_devel/source/blender/include/BIF_editconstraint.h
    branches/pyapi_devel/source/blender/include/BIF_interface.h
    branches/pyapi_devel/source/blender/include/BIF_poseobject.h
    branches/pyapi_devel/source/blender/include/BIF_resources.h
    branches/pyapi_devel/source/blender/include/BSE_editipo.h
    branches/pyapi_devel/source/blender/makesdna/DNA_action_types.h
    branches/pyapi_devel/source/blender/makesdna/DNA_armature_types.h
    branches/pyapi_devel/source/blender/makesdna/DNA_mesh_types.h
    branches/pyapi_devel/source/blender/makesdna/DNA_modifier_types.h
    branches/pyapi_devel/source/blender/makesdna/DNA_object_types.h
    branches/pyapi_devel/source/blender/makesdna/DNA_scene_types.h
    branches/pyapi_devel/source/blender/makesdna/DNA_space_types.h
    branches/pyapi_devel/source/blender/python/api2_2x/Armature.c
    branches/pyapi_devel/source/blender/python/api2_2x/Constraint.c
    branches/pyapi_devel/source/blender/python/api2_2x/Draw.c
    branches/pyapi_devel/source/blender/python/api2_2x/Draw.h
    branches/pyapi_devel/source/blender/python/api2_2x/Image.c
    branches/pyapi_devel/source/blender/python/api2_2x/Lamp.c
    branches/pyapi_devel/source/blender/python/api2_2x/MTex.c
    branches/pyapi_devel/source/blender/python/api2_2x/Object.c
    branches/pyapi_devel/source/blender/python/api2_2x/Pose.c
    branches/pyapi_devel/source/blender/python/api2_2x/Texture.c
    branches/pyapi_devel/source/blender/python/api2_2x/World.c
    branches/pyapi_devel/source/blender/python/api2_2x/bpy_config.c
    branches/pyapi_devel/source/blender/render/intern/include/render_types.h
    branches/pyapi_devel/source/blender/render/intern/include/rendercore.h
    branches/pyapi_devel/source/blender/render/intern/source/convertblender.c
    branches/pyapi_devel/source/blender/render/intern/source/envmap.c
    branches/pyapi_devel/source/blender/render/intern/source/ray.c
    branches/pyapi_devel/source/blender/render/intern/source/shadeoutput.c
    branches/pyapi_devel/source/blender/src/blenderbuttons.c
    branches/pyapi_devel/source/blender/src/buttons_editing.c
    branches/pyapi_devel/source/blender/src/buttons_object.c
    branches/pyapi_devel/source/blender/src/drawarmature.c
    branches/pyapi_devel/source/blender/src/drawscript.c
    branches/pyapi_devel/source/blender/src/editarmature.c
    branches/pyapi_devel/source/blender/src/editconstraint.c
    branches/pyapi_devel/source/blender/src/editipo.c
    branches/pyapi_devel/source/blender/src/editobject.c
    branches/pyapi_devel/source/blender/src/filesel.c
    branches/pyapi_devel/source/blender/src/header_filesel.c
    branches/pyapi_devel/source/blender/src/header_view3d.c
    branches/pyapi_devel/source/blender/src/interface_draw.c
    branches/pyapi_devel/source/blender/src/poseobject.c
    branches/pyapi_devel/source/blender/src/space.c
    branches/pyapi_devel/source/blender/src/transform_conversions.c
    branches/pyapi_devel/source/gameengine/Converter/BL_SkinDeformer.cpp

Modified: branches/pyapi_devel/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/BKE_DerivedMesh.h	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/BKE_DerivedMesh.h	2007-08-01 20:26:24 UTC (rev 11467)
@@ -425,6 +425,11 @@
 DerivedMesh *editmesh_get_derived_cage_and_final(DerivedMesh **final_r,
                                                  CustomDataMask dataMask);
 
+/* returns an array of deform matrices for crazyspace correction, and the
+   number of modifiers left */
+int editmesh_get_first_deform_matrices(float (**deformmats)[3][3],
+                                       float (**deformcos)[3]);
+
 void weight_to_rgb(float input, float *fr, float *fg, float *fb);
 
 /* determines required DerivedMesh data according to view and edit modes */

Modified: branches/pyapi_devel/source/blender/blenkernel/BKE_constraint.h
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/BKE_constraint.h	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/BKE_constraint.h	2007-08-01 20:26:24 UTC (rev 11467)
@@ -25,7 +25,7 @@
  *
  * The Original Code is: all of this file.
  *
- * Contributor(s): none yet.
+ * Contributor(s): 2007 - Joshua Leung (major recode)
  *
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
  */

Modified: branches/pyapi_devel/source/blender/blenkernel/BKE_global.h
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/BKE_global.h	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/BKE_global.h	2007-08-01 20:26:24 UTC (rev 11467)
@@ -191,6 +191,8 @@
 #define G_DRAWSHARP     (1 << 28) /* draw edges with the sharp flag */
 #define G_SCULPTMODE    (1 << 29)
 
+#define G_AUTOMATKEYS	(1 << 30)
+
 /* G.fileflags */
 
 #define G_AUTOPACK               (1 << 0)

Modified: branches/pyapi_devel/source/blender/blenkernel/BKE_lattice.h
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/BKE_lattice.h	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/BKE_lattice.h	2007-08-01 20:26:24 UTC (rev 11467)
@@ -64,8 +64,8 @@
                           int numVerts, char *vgroup);
 void armature_deform_verts(struct Object *armOb, struct Object *target,
                            struct DerivedMesh *dm, float (*vertexCos)[3],
-                           int numVerts, int deformflag,
-                           const char *defgrp_name);
+                           float (*defMats)[3][3], int numVerts,
+                           int deformflag, const char *defgrp_name);
 float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3];
 void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3]);
 void lattice_calc_modifiers(struct Object *ob);

Modified: branches/pyapi_devel/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/BKE_modifier.h	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/BKE_modifier.h	2007-08-01 20:26:24 UTC (rev 11467)
@@ -125,6 +125,11 @@
 	            struct EditMesh *editData, struct DerivedMesh *derivedData,
 	            float (*vertexCos)[3], int numVerts);
 
+	/* Set deform matrix per vertex for crazyspace correction */
+	void (*deformMatricesEM)(
+	            struct ModifierData *md, struct Object *ob,
+	            struct EditMesh *editData, struct DerivedMesh *derivedData,
+	            float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
 	/********************* Non-deform modifier functions *********************/
 
@@ -257,6 +262,7 @@
 int           modifier_dependsOnTime(struct ModifierData *md);
 int           modifier_supportsMapping(struct ModifierData *md);
 int           modifier_couldBeCage(struct ModifierData *md);
+int           modifier_isDeformer(struct ModifierData *md);
 void          modifier_setError(struct ModifierData *md, char *format, ...);
 
 void          modifiers_foreachObjectLink(struct Object *ob,

Modified: branches/pyapi_devel/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/intern/DerivedMesh.c	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/intern/DerivedMesh.c	2007-08-01 20:26:24 UTC (rev 11467)
@@ -1887,6 +1887,24 @@
 	return cos;
 }
 
+static int editmesh_modifier_is_enabled(ModifierData *md, DerivedMesh *dm)
+{
+	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+	int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
+
+	if((md->mode & required_mode) != required_mode) return 0;
+	if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
+		modifier_setError(md, "Internal error, modifier requires"
+		                  "original data (bad stack position).");
+		return 0;
+	}
+	if(mti->isDisabled && mti->isDisabled(md)) return 0;
+	if(!(mti->flags & eModifierTypeFlag_SupportsEditmode)) return 0;
+	if(md->mode & eModifierMode_DisableTemporary) return 0;
+	
+	return 1;
+}
+
 static void editmesh_calc_modifiers(DerivedMesh **cage_r,
                                     DerivedMesh **final_r,
                                     CustomDataMask dataMask)
@@ -1897,7 +1915,6 @@
 	float (*deformedVerts)[3] = NULL;
 	DerivedMesh *dm;
 	int i, numVerts = 0, cageIndex = modifiers_getCageIndex(ob, NULL);
-	int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
 	LinkNode *datamasks, *curr;
 
 	modifiers_clearErrors(ob);
@@ -1918,14 +1935,8 @@
 	for(i = 0; md; i++, md = md->next, curr = curr->next) {
 		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
-		if((md->mode & required_mode) != required_mode) continue;
-		if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
-			modifier_setError(md, "Internal error, modifier requires"
-			                  "original data (bad stack position).");
+		if(!editmesh_modifier_is_enabled(md, dm))
 			continue;
-		}
-		if(mti->isDisabled && mti->isDisabled(md)) continue;
-		if(!(mti->flags & eModifierTypeFlag_SupportsEditmode)) continue;
 
 		/* How to apply modifier depends on (a) what we already have as
 		 * a result of previous modifiers (could be a DerivedMesh or just
@@ -2461,7 +2472,62 @@
 	return vertexcosnos;
 }
 
+/* ********* crazyspace *************** */
 
+int editmesh_get_first_deform_matrices(float (**deformmats)[3][3], float (**deformcos)[3])
+{
+	Object *ob = G.obedit;
+	EditMesh *em = G.editMesh;
+	ModifierData *md;
+	DerivedMesh *dm;
+	int i, a, numleft = 0, numVerts = 0;
+	int cageIndex = modifiers_getCageIndex(ob, NULL);
+	float (*defmats)[3][3] = NULL, (*deformedVerts)[3] = NULL;
+
+	modifiers_clearErrors(ob);
+
+	dm = NULL;
+	md = ob->modifiers.first;
+
+	/* compute the deformation matrices and coordinates for the first
+	   modifiers with on cage editing that are enabled and support computing
+	   deform matrices */
+	for(i = 0; md && i <= cageIndex; i++, md = md->next) {
+		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
+
+		if(!editmesh_modifier_is_enabled(md, dm))
+			continue;
+
+		if(mti->type==eModifierTypeType_OnlyDeform && mti->deformMatricesEM) {
+			if(!defmats) {
+				dm= getEditMeshDerivedMesh(em, ob, NULL);
+				deformedVerts= editmesh_getVertexCos(em, &numVerts);
+				defmats= MEM_callocN(sizeof(*defmats)*numVerts, "defmats");
+
+				for(a=0; a<numVerts; a++)
+					Mat3One(defmats[a]);
+			}
+
+			mti->deformMatricesEM(md, ob, em, dm, deformedVerts, defmats,
+				numVerts);
+		}
+		else
+			break;
+	}
+
+	for(; md && i <= cageIndex; md = md->next, i++)
+		if(editmesh_modifier_is_enabled(md, dm) && modifier_isDeformer(md))
+			numleft++;
+
+	if(dm)
+		dm->release(dm);
+	
+	*deformmats= defmats;
+	*deformcos= deformedVerts;
+
+	return numleft;
+}
+
 /* ************************* fluidsim bobj file handling **************************** */
 
 #ifndef DISABLE_ELBEEM

Modified: branches/pyapi_devel/source/blender/blenkernel/intern/armature.c
===================================================================
--- branches/pyapi_devel/source/blender/blenkernel/intern/armature.c	2007-08-01 18:54:23 UTC (rev 11466)
+++ branches/pyapi_devel/source/blender/blenkernel/intern/armature.c	2007-08-01 20:26:24 UTC (rev 11467)
@@ -499,44 +499,73 @@
 
 /* ************ Armature Deform ******************* */
 
-static void pchan_b_bone_defmats(bPoseChannel *pchan)
+static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion)
 {
 	Bone *bone= pchan->bone;
 	Mat4 *b_bone= b_bone_spline_setup(pchan);
 	Mat4 *b_bone_mats;
+	DualQuat *b_bone_dual_quats= NULL;
+	float tmat[4][4];
 	int a;
 	
-	pchan->b_bone_mats=b_bone_mats= MEM_mallocN((1+bone->segments)*sizeof(Mat4), "BBone defmats");
+	/* allocate b_bone matrices and dual quats */
+	b_bone_mats= MEM_mallocN((1+bone->segments)*sizeof(Mat4), "BBone defmats");
+	pchan->b_bone_mats= b_bone_mats;
+
+	if(use_quaternion) {
+		b_bone_dual_quats= MEM_mallocN((bone->segments)*sizeof(DualQuat), "BBone dqs");
+		pchan->b_bone_dual_quats= b_bone_dual_quats;
+	}
 	
-	/* first matrix is the inverse arm_mat, to bring points in local bone space */
+	/* first matrix is the inverse arm_mat, to bring points in local bone space
+	   for finding out which segment it belongs to */
 	Mat4Invert(b_bone_mats[0].mat, bone->arm_mat);
-	
-	/* then we multiply the bbone_mats with arm_mat */
+
+	/* then we make the b_bone_mats:
+	    - first transform to local bone space
+		- translate over the curve to the bbone mat space
+		- transform with b_bone matrix
+		- transform back into global space */
+	Mat4One(tmat);
+
 	for(a=0; a<bone->segments; a++) {
-		Mat4MulMat4(b_bone_mats[a+1].mat, b_bone[a].mat, bone->arm_mat);
+		tmat[3][1] = -a*(bone->length/(float)bone->segments);
+
+		Mat4MulSerie(b_bone_mats[a+1].mat, pchan->chan_mat, bone->arm_mat,
+			b_bone[a].mat, tmat, b_bone_mats[0].mat, NULL, NULL, NULL);
+
+		if(use_quaternion)
+			Mat4ToDQuat(bone->arm_mat, b_bone_mats[a+1].mat, &b_bone_dual_quats[a]);
 	}
 }
 
-static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *defpos)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list