[Bf-blender-cvs] [a399445b3c5] xr-actions-D9124: XR: Fix projection selection in edit mode

Peter Kim noreply at git.blender.org
Fri Nov 6 15:59:04 CET 2020


Commit: a399445b3c525089f8980c8a11a6175080f44e5f
Author: Peter Kim
Date:   Fri Nov 6 23:53:59 2020 +0900
Branches: xr-actions-D9124
https://developer.blender.org/rBa399445b3c525089f8980c8a11a6175080f44e5f

XR: Fix projection selection in edit mode

Use window region dimensions instead of XR surface dimensions. Add
winrct offset for box select.

===================================================================

M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/transform/transform_ops.c
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_event_query.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_gesture_ops.c
M	source/blender/windowmanager/xr/intern/wm_xr_draw.c
M	source/blender/windowmanager/xr/intern/wm_xr_intern.h
M	source/blender/windowmanager/xr/intern/wm_xr_session.c

===================================================================

diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 82c9a8523b3..4fe6fe4108e 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -2513,6 +2513,7 @@ static int view3d_select_invoke_3d(bContext *C, wmOperator *op, const wmEvent *e
   BLI_assert(event->custom == EVT_DATA_XR);
   BLI_assert(event->customdata);
 
+  const wmXrActionData *actiondata = event->customdata;
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
   Scene *scene = CTX_data_scene(C);
   View3D *v3d = CTX_wm_view3d(C);
@@ -2520,58 +2521,38 @@ static int view3d_select_invoke_3d(bContext *C, wmOperator *op, const wmEvent *e
   RegionView3D *rv3d = region->regiondata;
   wmWindowManager *wm = CTX_wm_manager(C);
   wmXrData *xr = &wm->xr;
-  wmXrActionData *customdata = event->customdata;
-  short winx_prev, winy_prev;
-  rcti winrct_prev;
   float lens_prev;
   float clip_start_prev, clip_end_prev;
   float viewmat_prev[4][4];
   int mval[2];
   int retval;
 
-#if 1
-  /* TODO_XR: Currently fails in edit mode. */
-  if (CTX_data_edit_object(C)) {
-    return OPERATOR_FINISHED;
-  }
-#endif
-
   /* Since this function is called in a window context, we need to replace the
    * window view parameters with the XR surface counterparts to get a correct
    * result for GPU select. */
-  winx_prev = region->winx;
-  winy_prev = region->winy;
-  winrct_prev = region->winrct;
   lens_prev = v3d->lens;
   clip_start_prev = v3d->clip_start;
   clip_end_prev = v3d->clip_end;
   copy_m4_m4(viewmat_prev, rv3d->viewmat);
 
-  region->winrct.xmin = 0;
-  region->winrct.ymin = 0;
-  region->winrct.xmax = region->winx = customdata->eye_width;
-  region->winrct.ymax = region->winy = customdata->eye_height;
-  v3d->lens = customdata->eye_lens;
+  v3d->lens = actiondata->eye_lens;
   v3d->clip_start = xr->session_settings.clip_start;
   v3d->clip_end = xr->session_settings.clip_end;
-  copy_m4_m4(rv3d->viewmat, customdata->eye_viewmat);
-  view3d_winmatrix_set(depsgraph, region, v3d, NULL);
+  ED_view3d_update_viewmat(
+      depsgraph, scene, v3d, region, actiondata->eye_viewmat, NULL, NULL, false);
 
   map_to_pixel(mval,
-               customdata->controller_loc,
-               customdata->eye_viewmat,
+               actiondata->controller_loc,
+               actiondata->eye_viewmat,
                rv3d->winmat,
-               customdata->eye_width,
-               customdata->eye_height);
+               region->winx,
+               region->winy);
 
   RNA_int_set_array(op->ptr, "location", mval);
 
   retval = view3d_select_exec(C, op);
 
   /* Restore window view. */
-  region->winx = winx_prev;
-  region->winy = winy_prev;
-  region->winrct = winrct_prev;
   v3d->lens = lens_prev;
   v3d->clip_start = clip_start_prev;
   v3d->clip_end = clip_end_prev;
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 1ec27853d41..9cfbfd9b8af 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -487,8 +487,6 @@ static int transform_modal_3d(bContext *C, wmOperator *op, const wmEvent *event)
   RegionView3D *rv3d = region->regiondata;
   wmWindowManager *wm = CTX_wm_manager(C);
   wmXrData *xr = &wm->xr;
-  short winx_prev, winy_prev;
-  rcti winrct_prev;
   float lens_prev;
   float clip_start_prev, clip_end_prev;
   float viewmat_prev[4][4];
@@ -498,18 +496,11 @@ static int transform_modal_3d(bContext *C, wmOperator *op, const wmEvent *event)
   memcpy(&event_mut, event, sizeof(wmEvent));
 
   /* Replace window view parameters with XR surface counterparts. */
-  winx_prev = region->winx;
-  winy_prev = region->winy;
-  winrct_prev = region->winrct;
   lens_prev = v3d->lens;
   clip_start_prev = v3d->clip_start;
   clip_end_prev = v3d->clip_end;
   copy_m4_m4(viewmat_prev, rv3d->viewmat);
 
-  region->winrct.xmin = 0;
-  region->winrct.ymin = 0;
-  region->winrct.xmax = region->winx = actiondata->eye_width;
-  region->winrct.ymax = region->winy = actiondata->eye_height;
   v3d->lens = actiondata->eye_lens;
   v3d->clip_start = xr->session_settings.clip_start;
   v3d->clip_end = xr->session_settings.clip_end;
@@ -519,8 +510,8 @@ static int transform_modal_3d(bContext *C, wmOperator *op, const wmEvent *event)
                actiondata->controller_loc,
                t->viewmat,
                rv3d->winmat,
-               actiondata->eye_width,
-               actiondata->eye_height);
+               region->winx,
+               region->winy);
 
   if (event->val == KM_PRESS) {
     event_mut.type = MOUSEMOVE;
@@ -536,9 +527,6 @@ static int transform_modal_3d(bContext *C, wmOperator *op, const wmEvent *event)
   retval = transform_modal(C, op, &event_mut);
 
   /* Restore window view. */
-  region->winx = winx_prev;
-  region->winy = winy_prev;
-  region->winrct = winrct_prev;
   v3d->lens = lens_prev;
   v3d->clip_start = clip_start_prev;
   v3d->clip_end = clip_end_prev;
@@ -620,8 +608,6 @@ static int transform_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event
   RegionView3D *rv3d = region->regiondata;
   wmWindowManager *wm = CTX_wm_manager(C);
   wmXrData *xr = &wm->xr;
-  short winx_prev, winy_prev;
-  rcti winrct_prev;
   float lens_prev;
   float clip_start_prev, clip_end_prev;
   float viewmat_prev[4][4];
@@ -632,18 +618,11 @@ static int transform_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event
   event_mut.type = LEFTMOUSE;
 
   /* Replace window view parameters with XR surface counterparts. */
-  winx_prev = region->winx;
-  winy_prev = region->winy;
-  winrct_prev = region->winrct;
   lens_prev = v3d->lens;
   clip_start_prev = v3d->clip_start;
   clip_end_prev = v3d->clip_end;
   copy_m4_m4(viewmat_prev, rv3d->viewmat);
 
-  region->winrct.xmin = 0;
-  region->winrct.ymin = 0;
-  region->winrct.xmax = region->winx = actiondata->eye_width;
-  region->winrct.ymax = region->winy = actiondata->eye_height;
   v3d->lens = actiondata->eye_lens;
   v3d->clip_start = xr->session_settings.clip_start;
   v3d->clip_end = xr->session_settings.clip_end;
@@ -654,15 +633,12 @@ static int transform_invoke_3d(bContext *C, wmOperator *op, const wmEvent *event
                actiondata->controller_loc,
                actiondata->eye_viewmat,
                rv3d->winmat,
-               actiondata->eye_width,
-               actiondata->eye_height);
+               region->winx,
+               region->winy);
 
   retval = transform_invoke(C, op, &event_mut);
 
   /* Restore window view. */
