Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/object/object_add.c')
-rw-r--r--source/blender/editors/object/object_add.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index ee88a192e0a..dea8b13e9cc 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -1693,6 +1693,70 @@ void OBJECT_OT_duplicate(wmOperatorType *ot)
RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
}
+/* **************** add named object, for dragdrop ************* */
+
+/* contextual operator dupli */
+static int add_named_exec(bContext *C, wmOperator *op)
+{
+ Scene *scene= CTX_data_scene(C);
+ Base *basen, *base;
+ Object *ob;
+ int linked= RNA_boolean_get(op->ptr, "linked");
+ int dupflag= (linked)? 0: U.dupflag;
+ char name[32];
+
+ /* find object, create fake base */
+ RNA_string_get(op->ptr, "name", name);
+ ob= (Object *)find_id("OB", name);
+ if(ob==NULL)
+ return OPERATOR_CANCELLED;
+
+ base= MEM_callocN(sizeof(Base), "duplibase");
+ base->object= ob;
+ base->flag= ob->flag;
+
+ /* prepare dupli */
+ clear_id_newpoins();
+ clear_sca_new_poins(); /* sensor/contr/act */
+
+ basen= object_add_duplicate_internal(scene, base, dupflag);
+ basen->lay= basen->object->lay= scene->lay;
+
+ ED_object_location_from_view(C, basen->object->loc);
+ ED_base_object_activate(C, basen);
+
+ copy_object_set_idnew(C, dupflag);
+
+ DAG_scene_sort(scene);
+ DAG_ids_flush_update(0);
+
+ MEM_freeN(base);
+
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
+
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_add_named(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Add Named Object";
+ ot->description = "Add named object.";
+ ot->idname= "OBJECT_OT_add_named";
+
+ /* api callbacks */
+ ot->exec= add_named_exec;
+ ot->poll= ED_operator_scene_editable;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ RNA_def_boolean(ot->srna, "linked", 0, "Linked", "Duplicate object but not object data, linking to the original data.");
+ RNA_def_string(ot->srna, "name", "Cube", 24, "Name", "Object name to add.");
+}
+
+
+
/**************************** Join *************************/
static int join_poll(bContext *C)
{