Revision: 53330
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53330
Author:   ton
Date:     2012-12-26 16:24:50 +0000 (Wed, 26 Dec 2012)
Log Message:
-----------
Todo item:

- Drop group into 3d window now puts itself at mouse cursor location.
- Drop objects into 3d window now doesn't move the 3d cursor anymore.

Added new function ED_view3d_cursor3d_position() to handle this,
so the temporarily object-drop operator macro also could go away.
(Which was setting 3d cursor)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/space_view3d/space_view3d.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h    2012-12-26 
14:22:04 UTC (rev 53329)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h    2012-12-26 
16:24:50 UTC (rev 53330)
@@ -85,6 +85,7 @@
 } ViewDepths;
 
 float *give_cursor(struct Scene *scene, struct View3D *v3d);
+void ED_view3d_cursor3d_position(struct bContext *C, float *fp, int mx, int 
my);
 
 void ED_view3d_to_m4(float mat[4][4], const float ofs[3], const float quat[4], 
const float dist);
 void ED_view3d_from_m4(float mat[4][4], float ofs[3], float quat[4], float 
*dist);

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c    2012-12-26 
14:22:04 UTC (rev 53329)
+++ trunk/blender/source/blender/editors/object/object_add.c    2012-12-26 
16:24:50 UTC (rev 53330)
@@ -808,9 +808,16 @@
        
        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);
+               
+               if (0 == RNA_struct_property_is_set(op->ptr, "location")) {
+                       wmEvent *event = CTX_wm_window(C)->eventstate;
+                       ED_object_location_from_view(C, loc);
+                       ED_view3d_cursor3d_position(C, loc, event->x, event->y);
+                       RNA_float_set_array(op->ptr, "location", loc);
+               }
        }
        else
                group = BLI_findlink(&CTX_data_main(C)->group, 
RNA_enum_get(op->ptr, "group"));
@@ -1994,6 +2001,7 @@
 
 static int add_named_exec(bContext *C, wmOperator *op)
 {
+       wmEvent *event = CTX_wm_window(C)->eventstate;
        Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
        Base *basen, *base;
@@ -2026,6 +2034,8 @@
        basen->lay = basen->object->lay = scene->lay;
 
        ED_object_location_from_view(C, basen->object->loc);
+       ED_view3d_cursor3d_position(C, basen->object->loc, event->x, event->y);
+       
        ED_base_object_activate(C, basen);
 
        copy_object_set_idnew(C, dupflag);

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c    2012-12-26 
14:22:04 UTC (rev 53329)
+++ trunk/blender/source/blender/editors/object/object_ops.c    2012-12-26 
16:24:50 UTC (rev 53330)
@@ -252,15 +252,6 @@
                RNA_enum_set(otmacro->ptr, "proportional", PROP_EDIT_OFF);
        }
        
-       /* XXX */
-       ot = WM_operatortype_append_macro("OBJECT_OT_add_named_cursor", "Add 
Named At Cursor",
-                                         "Add named object at cursor", 
OPTYPE_UNDO | OPTYPE_REGISTER);
-       if (ot) {
-               RNA_def_string(ot->srna, "name", "Cube", MAX_ID_NAME - 2, 
"Name", "Object name to add");
-
-               WM_operatortype_macro_define(ot, "VIEW3D_OT_cursor3d");
-               WM_operatortype_macro_define(ot, "OBJECT_OT_add_named");
-       }
 }
 
 static int object_mode_poll(bContext *C)

Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c    
2012-12-26 14:22:04 UTC (rev 53329)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c    
2012-12-26 16:24:50 UTC (rev 53330)
@@ -520,14 +520,8 @@
 static void view3d_ob_drop_copy(wmDrag *drag, wmDropBox *drop)
 {
        ID *id = (ID *)drag->poin;
-       PointerRNA ptr;
 
-       /* need to put name in sub-operator in macro */
-       ptr = RNA_pointer_get(drop->ptr, "OBJECT_OT_add_named");
-       if (ptr.data)
-               RNA_string_set(&ptr, "name", id->name + 2);
-       else
-               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)
@@ -561,7 +555,7 @@
 {
        ListBase *lb = WM_dropboxmap_find("View3D", SPACE_VIEW3D, 
RGN_TYPE_WINDOW);
        
-       WM_dropbox_add(lb, "OBJECT_OT_add_named_cursor", view3d_ob_drop_poll, 
view3d_ob_drop_copy);
+       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);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c     
2012-12-26 14:22:04 UTC (rev 53329)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c     
2012-12-26 16:24:50 UTC (rev 53330)
@@ -3678,17 +3678,21 @@
 
 /* ***************** 3d cursor cursor op ******************* */
 
