[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15223] branches/apricot: svn merge -r15209:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/ blender/
Campbell Barton
ideasman42 at gmail.com
Sat Jun 14 20:13:57 CEST 2008
Revision: 15223
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15223
Author: campbellbarton
Date: 2008-06-14 20:13:02 +0200 (Sat, 14 Jun 2008)
Log Message:
-----------
svn merge -r15209:HEAD https://svn.blender.org/svnroot/bf-blender/trunk/blender/
Modified Paths:
--------------
branches/apricot/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj
branches/apricot/projectfiles_vc7/blender/blenlib/BLI_blenlib.vcproj
branches/apricot/source/blender/blenkernel/intern/action.c
branches/apricot/source/blender/blenkernel/intern/modifier.c
branches/apricot/source/blender/blenkernel/intern/object.c
branches/apricot/source/blender/blenlib/intern/util.c
branches/apricot/source/blender/makesdna/DNA_modifier_types.h
branches/apricot/source/blender/render/intern/source/shadbuf.c
branches/apricot/source/blender/src/buttons_editing.c
branches/apricot/source/blender/src/usiblender.c
branches/apricot/source/gameengine/Converter/BL_ArmatureObject.cpp
branches/apricot/source/gameengine/Ketsji/KX_GameObject.cpp
branches/apricot/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
branches/apricot/source/gameengine/PyDoc/KX_GameObject.py
branches/apricot/source/gameengine/SceneGraph/SG_Node.cpp
branches/apricot/source/gameengine/SceneGraph/SG_Node.h
branches/apricot/source/gameengine/SceneGraph/SG_ParentRelation.h
branches/apricot/source/gameengine/SceneGraph/SG_Spatial.cpp
branches/apricot/source/gameengine/SceneGraph/SG_Spatial.h
Modified: branches/apricot/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj
===================================================================
--- branches/apricot/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj 2008-06-14 17:31:23 UTC (rev 15222)
+++ branches/apricot/projectfiles_vc7/blender/blenkernel/BKE_blenkernel.vcproj 2008-06-14 18:13:02 UTC (rev 15223)
@@ -345,6 +345,9 @@
RelativePath="..\..\..\source\blender\blenkernel\intern\BME_conversions.c">
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\intern\BME_Customdata.c">
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\intern\BME_eulers.c">
</File>
<File
@@ -426,9 +429,6 @@
RelativePath="..\..\..\source\blender\blenkernel\intern\ipo.c">
</File>
<File
- RelativePath="..\..\..\source\blender\blenkernel\intern\kdop.c">
- </File>
- <File
RelativePath="..\..\..\source\blender\blenkernel\intern\key.c">
</File>
<File
@@ -559,6 +559,9 @@
RelativePath="..\..\..\source\blender\blenkernel\BKE_bmesh.h">
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\BKE_bmeshCustomData.h">
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\BKE_bmfont.h">
</File>
<File
Modified: branches/apricot/projectfiles_vc7/blender/blenlib/BLI_blenlib.vcproj
===================================================================
--- branches/apricot/projectfiles_vc7/blender/blenlib/BLI_blenlib.vcproj 2008-06-14 17:31:23 UTC (rev 15222)
+++ branches/apricot/projectfiles_vc7/blender/blenlib/BLI_blenlib.vcproj 2008-06-14 18:13:02 UTC (rev 15223)
@@ -347,6 +347,9 @@
RelativePath="..\..\..\source\blender\blenlib\intern\BLI_heap.c">
</File>
<File
+ RelativePath="..\..\..\source\blender\blenlib\intern\BLI_kdopbvh.c">
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenlib\intern\BLI_kdtree.c">
</File>
<File
@@ -459,6 +462,9 @@
RelativePath="..\..\..\source\blender\blenlib\BLI_jitter.h">
</File>
<File
+ RelativePath="..\..\..\source\blender\blenlib\BLI_kdopbvh.h">
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenlib\BLI_kdtree.h">
</File>
<File
Modified: branches/apricot/source/blender/blenkernel/intern/action.c
===================================================================
--- branches/apricot/source/blender/blenkernel/intern/action.c 2008-06-14 17:31:23 UTC (rev 15222)
+++ branches/apricot/source/blender/blenkernel/intern/action.c 2008-06-14 18:13:02 UTC (rev 15223)
@@ -290,6 +290,12 @@
return;
}
+ if (*dst==src) {
+ printf("copy_pose source and target are the same\n");
+ *dst=NULL;
+ return;
+ }
+
outPose= MEM_callocN(sizeof(bPose), "pose");
duplicatelist(&outPose->chanbase, &src->chanbase);
@@ -740,6 +746,11 @@
const bPoseChannel *schan;
bPoseChannel *pchan= pose->chanbase.first;
+ if (pose==src) {
+ printf("extract_pose_from_pose source and target are the same\n");
+ return;
+ }
+
for (schan=src->chanbase.first; schan; schan=schan->next, pchan= pchan->next) {
copy_pose_channel_data(pchan, schan);
}
@@ -817,6 +828,12 @@
return;
}
+ if (to==from) {
+ printf("copy_pose_result source and target are the same\n");
+ return;
+ }
+
+
for(pchanfrom= from->chanbase.first; pchanfrom; pchanfrom= pchanfrom->next) {
pchanto= get_pose_channel(to, pchanfrom->name);
if(pchanto) {
Modified: branches/apricot/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/apricot/source/blender/blenkernel/intern/modifier.c 2008-06-14 17:31:23 UTC (rev 15222)
+++ branches/apricot/source/blender/blenkernel/intern/modifier.c 2008-06-14 18:13:02 UTC (rev 15223)
@@ -40,6 +40,7 @@
#include "stdarg.h"
#include "math.h"
#include "float.h"
+#include "ctype.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -1269,7 +1270,7 @@
{
MirrorModifierData *mmd = (MirrorModifierData*) md;
- mmd->flag |= MOD_MIR_AXIS_X;
+ mmd->flag |= (MOD_MIR_AXIS_X | MOD_MIR_VGROUP);
mmd->tolerance = 0.001;
mmd->mirror_ob = NULL;
}
@@ -1308,6 +1309,118 @@
}
}
+/* finds the best possible flipped name. For renaming; check for unique names afterwards */
+/* if strip_number: removes number extensions */
+void vertgroup_flip_name (char *name, int strip_number)
+{
+ int len;
+ char prefix[128]={""}; /* The part before the facing */
+ char suffix[128]={""}; /* The part after the facing */
+ char replace[128]={""}; /* The replacement string */
+ char number[128]={""}; /* The number extension string */
+ char *index=NULL;
+
+ len= strlen(name);
+ if(len<3) return; // we don't do names like .R or .L
+
+ /* We first check the case with a .### extension, let's find the last period */
+ if(isdigit(name[len-1])) {
+ index= strrchr(name, '.'); // last occurrance
+ if (index && isdigit(index[1]) ) { // doesnt handle case bone.1abc2 correct..., whatever!
+ if(strip_number==0)
+ strcpy(number, index);
+ *index= 0;
+ len= strlen(name);
+ }
+ }
+
+ strcpy (prefix, name);
+
+#define IS_SEPARATOR(a) ((a)=='.' || (a)==' ' || (a)=='-' || (a)=='_')
+
+ /* first case; separator . - _ with extensions r R l L */
+ if( IS_SEPARATOR(name[len-2]) ) {
+ switch(name[len-1]) {
+ case 'l':
+ prefix[len-1]= 0;
+ strcpy(replace, "r");
+ break;
+ case 'r':
+ prefix[len-1]= 0;
+ strcpy(replace, "l");
+ break;
+ case 'L':
+ prefix[len-1]= 0;
+ strcpy(replace, "R");
+ break;
+ case 'R':
+ prefix[len-1]= 0;
+ strcpy(replace, "L");
+ break;
+ }
+ }
+ /* case; beginning with r R l L , with separator after it */
+ else if( IS_SEPARATOR(name[1]) ) {
+ switch(name[0]) {
+ case 'l':
+ strcpy(replace, "r");
+ strcpy(suffix, name+1);
+ prefix[0]= 0;
+ break;
+ case 'r':
+ strcpy(replace, "l");
+ strcpy(suffix, name+1);
+ prefix[0]= 0;
+ break;
+ case 'L':
+ strcpy(replace, "R");
+ strcpy(suffix, name+1);
+ prefix[0]= 0;
+ break;
+ case 'R':
+ strcpy(replace, "L");
+ strcpy(suffix, name+1);
+ prefix[0]= 0;
+ break;
+ }
+ }
+ else if(len > 5) {
+ /* hrms, why test for a separator? lets do the rule 'ultimate left or right' */
+ index = BLI_strcasestr(prefix, "right");
+ if (index==prefix || index==prefix+len-5) {
+ if(index[0]=='r')
+ strcpy (replace, "left");
+ else {
+ if(index[1]=='I')
+ strcpy (replace, "LEFT");
+ else
+ strcpy (replace, "Left");
+ }
+ *index= 0;
+ strcpy (suffix, index+5);
+ }
+ else {
+ index = BLI_strcasestr(prefix, "left");
+ if (index==prefix || index==prefix+len-4) {
+ if(index[0]=='l')
+ strcpy (replace, "right");
+ else {
+ if(index[1]=='E')
+ strcpy (replace, "RIGHT");
+ else
+ strcpy (replace, "Right");
+ }
+ *index= 0;
+ strcpy (suffix, index+4);
+ }
+ }
+ }
+
+#undef IS_SEPARATOR
+
+ sprintf (name, "%s%s%s%s", prefix, replace, suffix, number);
+}
+
static DerivedMesh *doMirrorOnAxis(MirrorModifierData *mmd,
Object *ob,
DerivedMesh *dm,
@@ -1321,6 +1434,9 @@
int maxVerts = dm->getNumVerts(dm);
int maxEdges = dm->getNumEdges(dm);
int maxFaces = dm->getNumFaces(dm);
+ int vector_size, j, a, b;
+ bDeformGroup *def, *defb;
+ bDeformGroup **vector_def = NULL;
int (*indexMap)[2];
float mtx[4][4], imtx[4][4];
@@ -1330,6 +1446,21 @@
result = CDDM_from_template(dm, maxVerts * 2, maxEdges * 2, maxFaces * 2);
+
+ if (mmd->flag & MOD_MIR_VGROUP) {
+ /* calculate the number of deformedGroups */
+ for(vector_size = 0, def = ob->defbase.first; def;
+ def = def->next, vector_size++);
+
+ /* load the deformedGroups for fast access */
+ vector_def =
+ (bDeformGroup **)MEM_mallocN(sizeof(bDeformGroup*) * vector_size,
+ "group_index");
+ for(a = 0, def = ob->defbase.first; def; def = def->next, a++) {
+ vector_def[a] = def;
+ }
+ }
+
if (mmd->mirror_ob) {
float obinv[4][4];
@@ -1374,16 +1505,48 @@
mv->flag |= ME_VERT_MERGED;
} else {
MVert *mv2 = CDDM_get_vert(result, numVerts);
+ MDeformVert *dvert = NULL;
DM_copy_vert_data(dm, result, i, numVerts, 1);
*mv2 = *mv;
- numVerts++;
co[axis] = -co[axis];
if (mmd->mirror_ob) {
VecMat4MulVecfl(co, imtx, co);
}
VecCopyf(mv2->co, co);
+
+ if (mmd->flag & MOD_MIR_VGROUP){
+ dvert = DM_get_vert_data(result, numVerts, CD_MDEFORMVERT);
+
+ if (dvert)
+ {
+ for(j = 0; j < dvert[0].totweight; ++j)
+ {
+ char tmpname[32];
+
+ if(dvert->dw[j].def_nr < 0 ||
+ dvert->dw[j].def_nr >= vector_size)
+ continue;
+
+ def = vector_def[dvert->dw[j].def_nr];
+ strcpy(tmpname, def->name);
+ vertgroup_flip_name(tmpname,0);
+
+ for(b = 0, defb = ob->defbase.first; defb;
+ defb = defb->next, b++)
+ {
+ if(!strcmp(defb->name, tmpname))
+ {
+ dvert->dw[j].def_nr = b;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ numVerts++;
}
}
@@ -1467,6 +1630,8 @@
}
}
+ if (vector_def) MEM_freeN(vector_def);
+
MEM_freeN(indexMap);
CDDM_lower_num_verts(result, numVerts);
Modified: branches/apricot/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/apricot/source/blender/blenkernel/intern/object.c 2008-06-14 17:31:23 UTC (rev 15222)
+++ branches/apricot/source/blender/blenkernel/intern/object.c 2008-06-14 18:13:02 UTC (rev 15223)
@@ -1100,6 +1100,8 @@
{
bPoseChannel *chan;
+ /* note: need to clear obn->pose pointer first, so that copy_pose works (otherwise there's a crash) */
+ obn->pose= NULL;
copy_pose(&obn->pose, ob->pose, 1); /* 1 = copy constraints */
for (chan = obn->pose->chanbase.first; chan; chan=chan->next){
Modified: branches/apricot/source/blender/blenlib/intern/util.c
===================================================================
--- branches/apricot/source/blender/blenlib/intern/util.c 2008-06-14 17:31:23 UTC (rev 15222)
+++ branches/apricot/source/blender/blenlib/intern/util.c 2008-06-14 18:13:02 UTC (rev 15223)
@@ -905,8 +905,11 @@
if (dir[a] == '\\') break;
a--;
}
- memmove( dir+a, eind, strlen(eind)+1 );
-
+ if (a<0) {
+ break;
+ } else {
+ memmove( dir+a, eind, strlen(eind)+1 );
+ }
}
while ( (start = strstr(dir,"\\.\\")) ){
@@ -939,7 +942,11 @@
if (dir[a] == '/') break;
a--;
}
- memmove( dir+a, eind, strlen(eind)+1 );
+ if (a<0) {
+ break;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list