forked from bartvdbraak/blender
Outliner:
Added drag-drop support for Groups. On drop in 3d window it creates an instance. Todo: it adds this on 3d cursor position still. The existing drop-object-duplicate operator is a Macro - with warning. For adding on mouse-cursor position we need a better way (new function call, just use operator option).
This commit is contained in:
parent
6edcbb2f7f
commit
3ca00cbf54
@ -802,10 +802,18 @@ void OBJECT_OT_lamp_add(wmOperatorType *ot)
|
|||||||
|
|
||||||
static int group_instance_add_exec(bContext *C, wmOperator *op)
|
static int group_instance_add_exec(bContext *C, wmOperator *op)
|
||||||
{
|
{
|
||||||
Group *group = BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "group"));
|
Group *group;
|
||||||
|
|
||||||
unsigned int layer;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
float loc[3], rot[3];
|
||||||
|
|
||||||
|
if (RNA_struct_property_is_set(op->ptr, "name")) {
|
||||||
|
char name[MAX_ID_NAME - 2];
|
||||||
|
|
||||||
|
RNA_string_get(op->ptr, "name", name);
|
||||||
|
group = (Group *)BKE_libblock_find_name(ID_GR, name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
group = BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "group"));
|
||||||
|
|
||||||
if (!ED_object_add_generic_get_opts(C, op, loc, rot, NULL, &layer, NULL))
|
if (!ED_object_add_generic_get_opts(C, op, loc, rot, NULL, &layer, NULL))
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
@ -847,6 +855,7 @@ void OBJECT_OT_group_instance_add(wmOperatorType *ot)
|
|||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
|
|
||||||
/* properties */
|
/* properties */
|
||||||
|
RNA_def_string(ot->srna, "name", "Group", MAX_ID_NAME - 2, "Name", "Group name to add");
|
||||||
ot->prop = RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, "Group", "");
|
ot->prop = RNA_def_enum(ot->srna, "group", DummyRNA_NULL_items, 0, "Group", "");
|
||||||
RNA_def_enum_funcs(ot->prop, RNA_group_itemf);
|
RNA_def_enum_funcs(ot->prop, RNA_group_itemf);
|
||||||
ED_object_add_generic_props(ot, FALSE);
|
ED_object_add_generic_props(ot, FALSE);
|
||||||
|
@ -466,6 +466,16 @@ static int view3d_ob_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSE
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int view3d_group_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event))
|
||||||
|
{
|
||||||
|
if (drag->type == WM_DRAG_ID) {
|
||||||
|
ID *id = (ID *)drag->poin;
|
||||||
|
if (GS(id->name) == ID_GR)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int view3d_mat_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event))
|
static int view3d_mat_drop_poll(bContext *UNUSED(C), wmDrag *drag, wmEvent *UNUSED(event))
|
||||||
{
|
{
|
||||||
if (drag->type == WM_DRAG_ID) {
|
if (drag->type == WM_DRAG_ID) {
|
||||||
@ -520,6 +530,14 @@ static void view3d_ob_drop_copy(wmDrag *drag, wmDropBox *drop)
|
|||||||
RNA_string_set(drop->ptr, "name", id->name + 2);
|
RNA_string_set(drop->ptr, "name", id->name + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void view3d_group_drop_copy(wmDrag *drag, wmDropBox *drop)
|
||||||
|
{
|
||||||
|
ID *id = (ID *)drag->poin;
|
||||||
|
|
||||||
|
drop->opcontext = WM_OP_EXEC_DEFAULT;
|
||||||
|
RNA_string_set(drop->ptr, "name", id->name + 2);
|
||||||
|
}
|
||||||
|
|
||||||
static void view3d_id_drop_copy(wmDrag *drag, wmDropBox *drop)
|
static void view3d_id_drop_copy(wmDrag *drag, wmDropBox *drop)
|
||||||
{
|
{
|
||||||
ID *id = (ID *)drag->poin;
|
ID *id = (ID *)drag->poin;
|
||||||
@ -547,6 +565,7 @@ static void view3d_dropboxes(void)
|
|||||||
WM_dropbox_add(lb, "OBJECT_OT_drop_named_material", view3d_mat_drop_poll, view3d_id_drop_copy);
|
WM_dropbox_add(lb, "OBJECT_OT_drop_named_material", view3d_mat_drop_poll, view3d_id_drop_copy);
|
||||||
WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_ob_drop_poll, view3d_id_path_drop_copy);
|
WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_ob_drop_poll, view3d_id_path_drop_copy);
|
||||||
WM_dropbox_add(lb, "VIEW3D_OT_background_image_add", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy);
|
WM_dropbox_add(lb, "VIEW3D_OT_background_image_add", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy);
|
||||||
|
WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", view3d_group_drop_poll, view3d_group_drop_copy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user