-/* mx my in region coords */
-static int view3d_cursor3d_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent 
*event)
+/* cursor position in vec, result in vec, mval in region coords */
+/* note: cannot use event->mval here (called by object_add() */
+void ED_view3d_cursor3d_position(bContext *C, float *fp, int mx, int my)
 {
        Scene *scene = CTX_data_scene(C);
        ARegion *ar = CTX_wm_region(C);
        View3D *v3d = CTX_wm_view3d(C);
        RegionView3D *rv3d = CTX_wm_region_view3d(C);
-       float *fp = give_cursor(scene, v3d);
        float mval_fl[2];
+       int mval[2];
        int flip;
 
+       mval[0] = mx - ar->winrct.xmin;
+       mval[1] = my - ar->winrct.ymin;
+       
        flip = initgrabz(rv3d, fp[0], fp[1], fp[2]);
        
        /* reset the depth based on the view offset (we _know_ the offset is 
infront of us) */
@@ -3703,20 +3707,20 @@
 
                if (U.uiflag & USER_ZBUF_CURSOR) {  /* maybe this should be 
accessed some other way */
                        view3d_operator_needs_opengl(C);
-                       if (ED_view3d_autodist(scene, ar, v3d, event->mval, fp))
+                       if (ED_view3d_autodist(scene, ar, v3d, mval, fp))
                                depth_used = TRUE;
                }
 
                if (depth_used == FALSE) {
                        float dvec[3];
-                       VECSUB2D(mval_fl, mval_fl, event->mval);
+                       VECSUB2D(mval_fl, mval_fl, mval);
                        ED_view3d_win_to_delta(ar, mval_fl, dvec);
                        sub_v3_v3(fp, dvec);
                }
        }
        else {
-               const float dx = ((float)(event->mval[0] - (ar->winx / 2))) * 
rv3d->zfac / (ar->winx / 2);
-               const float dy = ((float)(event->mval[1] - (ar->winy / 2))) * 
rv3d->zfac / (ar->winy / 2);
+               const float dx = ((float)(mval[0] - (ar->winx / 2))) * 
rv3d->zfac / (ar->winx / 2);
+               const float dy = ((float)(mval[1] - (ar->winy / 2))) * 
rv3d->zfac / (ar->winy / 2);
                const float fz = (rv3d->persmat[0][3] * fp[0] +
                                  rv3d->persmat[1][3] * fp[1] +
                                  rv3d->persmat[2][3] * fp[2] +
@@ -3727,11 +3731,21 @@
                fp[2] = (rv3d->persinv[0][2] * dx + rv3d->persinv[1][2] * dy + 
rv3d->persinv[2][2] * fz) - rv3d->ofs[2];
        }
 
+}
+
+static int view3d_cursor3d_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent 
*event)
+{
+       Scene *scene = CTX_data_scene(C);
+       View3D *v3d = CTX_wm_view3d(C);
+       float *fp = give_cursor(scene, v3d);
+
+       ED_view3d_cursor3d_position(C, fp, event->x, event->y);
+       
        if (v3d && v3d->localvd)
                WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d);
        else
                WM_event_add_notifier(C, NC_SCENE | NA_EDITED, scene);
-
+       
        return OPERATOR_FINISHED;
 }
 

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to