[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21177] branches/blender2.5/blender/source /blender: RNA
Brecht Van Lommel
brecht at blender.org
Sat Jun 27 03:10:39 CEST 2009
Revision: 21177
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21177
Author: blendix
Date: 2009-06-27 03:10:39 +0200 (Sat, 27 Jun 2009)
Log Message:
-----------
RNA
* Added support for passing collections to/from RNA functions,
this is done using a ListBase of CollectionPointerLink, which
is a standard ListBase link + PointerRNA.
* Added editable active uv/vcol layer to Mesh.
* Armature.bones now includes all bones, not only the ones without
parents.
* Modifier UV layer fields now are allowed to be empty, previously
this would set the name during modifier evaluation if there was
none.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_armature.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_main.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/modifier.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -3543,7 +3543,7 @@
}
}
-static void validate_layer_name(const CustomData *data, int type, char *name)
+static void validate_layer_name(const CustomData *data, int type, char *name, char *outname)
{
int index = -1;
@@ -3556,8 +3556,10 @@
* deleted, so assign the active layer to name
*/
index = CustomData_get_active_layer_index(data, CD_MTFACE);
- strcpy(name, data->layers[index].name);
+ strcpy(outname, data->layers[index].name);
}
+ else
+ strcpy(outname, name);
}
static void get_texture_coords(DisplaceModifierData *dmd, Object *ob,
@@ -3583,13 +3585,12 @@
char *done = MEM_callocN(sizeof(*done) * numVerts,
"get_texture_coords done");
int numFaces = dm->getNumFaces(dm);
+ char uvname[32];
MTFace *tf;
- validate_layer_name(&dm->faceData, CD_MTFACE, dmd->uvlayer_name);
+ validate_layer_name(&dm->faceData, CD_MTFACE, dmd->uvlayer_name, uvname);
+ tf = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, uvname);
- tf = CustomData_get_layer_named(&dm->faceData, CD_MTFACE,
- dmd->uvlayer_name);
-
/* verts are given the UV from the first face that uses them */
for(i = 0, mf = mface; i < numFaces; ++i, ++mf, ++tf) {
if(!done[mf->v1]) {
@@ -3884,6 +3885,7 @@
Projector projectors[MOD_UVPROJECT_MAXPROJECTORS];
int num_projectors = 0;
float aspect;
+ char uvname[32];
if(umd->aspecty != 0) aspect = umd->aspectx / umd->aspecty;
else aspect = 1.0f;
@@ -3898,12 +3900,11 @@
if(!dm->getFaceDataArray(dm, CD_MTFACE)) return dm;
/* make sure we're using an existing layer */
- validate_layer_name(&dm->faceData, CD_MTFACE, umd->uvlayer_name);
+ validate_layer_name(&dm->faceData, CD_MTFACE, umd->uvlayer_name, uvname);
/* make sure we are not modifying the original UV layer */
tface = CustomData_duplicate_referenced_layer_named(&dm->faceData,
- CD_MTFACE,
- umd->uvlayer_name);
+ CD_MTFACE, uvname);
numVerts = dm->getNumVerts(dm);
@@ -5185,13 +5186,12 @@
char *done = MEM_callocN(sizeof(*done) * numVerts,
"get_texture_coords done");
int numFaces = dm->getNumFaces(dm);
+ char uvname[32];
MTFace *tf;
- validate_layer_name(&dm->faceData, CD_MTFACE, wmd->uvlayer_name);
+ validate_layer_name(&dm->faceData, CD_MTFACE, wmd->uvlayer_name, uvname);
+ tf = CustomData_get_layer_named(&dm->faceData, CD_MTFACE, uvname);
- tf = CustomData_get_layer_named(&dm->faceData, CD_MTFACE,
- wmd->uvlayer_name);
-
/* verts are given the UV from the first face that uses them */
for(i = 0, mf = mface; i < numFaces; ++i, ++mf, ++tf) {
if(!done[mf->v1]) {
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -248,8 +248,7 @@
return rna_find_dna_type((const char *)pparm->type);
}
case PROP_COLLECTION: {
- CollectionPropertyRNA *cparm= (CollectionPropertyRNA*)parm;
- return rna_find_dna_type((const char *)cparm->type);
+ return "ListBase";
}
default:
return "<error, no type specified>";
@@ -1116,9 +1115,11 @@
funcname= rna_alloc_function_name(srna->identifier, func->identifier, "call");
+ /* function definition */
fprintf(f, "void %s(bContext *C, ReportList *reports, PointerRNA *_ptr, ParameterList *_parms)", funcname);
fprintf(f, "\n{\n");
+ /* variable definitions */
if((func->flag & FUNC_NO_SELF)==0) {
if(dsrna->dnaname) fprintf(f, "\tstruct %s *_self;\n", dsrna->dnaname);
else fprintf(f, "\tstruct %s *_self;\n", srna->identifier);
@@ -1135,6 +1136,7 @@
fprintf(f, ";\n");
fprintf(f, "\t\n");
+ /* assign self */
if((func->flag & FUNC_NO_SELF)==0) {
if(dsrna->dnaname) fprintf(f, "\t_self= (struct %s *)_ptr->data;\n", dsrna->dnaname);
else fprintf(f, "\t_self= (struct %s *)_ptr->data;\n", srna->identifier);
@@ -1405,6 +1407,7 @@
dsrna= rna_find_struct_def(srna);
func= dfunc->func;
+ /* return type */
for(dparm= dfunc->cont.properties.first; dparm; dparm= dparm->next) {
if(dparm->prop==func->ret) {
if(dparm->prop->arraylength)
@@ -1418,13 +1421,16 @@
}
}
+ /* void if nothing to return */
if(!dparm)
fprintf(f, "void ");
+ /* function name */
fprintf(f, "%s(", dfunc->call);
first= 1;
+ /* self, context and reports parameters */
if((func->flag & FUNC_NO_SELF)==0) {
if(dsrna->dnaname) fprintf(f, "struct %s *_self", dsrna->dnaname);
else fprintf(f, "struct %s *_self", srna->identifier);
@@ -1443,6 +1449,7 @@
fprintf(f, "ReportList *reports");
}
+ /* defined parameters */
for(dparm= dfunc->cont.properties.first; dparm; dparm= dparm->next) {
if(dparm->prop==func->ret)
continue;
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -2457,6 +2457,17 @@
void RNA_parameter_list_free(ParameterList *parms)
{
+ PropertyRNA *parm;
+ int tot;
+
+ parm= parms->func->cont.properties.first;
+ for(tot= 0; parm; parm= parm->next) {
+ if(parm->type == PROP_COLLECTION)
+ BLI_freelistN((ListBase*)((char*)parms->data+tot));
+
+ tot+= rna_parameter_size(parm);
+ }
+
MEM_freeN(parms->data);
parms->data= NULL;
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_armature.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_armature.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_armature.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -443,6 +443,30 @@
else data->flag &= ~BONE_TIPSEL;
}
+static void rna_Armature_bones_next(CollectionPropertyIterator *iter)
+{
+ ListBaseIterator *internal= iter->internal;
+ Bone *bone= (Bone*)internal->link;
+
+ if(bone->childbase.first)
+ internal->link= (Link*)bone->childbase.first;
+ else if(bone->next)
+ internal->link= (Link*)bone->next;
+ else {
+ internal->link= NULL;
+
+ do {
+ bone= bone->parent;
+ if(bone && bone->next) {
+ internal->link= (Link*)bone->next;
+ break;
+ }
+ } while(bone);
+ }
+
+ iter->valid= (internal->link != NULL);
+}
+
#else
static void rna_def_bone_common(StructRNA *srna, int editbone)
@@ -660,6 +684,7 @@
/* Collections */
prop= RNA_def_property(srna, "bones", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "bonebase", NULL);
+ RNA_def_property_collection_funcs(prop, 0, "rna_Armature_bones_next", 0, 0, 0, 0, 0, 0, 0);
RNA_def_property_struct_type(prop, "Bone");
RNA_def_property_ui_text(prop, "Bones", "");
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_constraint.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -534,6 +534,14 @@
srna= RNA_def_struct(brna, "CopyLocationConstraint", "Constraint");
RNA_def_struct_ui_text(srna, "Copy Location Constraint", "Copies the location of the target.");
+
+ RNA_def_struct_sdna(srna, "bConstraint");
+
+ prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_PERCENTAGE);
+ RNA_def_property_float_sdna(prop, NULL, "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);
@@ -582,13 +590,6 @@
RNA_def_property_boolean_sdna(prop, NULL, "flag", LOCLIKE_OFFSET);
RNA_def_property_ui_text(prop, "Offset", "Add original location into copied location.");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
-
- RNA_def_struct_sdna(srna, "bConstraint");
-
- prop= RNA_def_property(srna, "head_tail", PROP_FLOAT, PROP_PERCENTAGE);
- RNA_def_property_float_sdna(prop, NULL, "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");
}
static void rna_def_constraint_minmax(BlenderRNA *brna)
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_main.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_main.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_main.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -264,7 +264,7 @@
{
prop= RNA_def_property(srna, lists[i][0], PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, lists[i][1]);
- RNA_def_property_collection_funcs(prop, lists[i][2], "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0, "add_mesh", "remove_mesh");
+ RNA_def_property_collection_funcs(prop, lists[i][2], "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0, 0, 0);
RNA_def_property_ui_text(prop, lists[i][3], lists[i][4]);
}
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c 2009-06-27 00:40:25 UTC (rev 21176)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c 2009-06-27 01:10:39 UTC (rev 21177)
@@ -234,6 +234,29 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list