[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25664] trunk/blender: Cessen Rigging Request: "Copy Transforms" Constraint

Joshua Leung aligorith at gmail.com
Sat Jan 2 05:14:17 CET 2010


Revision: 25664
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25664
Author:   aligorith
Date:     2010-01-02 05:14:17 +0100 (Sat, 02 Jan 2010)

Log Message:
-----------
Cessen Rigging Request: "Copy Transforms" Constraint

This constraint simply copies the transformation matrix of the target, and assigns it to the owner.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_data_armature.py
    trunk/blender/release/scripts/ui/properties_object_constraint.py
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_constraint_types.h
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_constraint.c

Modified: trunk/blender/release/scripts/ui/properties_data_armature.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_data_armature.py	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/release/scripts/ui/properties_data_armature.py	2010-01-02 04:14:17 UTC (rev 25664)
@@ -89,6 +89,7 @@
     def draw(self, context):
         layout = self.layout
 
+        ob = context.object
         arm = context.armature
         wide_ui = context.region.width > narrowui
 
@@ -108,6 +109,7 @@
             col = split.column()
         col.prop(arm, "draw_group_colors", text="Colors")
         col.prop(arm, "delay_deform", text="Delay Refresh")
+        col.prop(ob, "x_ray", text="X-Ray (Object)")
 
 
 class DATA_PT_bone_groups(DataButtonsPanel):

Modified: trunk/blender/release/scripts/ui/properties_object_constraint.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_object_constraint.py	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/release/scripts/ui/properties_object_constraint.py	2010-01-02 04:14:17 UTC (rev 25664)
@@ -460,7 +460,13 @@
         layout.prop(con, "use_offset")
 
         self.space_template(layout, con, wide_ui)
+		
+    def COPY_TRANSFORMS(self, context, layout, con, wide_ui):
+        self.target_template(layout, con, wide_ui)
 
+        self.space_template(layout, con, wide_ui)
+		
+
     #def SCRIPT(self, context, layout, con):
 
     def ACTION(self, context, layout, con, wide_ui):

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2010-01-02 04:14:17 UTC (rev 25664)
@@ -1690,8 +1690,8 @@
 	if (VALID_CONS_TARGET(ct)) {
 		float obsize[3], size[3];
 		
-		mat4_to_size( size,ct->matrix);
-		mat4_to_size( obsize,cob->matrix);
+		mat4_to_size(size, ct->matrix);
+		mat4_to_size(obsize, cob->matrix);
 		
 		if ((data->flag & SIZELIKE_X) && (obsize[0] != 0)) {
 			if (data->flag & SIZELIKE_OFFSET) {
@@ -1735,7 +1735,59 @@
 	sizelike_evaluate /* evaluate */
 };
 
+/* ----------- Copy Transforms ------------- */
 
+static int translike_get_tars (bConstraint *con, ListBase *list)
+{
+	if (con && list) {
+		bTransLikeConstraint *data= con->data;
+		bConstraintTarget *ct;
+		
+		/* standard target-getting macro for single-target constraints */
+		SINGLETARGET_GET_TARS(con, data->tar, data->subtarget, ct, list)
+		
+		return 1;
+	}
+	
+	return 0;
+}
+
+static void translike_flush_tars (bConstraint *con, ListBase *list, short nocopy)
+{
+	if (con && list) {
+		bTransLikeConstraint *data= con->data;
+		bConstraintTarget *ct= list->first;
+		
+		/* the following macro is used for all standard single-target constraints */
+		SINGLETARGET_FLUSH_TARS(con, data->tar, data->subtarget, ct, list, nocopy)
+	}
+}
+
+static void translike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets)
+{
+	bConstraintTarget *ct= targets->first;
+	
+	if (VALID_CONS_TARGET(ct)) {
+		/* just copy the entire transform matrix of the target */
+		copy_m4_m4(cob->matrix, ct->matrix);
+	}
+}
+
+static bConstraintTypeInfo CTI_TRANSLIKE = {
+	CONSTRAINT_TYPE_TRANSLIKE, /* type */
+	sizeof(bTransLikeConstraint), /* size */
+	"Copy Transforms", /* name */
+	"bTransLikeConstraint", /* struct name */
+	NULL, /* free data */
+	NULL, /* relink data */
+	NULL, /* copy data */
+	NULL, /* new data */
+	translike_get_tars, /* get constraint targets */
+	translike_flush_tars, /* flush constraint targets */
+	default_get_tarmat, /* get target matrix */
+	translike_evaluate /* evaluate */
+};
+
 /* ----------- Python Constraint -------------- */
 
 static void pycon_free (bConstraint *con)
@@ -3565,6 +3617,7 @@
 	constraintsTypeInfo[20]= &CTI_SHRINKWRAP;		/* Shrinkwrap Constraint */
 	constraintsTypeInfo[21]= &CTI_DAMPTRACK;		/* Damped TrackTo Constraint */
 	constraintsTypeInfo[22]= &CTI_SPLINEIK;			/* Spline IK Constraint */
+	constraintsTypeInfo[23]= &CTI_TRANSLIKE;		/* Copy Transforms Constraint */
 }
 
 /* This function should be used for getting the appropriate type-info when only

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-01-02 04:14:17 UTC (rev 25664)
@@ -2302,6 +2302,13 @@
 				data->tar = newlibadr(fd, id->lib, data->tar);
 			}
 			break;
+		case CONSTRAINT_TYPE_TRANSLIKE:
+			{
+				bTransLikeConstraint *data;
+				data= ((bTransLikeConstraint*)con->data);
+				data->tar = newlibadr(fd, id->lib, data->tar);
+			}
+			break;
 		case CONSTRAINT_TYPE_NULL:
 			break;
 		}
@@ -11154,6 +11161,12 @@
 				expand_doit(fd, mainvar, data->tar);
 			}
 			break;
+		case CONSTRAINT_TYPE_TRANSLIKE:
+			{
+				bTransLikeConstraint *data = (bTransLikeConstraint*)curcon->data;
+				expand_doit(fd, mainvar, data->tar);
+			}
+			break;
 		default:
 			break;
 		}

Modified: trunk/blender/source/blender/makesdna/DNA_constraint_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_constraint_types.h	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/source/blender/makesdna/DNA_constraint_types.h	2010-01-02 04:14:17 UTC (rev 25664)
@@ -200,6 +200,20 @@
 	char		subtarget[32];
 } bLocateLikeConstraint;
 
+/* Copy Scale Constraint */
+typedef struct bSizeLikeConstraint {
+	Object		*tar;
+	int			flag;
+	int			reserved1;
+	char		subtarget[32];
+} bSizeLikeConstraint;
+
+/* Copy Transform Constraint */
+typedef struct bTransLikeConstraint {
+	Object 		*tar;
+	char 		subtarget[32];
+} bTransLikeConstraint;
+
 /* Floor Constraint */
 typedef struct bMinMaxConstraint {
 	Object		*tar;
@@ -211,14 +225,6 @@
 	char		subtarget[32];
 } bMinMaxConstraint;
 
