[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54825] trunk/blender/source/blender/ editors: patch [#34411] Patch for image drag and drop to create Empty rather than BG image

Campbell Barton ideasman42 at gmail.com
Mon Feb 25 00:18:22 CET 2013


Revision: 54825
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54825
Author:   campbellbarton
Date:     2013-02-24 23:18:21 +0000 (Sun, 24 Feb 2013)
Log Message:
-----------
patch [#34411] Patch for image drag and drop to create Empty rather than BG image
from Kevin Mackay (yakca)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_intern.h
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2013-02-24 21:51:48 UTC (rev 54824)
+++ trunk/blender/source/blender/editors/object/object_add.c	2013-02-24 23:18:21 UTC (rev 54825)
@@ -67,6 +67,7 @@
 #include "BKE_displist.h"
 #include "BKE_effect.h"
 #include "BKE_group.h"
+#include "BKE_image.h"
 #include "BKE_lamp.h"
 #include "BKE_lattice.h"
 #include "BKE_library.h"
@@ -735,6 +736,79 @@
 	ED_object_add_generic_props(ot, FALSE);
 }
 
+static int empty_drop_named_image_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	Base *base = NULL;
+	Image *ima = NULL;
+	Object *ob = NULL;
+
+	/* check image input variables */
+	if (RNA_struct_property_is_set(op->ptr, "filepath")) {
+		char path[FILE_MAX];
+
+		RNA_string_get(op->ptr, "filepath", path);
+		ima = BKE_image_load_exists(path);
+	}
+	else if (RNA_struct_property_is_set(op->ptr, "name")) {
+		char name[MAX_ID_NAME - 2];
+
+		RNA_string_get(op->ptr, "name", name);
+		ima = (Image *)BKE_libblock_find_name(ID_IM, name);
+	}
+
+	if (ima == NULL) {
+		BKE_report(op->reports, RPT_ERROR, "Not an image");
+		return OPERATOR_CANCELLED;
+	}
+
+	base = ED_view3d_give_base_under_cursor(C, event->mval);
+
+	/* if empty under cursor, then set object */
+	if (base && base->object->type == OB_EMPTY) {
+		ob = base->object;
+		WM_event_add_notifier(C, NC_SCENE | ND_OB_ACTIVE, CTX_data_scene(C));
+	}
+	else {
+		/* add new empty */
+		unsigned int layer;
+		float loc[3], rot[3];
+
+		if (!ED_object_add_generic_get_opts(C, op, loc, rot, NULL, &layer, NULL))
+			return OPERATOR_CANCELLED;
+
+		ob = ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer);
+		ob->empty_drawtype = OB_EMPTY_IMAGE;
+	}
+
+	ob->data = ima;
+
+ 	return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_drop_named_image(wmOperatorType *ot)
+{
+	PropertyRNA *prop;
+
+	/* identifiers */
+	ot->name = "Add Empty Image/Drop Image To Empty";
+	ot->description = "Add an empty image type to scene with data";
+	ot->idname = "OBJECT_OT_drop_named_image";
+
+	/* api callbacks */
+	ot->invoke = empty_drop_named_image_invoke;
+	ot->poll = ED_operator_objectmode;
+
+	/* flags */
+	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+	/* properties */
+	prop = RNA_def_string(ot->srna, "filepath", "", FILE_MAX, "Filepath", "Path to image file");
+	RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
+	prop = RNA_def_string(ot->srna, "name", "", MAX_ID_NAME - 2, "Name", "Image name to assign");
+	RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
+	ED_object_add_generic_props(ot, FALSE);
+}
+
 /********************* Add Lamp Operator ********************/
 
 static const char *get_lamp_defname(int type)

Modified: trunk/blender/source/blender/editors/object/object_intern.h
===================================================================
--- trunk/blender/source/blender/editors/object/object_intern.h	2013-02-24 21:51:48 UTC (rev 54824)
+++ trunk/blender/source/blender/editors/object/object_intern.h	2013-02-24 23:18:21 UTC (rev 54825)
@@ -113,6 +113,7 @@
 void OBJECT_OT_text_add(struct wmOperatorType *ot);
 void OBJECT_OT_armature_add(struct wmOperatorType *ot);
 void OBJECT_OT_empty_add(struct wmOperatorType *ot);