-  region->winx = winx_prev;
-  region->winy = winy_prev;
-  region->winrct = winrct_prev;
   v3d->lens = lens_prev;
   v3d->clip_start = clip_start_prev;
   v3d->clip_end = clip_end_prev;
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 0b104d1290f..38c35dbcd9c 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -693,7 +693,7 @@ static void rna_Event_xr_action_set_get(PointerRNA *ptr, char *value)
 {
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
-    WM_event_xr_data(event, &value, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+    WM_event_xr_data(event, &value, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
   }
   else {
     value[0] = '\0';
@@ -716,7 +716,7 @@ static void rna_Event_xr_action_get(PointerRNA *ptr, char *value)
 {
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
-    WM_event_xr_data(event, NULL, &value, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+    WM_event_xr_data(event, NULL, &value, NULL, NULL, NULL, NULL, NULL, NULL);
   }
   else {
     value[0] = '\0';
@@ -740,8 +740,7 @@ static int rna_Event_xr_type_get(PointerRNA *ptr)
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
     int type;
-    WM_event_xr_data(
-        event, NULL, NULL, (char *)&type, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+    WM_event_xr_data(event, NULL, NULL, (char *)&type, NULL, NULL, NULL, NULL, NULL);
     return type;
   }
   else {
@@ -753,7 +752,7 @@ static void rna_Event_xr_state_get(PointerRNA *ptr, float *value)
 {
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
-    WM_event_xr_data(event, NULL, NULL, NULL, value, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+    WM_event_xr_data(event, NULL, NULL, NULL, value, NULL, NULL, NULL, NULL);
   }
   else {
     memset(value, 0, sizeof(float[2]));
@@ -764,7 +763,7 @@ static void rna_Event_xr_controller_location_get(PointerRNA *ptr, float *value)
 {
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
-    WM_event_xr_data(event, NULL, NULL, NULL, NULL, value, NULL, NULL, NULL, NULL, NULL, NULL);
+    WM_event_xr_data(event, NULL, NULL, NULL, NULL, value, NULL, NULL, NULL);
   }
   else {
     memset(value, 0, sizeof(float[3]));
@@ -775,7 +774,7 @@ static void rna_Event_xr_controller_rotation_get(PointerRNA *ptr, float *value)
 {
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
-    WM_event_xr_data(event, NULL, NULL, NULL, NULL, NULL, value, NULL, NULL, NULL, NULL, NULL);
+    WM_event_xr_data(event, NULL, NULL, NULL, NULL, NULL, value, NULL, NULL);
   }
   else {
     value[0] = 1.0f;
@@ -783,29 +782,14 @@ static void rna_Event_xr_controller_rotation_get(PointerRNA *ptr, float *value)
   }
 }
 
-static int rna_Event_xr_viewport_width_get(PointerRNA *ptr)
-{
-  const wmEvent *event = ptr->data;
-  if (WM_event_is_xr(event)) {
-    int width;
-    WM_event_xr_data(event, NULL, NULL, NULL, NULL, NULL, NULL, &width, NULL, NULL, NULL, NULL);
-    return width;
-  }
-  else {
-    return 0;
-  }
-}
-
-static int rna_Event_xr_viewport_height_get(PointerRNA *ptr)
+static void rna_Event_xr_view_matrix_get(PointerRNA *ptr, float values[16])
 {
   const wmEvent *event = ptr->data;
   if (WM_event_is_xr(event)) {
-    int height;
-    WM_event_xr_data(event, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &height, NULL, NULL, NULL);
-    return height;
+    WM_event_xr_data(event, NULL, NULL, NULL, NULL, NULL, NULL, (float(*)[4

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list