[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31742] trunk/blender: rna api

Campbell Barton ideasman42 at gmail.com
Fri Sep 3 16:53:54 CEST 2010


Revision: 31742
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31742
Author:   campbellbarton
Date:     2010-09-03 16:53:54 +0200 (Fri, 03 Sep 2010)

Log Message:
-----------
rna api 
- move: material.add_texture(tex, coords, mapto) --> material.texture_slots.add()
- added material.texture_slots.create(index), material.texture_slots.clear(index)
- texture slot functions also work for lamp and world now.

Other minor changes
- allow rna functions to set FUNC_NO_SELF and FUNC_USE_SELF_ID at once.
- [#23317] Changed some operators' RNA to accept lengths, a modification I made to this patch made it not work as intended, removed this edit so unit buttons appier in the UI for certain operators.
- Sphinx doc gen, 2 columns rather then 3, didnt quite fit in some cases.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/io_scene_3ds/import_3ds.py
    trunk/blender/source/blender/blenkernel/BKE_texture.h
    trunk/blender/source/blender/blenkernel/intern/texture.c
    trunk/blender/source/blender/makesrna/intern/makesrna.c
    trunk/blender/source/blender/makesrna/intern/rna_define.c
    trunk/blender/source/blender/makesrna/intern/rna_internal.h
    trunk/blender/source/blender/makesrna/intern/rna_lamp.c
    trunk/blender/source/blender/makesrna/intern/rna_material.c
    trunk/blender/source/blender/makesrna/intern/rna_material_api.c
    trunk/blender/source/blender/makesrna/intern/rna_world.c
    trunk/blender/source/blender/python/doc/sphinx_doc_gen.py

Modified: trunk/blender/release/scripts/op/io_scene_3ds/import_3ds.py
===================================================================
--- trunk/blender/release/scripts/op/io_scene_3ds/import_3ds.py	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/release/scripts/op/io_scene_3ds/import_3ds.py	2010-09-03 14:53:54 UTC (rev 31742)
@@ -183,9 +183,21 @@
     if image:
         texture.image = image
 
-    material.add_texture(texture, "UV", mapto)
+    mtex = material.texture_slots.add()
+    mtex.texture = texture
+    mtex.texture_coords = 'UV'
+    mtex.use_map_color_diffuse = False
 
+    if mapto == 'COLOR':
+        mtex.use_map_color_diffuse = True
+    elif mapto == 'SPECULARITY':
+        mtex.use_map_specular = True
+    elif mapto == 'ALPHA':
+        mtex.use_map_alpha = True
+    elif mapto == 'NORMAL':
+        mtex.use_map_normal = True
 
+
 def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
     #print previous_chunk.bytes_read, 'BYTES READ'
     contextObName = None

Modified: trunk/blender/source/blender/blenkernel/BKE_texture.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_texture.h	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/blenkernel/BKE_texture.h	2010-09-03 14:53:54 UTC (rev 31742)
@@ -70,6 +70,7 @@
 void tex_set_type(struct Tex *tex, int type);
 void default_mtex(struct MTex *mtex);
 struct MTex *add_mtex(void);
+struct MTex *add_mtex_id(struct ID *id, int slot);
 struct Tex *copy_texture(struct Tex *tex);
 void make_local_texture(struct Tex *tex);
 void autotexname(struct Tex *tex);

Modified: trunk/blender/source/blender/blenkernel/intern/texture.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/texture.c	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/blenkernel/intern/texture.c	2010-09-03 14:53:54 UTC (rev 31742)
@@ -689,6 +689,49 @@
 	return mtex;
 }
 
+/* slot -1 for first free ID */
+MTex *add_mtex_id(ID *id, int slot)
+{
+	MTex **mtex_ar;
+	short act;
+
+	give_active_mtex(id, &mtex_ar, &act);
+
+	if(mtex_ar==NULL) {
+		return NULL;
+	}
+	
+	if(slot==-1) {
+		/* find first free */
+		int i;		
+		for (i= 0; i < MAX_MTEX; i++) {
+			if (!mtex_ar[i]) {
+				slot= i;
+				break;
+			}
+		}
+		if(slot == -1) {
+			return NULL;
+		}
+	}
+	else {
+		/* make sure slot is valid */
+		if(slot < 0 || slot >= MAX_MTEX) {
+			return NULL;
+		}
+	}
+
+	if (mtex_ar[slot]) {
+		id_us_min((ID *)mtex_ar[slot]->tex);
+		MEM_freeN(mtex_ar[slot]);
+		mtex_ar[slot]= NULL;
+	}
+
+	mtex_ar[slot]= add_mtex();
+
+	return mtex_ar[slot];
+}
+
 /* ------------------------------------------------------------------------- */
 
 Tex *copy_texture(Tex *tex)

