[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