[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