[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40734] trunk/blender/source/blender/ blenkernel: BKE material api function: assign_material_id, like assign_material but takes the object data rather then the object.

Campbell Barton ideasman42 at gmail.com
Sat Oct 1 19:51:48 CEST 2011


Revision: 40734
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40734
Author:   campbellbarton
Date:     2011-10-01 17:51:47 +0000 (Sat, 01 Oct 2011)
Log Message:
-----------
BKE material api function: assign_material_id, like assign_material but takes the object data rather then the object.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_material.h
    trunk/blender/source/blender/blenkernel/intern/material.c

Modified: trunk/blender/source/blender/blenkernel/BKE_material.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_material.h	2011-10-01 15:54:36 UTC (rev 40733)
+++ trunk/blender/source/blender/blenkernel/BKE_material.h	2011-10-01 17:51:47 UTC (rev 40734)
@@ -71,6 +71,7 @@
 
 struct Material *give_current_material(struct Object *ob, short act);
 struct ID *material_from(struct Object *ob, short act);
+void assign_material_id(struct ID *id, struct Material *ma, short act);
 void assign_material(struct Object *ob, struct Material *ma, short act);
 void assign_matarar(struct Object *ob, struct Material ***matar, short totcol);
 

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2011-10-01 15:54:36 UTC (rev 40733)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2011-10-01 17:51:47 UTC (rev 40734)
@@ -723,6 +723,48 @@
 	}
 }
 
+void assign_material_id(ID *id, Material *ma, short act)
+{
+	Material *mao, **matar, ***matarar;
+	short *totcolp;
+
+	if(act>MAXMAT) return;
+	if(act<1) act= 1;
+
+	/* prevent crashing when using accidentally */
+	BLI_assert(id->lib == NULL);
+	if(id->lib) return;
+
+	/* test arraylens */
+
+	totcolp= give_totcolp_id(id);
+	matarar= give_matarar_id(id);
+
+	if(totcolp==NULL || matarar==NULL) return;
+
+	if(act > *totcolp) {
+		matar= MEM_callocN(sizeof(void *)*act, "matarray1");
+
+		if(*totcolp) {
+			memcpy(matar, *matarar, sizeof(void *)*(*totcolp));
+			MEM_freeN(*matarar);
+		}
+
+		*matarar= matar;
+		*totcolp= act;
+	}
+
+	/* in data */
+	mao= (*matarar)[act-1];
+	if(mao) mao->id.us--;
+	(*matarar)[act-1]= ma;
+
+	if(ma)
+		id_us_plus((ID *)ma);
+
+	test_object_materials(id);
+}
+
 void assign_material(Object *ob, Material *ma, short act)
 {
 	Material *mao, **matar, ***matarar;




More information about the Bf-blender-cvs mailing list