+void OBJECT_OT_drop_named_image(struct wmOperatorType *ot);
 void OBJECT_OT_lamp_add(struct wmOperatorType *ot);
 void OBJECT_OT_effector_add(struct wmOperatorType *ot);
 void OBJECT_OT_camera_add(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2013-02-24 21:51:48 UTC (rev 54824)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2013-02-24 23:18:21 UTC (rev 54825)
@@ -114,6 +114,7 @@
 	WM_operatortype_append(OBJECT_OT_text_add);
 	WM_operatortype_append(OBJECT_OT_armature_add);
 	WM_operatortype_append(OBJECT_OT_empty_add);
+	WM_operatortype_append(OBJECT_OT_drop_named_image);
 	WM_operatortype_append(OBJECT_OT_lamp_add);
 	WM_operatortype_append(OBJECT_OT_camera_add);
 	WM_operatortype_append(OBJECT_OT_speaker_add);

Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-02-24 21:51:48 UTC (rev 54824)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c	2013-02-24 23:18:21 UTC (rev 54825)
@@ -619,16 +619,17 @@
 
 	if ((dflag & DRAW_CONSTCOLOR) == 0) {
 		glColor3ubv(ob_wire_col);
-
-		/* Calculate the outline vertex positions */
-		glBegin(GL_LINE_LOOP);
-		glVertex2f(ofs_x, ofs_y);
-		glVertex2f(ofs_x + ima_x, ofs_y);
-		glVertex2f(ofs_x + ima_x, ofs_y + ima_y);
-		glVertex2f(ofs_x, ofs_y + ima_y);
-		glEnd();
 	}
 
+	/* Calculate the outline vertex positions */
+	glBegin(GL_LINE_LOOP);
+	glVertex2f(ofs_x, ofs_y);
+	glVertex2f(ofs_x + ima_x, ofs_y);
+	glVertex2f(ofs_x + ima_x, ofs_y + ima_y);
+	glVertex2f(ofs_x, ofs_y + ima_y);
+	glEnd();
+
+
 	/* Reset GL settings */
 	glMatrixMode(GL_MODELVIEW);
 	glPopMatrix();

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2013-02-24 21:51:48 UTC (rev 54824)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c	2013-02-24 23:18:21 UTC (rev 54825)
@@ -514,22 +514,24 @@
 }
 
 
-static int view3d_ima_bg_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
+static int view3d_ima_empty_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
 {
-	if (ED_view3d_give_base_under_cursor(C, event->mval) ) {
-		return 0;
-	}
-	return view3d_ima_drop_poll(C, drag, event);
-}
+	Base *base = ED_view3d_give_base_under_cursor(C, event->mval);
 
-static int view3d_ima_ob_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
-{
-	if (ED_view3d_give_base_under_cursor(C, event->mval) ) {
+	if (!base || (base && base->object->type == OB_EMPTY))
 		return view3d_ima_drop_poll(C, drag, event);
-	}
 	return 0;
 }
 
+static int view3d_ima_mesh_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
+{
+	Base *base = ED_view3d_give_base_under_cursor(C, event->mval);
+
+	if (base && base->object->type == OB_MESH)
+ 		return view3d_ima_drop_poll(C, drag, event);
+ 	return 0;
+}
+
 static void view3d_ob_drop_copy(wmDrag *drag, wmDropBox *drop)
 {
 	ID *id = (ID *)drag->poin;
@@ -570,8 +572,8 @@
 	
 	WM_dropbox_add(lb, "OBJECT_OT_add_named", view3d_ob_drop_poll, view3d_ob_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, "VIEW3D_OT_background_image_add", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy);
+	WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_mesh_drop_poll, view3d_id_path_drop_copy);
+	WM_dropbox_add(lb, "OBJECT_OT_drop_named_image", view3d_ima_empty_drop_poll, view3d_id_path_drop_copy);
 	WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", view3d_group_drop_poll, view3d_group_drop_copy);
 }
 




More information about the Bf-blender-cvs mailing list