Modified: trunk/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/makesrna.c	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/makesrna/intern/makesrna.c	2010-09-03 14:53:54 UTC (rev 31742)
@@ -1413,10 +1413,12 @@
 	fprintf(f, "\n{\n");
 
 	/* variable definitions */
+	
+	if(func->flag & FUNC_USE_SELF_ID) {
+		fprintf(f, "\tstruct ID *_selfid;\n");
+	}
+
 	if((func->flag & FUNC_NO_SELF)==0) {
-		if(func->flag & FUNC_USE_SELF_ID)
-			fprintf(f, "\tstruct ID *_selfid;\n");
-
 		if(dsrna->dnaname) fprintf(f, "\tstruct %s *_self;\n", dsrna->dnaname);
 		else fprintf(f, "\tstruct %s *_self;\n", srna->identifier);
 	}
@@ -1455,10 +1457,11 @@
 	fprintf(f, "\t\n");
 
 	/* assign self */
+	if(func->flag & FUNC_USE_SELF_ID) {
+		fprintf(f, "\t_selfid= (struct ID*)_ptr->id.data;\n");
+	}
+	
 	if((func->flag & FUNC_NO_SELF)==0) {
-		if(func->flag & FUNC_USE_SELF_ID)
-			fprintf(f, "\t_selfid= (struct ID*)_ptr->id.data;\n");
-
 		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);
 	}
@@ -1521,10 +1524,13 @@
 
 		first= 1;
 
+		if(func->flag & FUNC_USE_SELF_ID) {
+			fprintf(f, "_selfid");
+			first= 0;
+		}
+
 		if((func->flag & FUNC_NO_SELF)==0) {
-			if(func->flag & FUNC_USE_SELF_ID)
-				fprintf(f, "_selfid, ");
-
+			if(!first) fprintf(f, ", ");
 			fprintf(f, "_self");
 			first= 0;
 		}
@@ -1826,10 +1832,13 @@
 	first= 1;
 
 	/* self, context and reports parameters */
+	if(func->flag & FUNC_USE_SELF_ID) {
+		fprintf(f, "struct ID *_selfid");
+		first= 0;		
+	}
+	
 	if((func->flag & FUNC_NO_SELF)==0) {
-		if(func->flag & FUNC_USE_SELF_ID)
-			fprintf(f, "struct ID *_selfid, ");
-
+		if(!first) fprintf(f, ", ");
 		if(dsrna->dnaname) fprintf(f, "struct %s *_self", dsrna->dnaname);
 		else fprintf(f, "struct %s *_self", srna->identifier);
 		first= 0;

Modified: trunk/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_define.c	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/makesrna/intern/rna_define.c	2010-09-03 14:53:54 UTC (rev 31742)
@@ -2207,7 +2207,7 @@
 	PropertyRNA *prop;
 	
 	prop= RNA_def_float_vector(cont_, identifier, len, default_value, hardmin, hardmax, ui_name, ui_description, softmin, softmax);
-	prop->subtype = PROP_XYZ;
+	prop->subtype = PROP_XYZ_LENGTH;
 
 	return prop;
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_internal.h
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_internal.h	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/makesrna/intern/rna_internal.h	2010-09-03 14:53:54 UTC (rev 31742)
@@ -182,7 +182,7 @@
 void rna_def_motionpath_common(struct StructRNA *srna);
 
 void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
-void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *update);
+void rna_def_mtex_common(struct BlenderRNA *brna, struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *structname_slots, const char *update);
 void rna_def_render_layer_common(struct StructRNA *srna, int scene);
 
 void rna_ID_name_get(struct PointerRNA *ptr, char *value);
@@ -352,6 +352,10 @@
 int rna_parameter_size(struct PropertyRNA *parm);
 int rna_parameter_size_alloc(struct PropertyRNA *parm);
 
