Index: source/blender/blenkernel/intern/armature.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/armature.c,v retrieving revision 1.100 diff -u -p -u -r1.100 armature.c --- source/blender/blenkernel/intern/armature.c 18 Mar 2007 14:53:16 -0000 1.100 +++ source/blender/blenkernel/intern/armature.c 19 Mar 2007 16:27:44 -0000 @@ -1636,7 +1636,7 @@ static void do_local_constraint(bPoseCha if(data->tar && data->subtarget[0]) { bPoseChannel *pchant= get_pose_channel(data->tar->pose, data->subtarget); if(pchant) { - if(data->flag != (ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z)) { + if(data->flag != (ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z|ROTLIKE_X_INVERT|ROTLIKE_Y_INVERT|ROTLIKE_Z_INVERT)) { float eul[3], eult[3], euln[3], fac= con->enforce; QuatToEul(pchan->quat, eul); Index: source/blender/blenkernel/intern/constraint.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenkernel/intern/constraint.c,v retrieving revision 1.64 diff -u -p -u -r1.64 constraint.c --- source/blender/blenkernel/intern/constraint.c 18 Mar 2007 14:53:16 -0000 1.64 +++ source/blender/blenkernel/intern/constraint.c 19 Mar 2007 16:27:44 -0000 @@ -620,7 +620,7 @@ void *new_constraint_data (short type) { bRotateLikeConstraint *data; data = MEM_callocN(sizeof(bRotateLikeConstraint), "rotlikeConstraint"); - data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z|ROTLIKE_X_INVERT|ROTLIKE_Y_INVERT|ROTLIKE_Z_INVERT; result = data; } break; @@ -628,7 +628,7 @@ void *new_constraint_data (short type) { bLocateLikeConstraint *data; data = MEM_callocN(sizeof(bLocateLikeConstraint), "loclikeConstraint"); - data->flag = LOCLIKE_X|LOCLIKE_Y|LOCLIKE_Z; + data->flag = LOCLIKE_X|LOCLIKE_Y|LOCLIKE_Z|LOCLIKE_X_INVERT|LOCLIKE_Y_INVERT|LOCLIKE_Z_INVERT; result = data; } break; Index: source/blender/blenloader/intern/readfile.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/blenloader/intern/readfile.c,v retrieving revision 1.370 diff -u -p -u -r1.370 readfile.c --- source/blender/blenloader/intern/readfile.c 16 Mar 2007 05:39:30 -0000 1.370 +++ source/blender/blenloader/intern/readfile.c 19 Mar 2007 16:27:44 -0000 @@ -6207,7 +6207,7 @@ static void do_versions(FileData *fd, Li /* version patch from buttons_object.c */ if(data->flag==0) - data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z|ROTLIKE_X_INVERT|ROTLIKE_Y_INVERT|ROTLIKE_Z_INVERT; /* not so sure about this. should be in later version patch? */ } break; } @@ -6245,7 +6245,7 @@ static void do_versions(FileData *fd, Li /* version patch from buttons_object.c */ if(data->flag==0) - data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; + data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z|ROTLIKE_X_INVERT|ROTLIKE_Y_INVERT|ROTLIKE_Z_INVERT; /* not sure about this */ } break; } Index: source/blender/python/api2_2x/Constraint.c =================================================================== RCS file: /cvsroot/bf-blender/blender/source/blender/python/api2_2x/Constraint.c,v retrieving revision 1.12 diff -u -p -u -r1.12 Constraint.c --- source/blender/python/api2_2x/Constraint.c 15 Mar 2007 01:47:51 -0000 1.12 +++ source/blender/python/api2_2x/Constraint.c 19 Mar 2007 16:27:45 -0000 @@ -876,7 +876,7 @@ static int locatelike_setter( BPy_Constr } case EXPP_CONSTR_COPY: return EXPP_setIValueRange( value, &con->flag, - 0, LOCLIKE_X | LOCLIKE_Y | LOCLIKE_Z, 'i' ); + 0, LOCLIKE_X | LOCLIKE_Y | LOCLIKE_Z | LOCLIKE_X_INVERT | LOCLIKE_Y_INVERT | LOCLIKE_Z_INVERT, 'i' ); case EXPP_CONSTR_LOCAL: if( !get_armature( con->tar ) ) return EXPP_ReturnIntError( PyExc_RuntimeError, @@ -934,7 +934,7 @@ static int rotatelike_setter( BPy_Constr } case EXPP_CONSTR_COPY: return EXPP_setIValueRange( value, &con->flag, - 0, LOCLIKE_X | LOCLIKE_Y | LOCLIKE_Z, 'i' ); + 0, LOCLIKE_X | LOCLIKE_Y | LOCLIKE_Z | LOCLIKE_X_INVERT | LOCLIKE_Y_INVERT | LOCLIKE_Z_INVERT, 'i' ); case EXPP_CONSTR_LOCAL: if( !get_armature( con->tar ) ) return EXPP_ReturnIntError( PyExc_RuntimeError, @@ -994,7 +994,7 @@ static int sizelike_setter( BPy_Constrai } case EXPP_CONSTR_COPY: return EXPP_setIValueRange( value, &con->flag, - 0, LOCLIKE_X | LOCLIKE_Y | LOCLIKE_Z, 'i' ); + 0, LOCLIKE_X | LOCLIKE_Y | LOCLIKE_Z | LOCLIKE_X_INVERT | LOCLIKE_Y_INVERT | LOCLIKE_Z_INVERT, 'i' ); #if 0 case EXPP_CONSTR_LOCAL: if( !get_armature( con->tar ) ) @@ -1957,6 +1957,12 @@ static PyObject *M_Constraint_SettingsDi PyInt_FromLong( LOCLIKE_Y ) ); PyConstant_Insert( d, "COPYZ", PyInt_FromLong( LOCLIKE_Z ) ); + PyConstant_Insert( d, "COPYXINVERT", + PyInt_FromLong( LOCLIKE_X_INVERT ) ); + PyConstant_Insert( d, "COPYYINVERT", + PyInt_FromLong( LOCLIKE_Y_INVERT ) ); + PyConstant_Insert( d, "COPYZINVERT", + PyInt_FromLong( LOCLIKE_Z_INVERT ) ); PyConstant_Insert( d, "TARGET", PyInt_FromLong( EXPP_CONSTR_TARGET ) );