2.5: Object material slot operators add/remove/assign/select/deselect.
This commit is contained in:
parent
242d9c31d3
commit
a379fdd7fb
|
@ -39,6 +39,8 @@ struct Material;
|
|||
struct ID;
|
||||
struct Object;
|
||||
|
||||
/* materials */
|
||||
|
||||
void init_def_material(void);
|
||||
void free_material(struct Material *sc);
|
||||
void test_object_materials(struct ID *id);
|
||||
|
@ -47,15 +49,22 @@ struct Material *add_material(char *name);
|
|||
struct Material *copy_material(struct Material *ma);
|
||||
void make_local_material(struct Material *ma);
|
||||
|
||||
void automatname(struct Material *);
|
||||
|
||||
/* material slots */
|
||||
|
||||
struct Material ***give_matarar(struct Object *ob);
|
||||
short *give_totcolp(struct Object *ob);
|
||||
struct Material *give_current_material(struct Object *ob, int act);
|
||||
struct ID *material_from(struct Object *ob, int act);
|
||||
void assign_material(struct Object *ob, struct Material *ma, int act);
|
||||
void new_material_to_objectdata(struct Object *ob);
|
||||
|
||||
int find_material_index(struct Object *ob, struct Material *ma);
|
||||
|
||||
void object_add_material_slot(struct Object *ob);
|
||||
void object_remove_material_slot(struct Object *ob);
|
||||
|
||||
/* rendering */
|
||||
|
||||
void init_render_material(struct Material *, int, float *);
|
||||
void init_render_materials(int, float *);
|
||||
|
@ -64,12 +73,8 @@ void end_render_materials(void);
|
|||
|
||||
int material_in_material(struct Material *parmat, struct Material *mat);
|
||||
|
||||
void automatname(struct Material *);
|
||||
void delete_material_index(struct Object *ob);
|
||||
|
||||
void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -615,7 +615,7 @@ int find_material_index(Object *ob, Material *ma)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void new_material_to_objectdata(Object *ob)
|
||||
void object_add_material_slot(Object *ob)
|
||||
{
|
||||
Material *ma;
|
||||
|
||||
|
@ -854,7 +854,7 @@ void automatname(Material *ma)
|
|||
}
|
||||
|
||||
|
||||
void delete_material_index(Object *ob)
|
||||
void object_remove_material_slot(Object *ob)
|
||||
{
|
||||
Material *mao, ***matarar;
|
||||
Object *obt;
|
||||
|
|
|
@ -49,7 +49,6 @@ void FONT_OT_case_toggle(struct wmOperatorType *ot);
|
|||
void FONT_OT_case_set(struct wmOperatorType *ot);
|
||||
void FONT_OT_style_toggle(struct wmOperatorType *ot);
|
||||
void FONT_OT_style_set(struct wmOperatorType *ot);
|
||||
void FONT_OT_material_set(struct wmOperatorType *ot);
|
||||
|
||||
void FONT_OT_text_copy(struct wmOperatorType *ot);
|
||||
void FONT_OT_text_cut(struct wmOperatorType *ot);
|
||||
|
|
|
@ -106,7 +106,6 @@ void ED_operatortypes_curve(void)
|
|||
WM_operatortype_append(FONT_OT_case_set);
|
||||
WM_operatortype_append(FONT_OT_style_toggle);
|
||||
WM_operatortype_append(FONT_OT_style_set);
|
||||
WM_operatortype_append(FONT_OT_material_set);
|
||||
|
||||
WM_operatortype_append(FONT_OT_text_copy);
|
||||
WM_operatortype_append(FONT_OT_text_cut);
|
||||
|
|
|
@ -189,7 +189,7 @@ static short swap_selection_bpoint(BPoint *bp)
|
|||
return select_bpoint(bp, SELECT, 1, VISIBLE);
|
||||
}
|
||||
|
||||
short isNurbsel(Nurb *nu)
|
||||
int isNurbsel(Nurb *nu)
|
||||
{
|
||||
BezTriple *bezt;
|
||||
BPoint *bp;
|
||||
|
|
|
@ -700,50 +700,6 @@ void FONT_OT_style_toggle(wmOperatorType *ot)
|
|||
RNA_def_enum(ot->srna, "style", style_items, CU_BOLD, "Style", "Style to set selection to.");
|
||||
}
|
||||
|
||||
/******************* set material operator ********************/
|
||||
|
||||
static int set_material_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
Curve *cu= obedit->data;
|
||||
EditFont *ef= cu->editfont;
|
||||
int i, mat_nr, selstart, selend;
|
||||
|
||||
if(!BKE_font_getselection(obedit, &selstart, &selend))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if(RNA_property_is_set(op->ptr, "index"))
|
||||
mat_nr= RNA_int_get(op->ptr, "index");
|
||||
else
|
||||
mat_nr= obedit->actcol;
|
||||
|
||||
for(i=selstart; i<=selend; i++)
|
||||
ef->textbufinfo[i].mat_nr = mat_nr;
|
||||
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void FONT_OT_material_set(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Set Material";
|
||||
ot->idname= "FONT_OT_material_set";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= set_material_exec;
|
||||
ot->poll= ED_operator_editfont;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Material Index", "Material slot index.", 0, INT_MAX);
|
||||
}
|
||||
|
||||
/******************* copy text operator ********************/
|
||||
|
||||
static void copy_selection(Object *obedit)
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
struct Base;
|
||||
struct bContext;
|
||||
struct Nurb;
|
||||
struct Object;
|
||||
struct Scene;
|
||||
struct Text;
|
||||
|
@ -52,6 +53,8 @@ void mouse_nurb (struct bContext *C, short mval[2], int extend);
|
|||
|
||||
struct Nurb *add_nurbs_primitive(struct bContext *C, int type, int newname);
|
||||
|
||||
int isNurbsel (struct Nurb *nu);;
|
||||
|
||||
/* editfont.h */
|
||||
void undo_push_font (struct bContext *C, char *name);
|
||||
void make_editText (struct Object *obedit);
|
||||
|
|
|
@ -147,6 +147,9 @@ int EM_init_backbuf_circle(struct ViewContext *vc, short xs, short ys, short r
|
|||
void EM_hide_mesh(struct EditMesh *em, int swap);
|
||||
void EM_reveal_mesh(struct EditMesh *em);
|
||||
|
||||
void EM_select_by_material(struct EditMesh *em, int index);
|
||||
void EM_deselect_by_material(struct EditMesh *em, int index);
|
||||
|
||||
/* editface.c */
|
||||
struct MTFace *EM_get_active_mtface(struct EditMesh *em, struct EditFace **act_efa, struct MCol **mcol, int sloppy);
|
||||
|
||||
|
|
|
@ -1556,7 +1556,7 @@ static int mesh_separate_material(Scene *scene, Base *editbase)
|
|||
/* clear selection, we're going to use that to select material group */
|
||||
EM_clear_flag_all(em, SELECT);
|
||||
/* select the material */
|
||||
editmesh_select_by_material(em, curr_mat);
|
||||
EM_select_by_material(em, curr_mat);
|
||||
/* and now separate */
|
||||
if(0==mesh_separate_selected(scene, editbase)) {
|
||||
BKE_mesh_end_editmesh(me, em);
|
||||
|
|
|
@ -3484,7 +3484,7 @@ void MESH_OT_select_random(wmOperatorType *ot)
|
|||
RNA_def_float_percentage(ot->srna, "percent", 0.5f, 0.0f, 1.0f, "Percent", "Percentage of vertices to select randomly.", 0.0001f, 1.0f);
|
||||
}
|
||||
|
||||
void editmesh_select_by_material(EditMesh *em, int index)
|
||||
void EM_select_by_material(EditMesh *em, int index)
|
||||
{
|
||||
EditFace *efa;
|
||||
|
||||
|
@ -3497,7 +3497,7 @@ void editmesh_select_by_material(EditMesh *em, int index)
|
|||
EM_selectmode_flush(em);
|
||||
}
|
||||
|
||||
void editmesh_deselect_by_material(EditMesh *em, int index)
|
||||
void EM_deselect_by_material(EditMesh *em, int index)
|
||||
{
|
||||
EditFace *efa;
|
||||
|
||||
|
|
|
@ -61,6 +61,12 @@ void buttons_context_draw(const struct bContext *C, struct uiLayout *layout);
|
|||
void buttons_context_register(struct ARegionType *art);
|
||||
|
||||
/* buttons_ops.c */
|
||||
void OBJECT_OT_material_slot_add(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_material_slot_remove(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_material_slot_assign(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_material_slot_select(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_material_slot_deselect(struct wmOperatorType *ot);
|
||||
|
||||
void MATERIAL_OT_new(struct wmOperatorType *ot);
|
||||
void TEXTURE_OT_new(struct wmOperatorType *ot);
|
||||
void WORLD_OT_new(struct wmOperatorType *ot);
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_curve_types.h"
|
||||
#include "DNA_object_types.h"
|
||||
#include "DNA_material_types.h"
|
||||
#include "DNA_texture_types.h"
|
||||
|
@ -37,31 +38,250 @@
|
|||
#include "DNA_world_types.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_depsgraph.h"
|
||||
#include "BKE_font.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_material.h"
|
||||
#include "BKE_texture.h"
|
||||
#include "BKE_utildefines.h"
|
||||
#include "BKE_world.h"
|
||||
|
||||
#include "BLI_editVert.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "ED_curve.h"
|
||||
#include "ED_mesh.h"
|
||||
|
||||
#include "buttons_intern.h" // own include
|
||||
|
||||
/********************** material slot operators *********************/
|
||||
|
||||
static int material_slot_add_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
|
||||
|
||||
if(!ob)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
object_add_material_slot(ob);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void OBJECT_OT_material_slot_add(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Add Material Slot";
|
||||
ot->idname= "OBJECT_OT_material_slot_add";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= material_slot_add_exec;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int material_slot_remove_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
|
||||
|
||||
if(!ob)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
object_remove_material_slot(ob);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void OBJECT_OT_material_slot_remove(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Remove Material Slot";
|
||||
ot->idname= "OBJECT_OT_material_slot_remove";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= material_slot_remove_exec;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int material_slot_assign_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
|
||||
|
||||
if(!ob)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if(ob && ob->actcol>0) {
|
||||
if(ob->type == OB_MESH) {
|
||||
EditMesh *em= ((Mesh*)ob->data)->edit_mesh;
|
||||
EditFace *efa;
|
||||
|
||||
if(em) {
|
||||
for(efa= em->faces.first; efa; efa=efa->next)
|
||||
if(efa->f & SELECT)
|
||||
efa->mat_nr= ob->actcol-1;
|
||||
}
|
||||
}
|
||||
else if(ELEM(ob->type, OB_CURVE, OB_SURF)) {
|
||||
ListBase *editnurb= ((Curve*)ob->data)->editnurb;
|
||||
Nurb *nu;
|
||||
|
||||
if(editnurb) {
|
||||
for(nu= editnurb->first; nu; nu= nu->next)
|
||||
if(isNurbsel(nu))
|
||||
nu->mat_nr= nu->charidx= ob->actcol-1;
|
||||
}
|
||||
}
|
||||
else if(ob->type == OB_FONT) {
|
||||
EditFont *ef= ((Curve*)ob->data)->editfont;
|
||||
int i, selstart, selend;
|
||||
|
||||
if(ef && BKE_font_getselection(ob, &selstart, &selend)) {
|
||||
for(i=selstart; i<=selend; i++)
|
||||
ef->textbufinfo[i].mat_nr = ob->actcol-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, ob);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void OBJECT_OT_material_slot_assign(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Assign Material Slot";
|
||||
ot->idname= "OBJECT_OT_material_slot_assign";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= material_slot_assign_exec;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int material_slot_de_select(bContext *C, int select)
|
||||
{
|
||||
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
|
||||
|
||||
if(!ob)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if(ob->type == OB_MESH) {
|
||||
EditMesh *em= ((Mesh*)ob->data)->edit_mesh;
|
||||
|
||||
if(em) {
|
||||
if(select)
|
||||
EM_select_by_material(em, ob->actcol-1);
|
||||
else
|
||||
EM_deselect_by_material(em, ob->actcol-1);
|
||||
}
|
||||
}
|
||||
else if ELEM(ob->type, OB_CURVE, OB_SURF) {
|
||||
ListBase *editnurb= ((Curve*)ob->data)->editnurb;
|
||||
Nurb *nu;
|
||||
BPoint *bp;
|
||||
BezTriple *bezt;
|
||||
int a;
|
||||
|
||||
for(nu= editnurb->first; nu; nu=nu->next) {
|
||||
if(nu->mat_nr==ob->actcol-1) {
|
||||
if(nu->bezt) {
|
||||
a= nu->pntsu;
|
||||
bezt= nu->bezt;
|
||||
while(a--) {
|
||||
if(bezt->hide==0) {
|
||||
if(select) {
|
||||
bezt->f1 |= SELECT;
|
||||
bezt->f2 |= SELECT;
|
||||
bezt->f3 |= SELECT;
|
||||
}
|
||||
else {
|
||||
bezt->f1 &= ~SELECT;
|
||||
bezt->f2 &= ~SELECT;
|
||||
bezt->f3 &= ~SELECT;
|
||||
}
|
||||
}
|
||||
bezt++;
|
||||
}
|
||||
}
|
||||
else if(nu->bp) {
|
||||
a= nu->pntsu*nu->pntsv;
|
||||
bp= nu->bp;
|
||||
while(a--) {
|
||||
if(bp->hide==0) {
|
||||
if(select) bp->f1 |= SELECT;
|
||||
else bp->f1 &= ~SELECT;
|
||||
}
|
||||
bp++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, ob);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int material_slot_select_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
return material_slot_de_select(C, 1);
|
||||
}
|
||||
|
||||
void OBJECT_OT_material_slot_select(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Material Slot";
|
||||
ot->idname= "OBJECT_OT_material_slot_select";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= material_slot_select_exec;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int material_slot_deselect_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
return material_slot_de_select(C, 0);
|
||||
}
|
||||
|
||||
void OBJECT_OT_material_slot_deselect(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Deselect Material Slot";
|
||||
ot->idname= "OBJECT_OT_material_slot_deselect";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= material_slot_deselect_exec;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/********************** new material operator *********************/
|
||||
|
||||
static int new_material_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
Material *ma;
|
||||
Material *ma= CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
|
||||
Object *ob;
|
||||
PointerRNA ptr;
|
||||
int index;
|
||||
|
||||
/* add or copy material */
|
||||
ptr= CTX_data_pointer_get(C, "material");
|
||||
ma= (RNA_struct_is_a(ptr.type, &RNA_Material))? ptr.data: NULL;
|
||||
|
||||
if(ma)
|
||||
ma= copy_material(ma);
|
||||
else
|
||||
|
@ -70,9 +290,9 @@ static int new_material_exec(bContext *C, wmOperator *op)
|
|||
ma->id.us--; /* compensating for us++ in assign_material */
|
||||
|
||||
/* attempt to assign to material slot */
|
||||
ptr= CTX_data_pointer_get(C, "material_slot");
|
||||
ptr= CTX_data_pointer_get_type(C, "material_slot", &RNA_MaterialSlot);
|
||||
|
||||
if(RNA_struct_is_a(ptr.type, &RNA_MaterialSlot)) {
|
||||
if(ptr.data) {
|
||||
ob= ptr.id.data;
|
||||
index= (Material**)ptr.data - ob->mat;
|
||||
|
||||
|
@ -80,6 +300,8 @@ static int new_material_exec(bContext *C, wmOperator *op)
|
|||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_MATERIAL|NA_ADDED, ma);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
@ -101,15 +323,12 @@ void MATERIAL_OT_new(wmOperatorType *ot)
|
|||
|
||||
static int new_texture_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
Tex *tex= CTX_data_pointer_get_type(C, "texture", &RNA_Texture).data;
|
||||
ID *id;
|
||||
Tex *tex;
|
||||
MTex *mtex;
|
||||
PointerRNA ptr;
|
||||
|
||||
/* add or copy texture */
|
||||
ptr= CTX_data_pointer_get(C, "texture");
|
||||
tex= (RNA_struct_is_a(ptr.type, &RNA_Texture))? ptr.data: NULL;
|
||||
|
||||
if(tex)
|
||||
tex= copy_texture(tex);
|
||||
else
|
||||
|
@ -118,9 +337,9 @@ static int new_texture_exec(bContext *C, wmOperator *op)
|
|||
id_us_min(&tex->id);
|
||||
|
||||
/* attempt to assign to texture slot */
|
||||
ptr= CTX_data_pointer_get(C, "texture_slot");
|
||||
ptr= CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot);
|
||||
|
||||
if(RNA_struct_is_a(ptr.type, &RNA_TextureSlot)) {
|
||||
if(ptr.data) {
|
||||
id= ptr.id.data;
|
||||
mtex= ptr.data;
|
||||
|
||||
|
@ -133,6 +352,8 @@ static int new_texture_exec(bContext *C, wmOperator *op)
|
|||
|
||||
/* XXX nodes, notifier .. */
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_TEXTURE|NA_ADDED, tex);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
@ -154,27 +375,21 @@ void TEXTURE_OT_new(wmOperatorType *ot)
|
|||
|
||||
static int new_world_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
PointerRNA ptr;
|
||||
Scene *scene;
|
||||
World *wo;
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
World *wo= CTX_data_pointer_get_type(C, "world", &RNA_World).data;
|
||||
|
||||
/* add or copy world */
|
||||
ptr= CTX_data_pointer_get(C, "world");
|
||||
wo= (RNA_struct_is_a(ptr.type, &RNA_World))? ptr.data: NULL;
|
||||
|
||||
if(wo)
|
||||
wo= copy_world(wo);
|
||||
else
|
||||
wo= add_world("World");
|
||||
|
||||
/* assign to scene */
|
||||
scene= CTX_data_scene(C);
|
||||
|
||||
if(scene->world)
|
||||
id_us_min(&scene->world->id);
|
||||
scene->world= wo;
|
||||
|
||||
// XXX notifier
|
||||
WM_event_add_notifier(C, NC_WORLD|NA_ADDED, wo);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
|
|
@ -210,6 +210,12 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar)
|
|||
|
||||
void buttons_operatortypes(void)
|
||||
{
|
||||
WM_operatortype_append(OBJECT_OT_material_slot_add);
|
||||
WM_operatortype_append(OBJECT_OT_material_slot_remove);
|
||||
WM_operatortype_append(OBJECT_OT_material_slot_assign);
|
||||
WM_operatortype_append(OBJECT_OT_material_slot_select);
|
||||
WM_operatortype_append(OBJECT_OT_material_slot_deselect);
|
||||
|
||||
WM_operatortype_append(MATERIAL_OT_new);
|
||||
WM_operatortype_append(TEXTURE_OT_new);
|
||||
WM_operatortype_append(WORLD_OT_new);
|
||||
|
|
Loading…
Reference in New Issue