-/* Copy Scale Constraint */
-typedef struct bSizeLikeConstraint {
-	Object		*tar;
-	int			flag;
-	int			reserved1;
-	char		subtarget[32];
-} bSizeLikeConstraint;
-
 /* Action Constraint */
 typedef struct bActionConstraint {
 	Object		*tar;
@@ -401,6 +407,7 @@
 	CONSTRAINT_TYPE_SHRINKWRAP,			/* shrinkwrap (loc/rot) constraint */
 	CONSTRAINT_TYPE_DAMPTRACK,			/* New Tracking constraint that minimises twisting */
 	CONSTRAINT_TYPE_SPLINEIK,			/* Spline-IK - Align 'n' bones to a curve */
+	CONSTRAINT_TYPE_TRANSLIKE,			/* Copy transform matrix */
 	
 	/* NOTE: no constraints are allowed to be added after this */
 	NUM_CONSTRAINT_TYPES

Modified: trunk/blender/source/blender/makesrna/RNA_access.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_access.h	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/source/blender/makesrna/RNA_access.h	2010-01-02 04:14:17 UTC (rev 25664)
@@ -167,6 +167,7 @@
 extern StructRNA RNA_CopyLocationConstraint;
 extern StructRNA RNA_CopyRotationConstraint;
 extern StructRNA RNA_CopyScaleConstraint;
+extern StructRNA RNA_CopyTransformsConstraint;
 extern StructRNA RNA_Curve;
 extern StructRNA RNA_CurveMap;
 extern StructRNA RNA_CurveMapping;

Modified: trunk/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2010-01-02 04:09:13 UTC (rev 25663)
+++ trunk/blender/source/blender/makesrna/intern/rna_constraint.c	2010-01-02 04:14:17 UTC (rev 25664)
@@ -43,6 +43,7 @@
 	{CONSTRAINT_TYPE_LOCLIKE, "COPY_LOCATION", ICON_CONSTRAINT_DATA, "Copy Location", ""},
 	{CONSTRAINT_TYPE_ROTLIKE, "COPY_ROTATION", ICON_CONSTRAINT_DATA, "Copy Rotation", ""},
 	{CONSTRAINT_TYPE_SIZELIKE, "COPY_SCALE", ICON_CONSTRAINT_DATA, "Copy Scale", ""},
+	{CONSTRAINT_TYPE_TRANSLIKE, "COPY_TRANSFORMS", ICON_CONSTRAINT_DATA, "Copy Transforms", ""},
 	{CONSTRAINT_TYPE_DISTLIMIT, "LIMIT_DISTANCE", ICON_CONSTRAINT_DATA, "Limit Distance", ""},
 	{CONSTRAINT_TYPE_LOCLIMIT, "LIMIT_LOCATION", ICON_CONSTRAINT_DATA, "Limit Location", ""},
 	{CONSTRAINT_TYPE_ROTLIMIT, "LIMIT_ROTATION", ICON_CONSTRAINT_DATA, "Limit Rotation", ""},
@@ -151,6 +152,8 @@
 			return &RNA_DampedTrackConstraint;
 		case CONSTRAINT_TYPE_SPLINEIK:
 			return &RNA_SplineIKConstraint;
+		case CONSTRAINT_TYPE_TRANSLIKE:
+			return &RNA_CopyTransformsConstraint;
 		default:
 			return &RNA_UnknownType;
 	}
@@ -647,6 +650,69 @@
 	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
 }
 
+static void rna_def_constraint_locate_like(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna= RNA_def_struct(brna, "CopyLocationConstraint", "Constraint");
+	RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target.");
+
+	prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_FACTOR);
+	RNA_def_property_float_sdna(prop, "bConstraint", "headtail");
+	RNA_def_property_ui_text(prop, "Head/Tail", "Target along length of bone: Head=0, Tail=1.");
+	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+
+	RNA_def_struct_sdna_from(srna, "bLocateLikeConstraint", "data");
+
+	prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "tar");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Target", "Target Object");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+
+	prop= RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
+	RNA_def_property_string_sdna(prop, NULL, "subtarget");
+	RNA_def_property_ui_text(prop, "Sub-Target", "");
+	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
+
+	prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_X);
+	RNA_def_property_ui_text(prop, "Copy X", "Copy the target's X location.");
+	RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
+
+	prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_Y);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list