+// XXX, these should not need to be defined here~!
+struct MTex *rna_mtex_texture_slots_add(struct ID *self, struct ReportList *reports);
+struct MTex *rna_mtex_texture_slots_create(struct ID *self, struct ReportList *reports, int index);
+void rna_mtex_texture_slots_clear(struct ID *self, struct ReportList *reports, int index);
 
 #endif /* RNA_INTERNAL_H */
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_lamp.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_lamp.c	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/makesrna/intern/rna_lamp.c	2010-09-03 14:53:54 UTC (rev 31742)
@@ -386,8 +386,8 @@
 	rna_def_animdata_common(srna);
 	
 	/* textures */
-	rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
-		"rna_Lamp_active_texture_set", "LampTextureSlot", "rna_Lamp_update");
+	rna_def_mtex_common(brna, srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
+		"rna_Lamp_active_texture_set", "LampTextureSlot", "LampTextureSlots", "rna_Lamp_update");
 }
 
 static void rna_def_lamp_falloff(StructRNA *srna)

Modified: trunk/blender/source/blender/makesrna/intern/rna_material.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_material.c	2010-09-03 13:02:35 UTC (rev 31741)
+++ trunk/blender/source/blender/makesrna/intern/rna_material.c	2010-09-03 14:53:54 UTC (rev 31742)
@@ -276,7 +276,55 @@
 	return item;
 }
 
+MTex *rna_mtex_texture_slots_add(ID *self_id, ReportList *reports)
+{
+	MTex *mtex= add_mtex_id(self_id, -1);
+	if (mtex == NULL) {
+		BKE_reportf(reports, RPT_ERROR, "maximum number of textures added %d", MAX_MTEX);
+		return NULL;
+	}
 
+	return mtex;
+}
+
+MTex *rna_mtex_texture_slots_create(ID *self_id, ReportList *reports, int index)
+{
+	MTex *mtex;
+
+	if(index < 0 || index >= MAX_MTEX) {
+		BKE_reportf(reports, RPT_ERROR, "index %d is invalid", index);
+		return NULL;
+	}
+
+	mtex= add_mtex_id(self_id, index);
+
+	return mtex;
+}
+
+void rna_mtex_texture_slots_clear(ID *self_id, ReportList *reports, int index)
+{
+	MTex **mtex_ar;
+	short act;
+
+	give_active_mtex(self_id, &mtex_ar, &act);
+
+	if (mtex_ar == NULL) {
+		BKE_report(reports, RPT_ERROR, "mtex not found for this type");
+		return;
+	}
+	
+	if(index < 0 || index >= MAX_MTEX) {
+		BKE_reportf(reports, RPT_ERROR, "index %d is invalid", index);
+		return;
+	}
+
+	if(mtex_ar[index]) {
+		id_us_min((ID *)mtex_ar[index]->tex);
+		MEM_freeN(mtex_ar[index]);
+		mtex_ar[index]= NULL;
+	}
+}
+
 #else
 
 static void rna_def_material_mtex(BlenderRNA *brna)
@@ -1741,9 +1789,9 @@
 
 	/* common */
 	rna_def_animdata_common(srna);
-	rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",
-		"rna_Material_active_texture_set", "MaterialTextureSlot", "rna_Material_update");
-	
+	rna_def_mtex_common(brna, srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",
+		"rna_Material_active_texture_set", "MaterialTextureSlot", "MaterialTextureSlots", "rna_Material_update");
+
 	/* only material has this one */
 	prop= RNA_def_property(srna, "use_textures", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_negative_sdna(prop, NULL, "septex", 1);
@@ -1768,8 +1816,44 @@
 	RNA_api_material(srna);
 }
 
-void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *update)
+
+/* curve.splines */
+static void rna_def_texture_slots(BlenderRNA *brna, PropertyRNA *cprop, const char *structname, const char *structname_slots)
 {
+	StructRNA *srna;
+
+	FunctionRNA *func;
+	PropertyRNA *parm;
+
+	RNA_def_property_srna(cprop, structname_slots);
+	srna= RNA_def_struct(brna, structname_slots, NULL);
+	RNA_def_struct_sdna(srna, "ID");
+	RNA_def_struct_ui_text(srna, "Texture Slots", "Collection of texture slots");
+
+	/* functions */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list