forked from bartvdbraak/blender
bugfix for [#8256] Creating proxy from linked mesh object removes materials
This commit is contained in:
parent
d00a0e56f6
commit
8a888dbdc7
@ -113,6 +113,8 @@
|
||||
|
||||
#include "BPY_extern.h"
|
||||
|
||||
#include "blendef.h"
|
||||
|
||||
/* Local function protos */
|
||||
static void solve_parenting (Object *ob, Object *par, float obmat[][4], float slowmat[][4], int simul);
|
||||
|
||||
@ -1351,11 +1353,29 @@ void object_make_proxy(Object *ob, Object *target, Object *gob)
|
||||
|
||||
/* skip constraints, constraintchannels, nla? */
|
||||
|
||||
|
||||
/* set object type and link to data */
|
||||
ob->type= target->type;
|
||||
ob->data= target->data;
|
||||
id_us_plus((ID *)ob->data); /* ensures lib data becomes LIB_EXTERN */
|
||||
|
||||
/* copy material and index information */
|
||||
ob->actcol= ob->totcol= 0;
|
||||
if(ob->mat) MEM_freeN(ob->mat);
|
||||
ob->mat = NULL;
|
||||
if ((target->totcol) && (target->mat) && OB_SUPPORT_MATERIAL(ob)) {
|
||||
int i;
|
||||
ob->colbits = target->colbits;
|
||||
|
||||
ob->actcol= target->actcol;
|
||||
ob->totcol= target->totcol;
|
||||
|
||||
ob->mat = MEM_dupallocN(target->mat);
|
||||
for(i=0; i<target->totcol; i++) {
|
||||
/* dont need to run test_object_materials since we know this object is new and not used elsewhere */
|
||||
id_us_plus(ob->mat[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* type conversions */
|
||||
if(target->type == OB_ARMATURE) {
|
||||
copy_object_pose(ob, target); /* data copy, object pointers in constraints */
|
||||
|
@ -101,6 +101,7 @@
|
||||
#define LASTBASE G.scene->base.last
|
||||
#define BASACT (G.scene->basact)
|
||||
#define OBACT (BASACT? BASACT->object: 0)
|
||||
#define OB_SUPPORT_MATERIAL(ob) ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)
|
||||
#define ID_NEW(a) if( (a) && (a)->id.newid ) (a)= (void *)(a)->id.newid
|
||||
#define ID_NEW_US(a) if( (a)->id.newid) {(a)= (void *)(a)->id.newid; (a)->id.us++;}
|
||||
#define ID_NEW_US2(a) if( ((ID *)a)->newid) {(a)= ((ID *)a)->newid; ((ID *)a)->us++;}
|
||||
|
@ -5414,8 +5414,7 @@ static void editing_panel_links(Object *ob)
|
||||
}
|
||||
|
||||
/* now only objects that can be visible rendered */
|
||||
if ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL);
|
||||
else return;
|
||||
if (!OB_SUPPORT_MATERIAL(ob)) return;
|
||||
|
||||
uiSetButLock(object_data_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
|
||||
give_obdata_texspace(ob, &poin, NULL, NULL, NULL);
|
||||
|
@ -3675,7 +3675,7 @@ void copy_attr_menu()
|
||||
strcat (str, "|Object Constraints%x22");
|
||||
strcat (str, "|NLA Strips%x26");
|
||||
|
||||
if ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL) {
|
||||
if (OB_SUPPORT_MATERIAL(ob)) {
|
||||
strcat(str, "|Texture Space%x17");
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user