Hi, As far as I'm aware there's currently no way to customise built in UI handlers like this one. For this one in particular, I really don't think it's a problem, it's very simple. But I'm guessing this response comes from frustration with the ndof 3D View navigation, and if so I agree with you, I don't find it usable at the moment. On a quick glance that's an operator so it might be possible to do that with a modal keymap. I'll be away for a little while but I can possibly take a look at that if I have free time when I return.
cheers Matt On Fri, Nov 4, 2011 at 2:38 PM, Daniel Salazar - 3Developer.com < [email protected]> wrote: > It's not a matter of sensitivity, what happens is everyone has a different > way to use the device: tilt vs pan vs roll vs inverted axis. Currently > everyone just adds what ever they feel it's best but why can't this be > configurable like keymaps are? > > Daniel Salazar > 3Developer.com > > > On Thu, Nov 3, 2011 at 9:30 PM, Campbell Barton <[email protected] > >wrote: > > > Do you mean configure sensitivity or disable options like this? > > > > On Fri, Nov 4, 2011 at 1:41 PM, Daniel Salazar - 3Developer.com > > <[email protected]> wrote: > > > Gah all this seriously needs to be configurable, what a mess if > everyone > > > just ads their own preferences > > > > > > Daniel Salazar > > > 3Developer.com > > > > > > > > > On Thu, Nov 3, 2011 at 8:31 PM, Matt Ebb <[email protected]> wrote: > > > > > >> Revision: 41508 > > >> > > >> > > > http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41508 > > >> Author: broken > > >> Date: 2011-11-04 02:31:00 +0000 (Fri, 04 Nov 2011) > > >> Log Message: > > >> ----------- > > >> Enabled ndof devices for controlling colour wheel and cube UI controls > > >> (eg. colour pickers). Tilting the ndof device up and down and rolling > it > > >> left and > > >> right will move the 'colour cursor' in screen x and y, and twisting > the > > >> ndof device > > >> will rotate the cursor around the colour wheel (hue). Now you can turn > > off > > >> the > > >> lights and pretend you have a fancy DI deck! > > >> > > >> Modified Paths: > > >> -------------- > > >> trunk/blender/source/blender/editors/interface/interface_handlers.c > > >> > > >> Modified: > > >> trunk/blender/source/blender/editors/interface/interface_handlers.c > > >> =================================================================== > > >> --- > trunk/blender/source/blender/editors/interface/interface_handlers.c > > >> 2011-11-04 01:15:04 UTC (rev 41507) > > >> +++ > trunk/blender/source/blender/editors/interface/interface_handlers.c > > >> 2011-11-04 02:31:00 UTC (rev 41508) > > >> @@ -3216,6 +3216,63 @@ > > >> return changed; > > >> } > > >> > > >> +static void ui_ndofedit_but_HSVCUBE(uiBut *but, uiHandleButtonData > > *data, > > >> wmNDOFMotionData *ndof, int shift) > > >> +{ > > >> + float *hsv= ui_block_hsv_get(but->block); > > >> + float rgb[3]; > > >> + float sensitivity = (shift?0.15:0.3) * ndof->dt; > > >> + > > >> + int color_profile = but->block->color_profile; > > >> + > > >> + if (but->rnaprop) { > > >> + if (RNA_property_subtype(but->rnaprop) == > > PROP_COLOR_GAMMA) > > >> + color_profile = BLI_PR_NONE; > > >> + } > > >> + > > >> + ui_get_but_vectorf(but, rgb); > > >> + rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2); > > >> + > > >> + switch((int)but->a1) { > > >> + case UI_GRAD_SV: > > >> + hsv[2] += ndof->ry * sensitivity; > > >> + hsv[1] += ndof->rx * sensitivity; > > >> + break; > > >> + case UI_GRAD_HV: > > >> + hsv[0] += ndof->ry * sensitivity; > > >> + hsv[2] += ndof->rx * sensitivity; > > >> + break; > > >> + case UI_GRAD_HS: > > >> + hsv[0] += ndof->ry * sensitivity; > > >> + hsv[1] += ndof->rx * sensitivity; > > >> + break; > > >> + case UI_GRAD_H: > > >> + hsv[0] += ndof->ry * sensitivity; > > >> + break; > > >> + case UI_GRAD_S: > > >> + hsv[1] += ndof->ry * sensitivity; > > >> + break; > > >> + case UI_GRAD_V: > > >> + hsv[2] += ndof->ry * sensitivity; > > >> + break; > > >> + case UI_GRAD_V_ALT: > > >> + /* vertical 'value' strip */ > > >> + > > >> + /* exception only for value strip - use the > > range > > >> set in but->min/max */ > > >> + hsv[2] += ndof->rx * sensitivity; > > >> + > > >> + if (color_profile) > > >> + hsv[2] = srgb_to_linearrgb(hsv[2]); > > >> + > > >> + CLAMP(hsv[2], but->softmin, but->softmax); > > >> + default: > > >> + assert(!"invalid hsv type"); > > >> + } > > >> + > > >> + hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); > > >> + copy_v3_v3(data->vec, rgb); > > >> + ui_set_but_vectorf(but, data->vec); > > >> +} > > >> + > > >> static int ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, > > >> uiHandleButtonData *data, wmEvent *event) > > >> { > > >> int mx, my; > > >> @@ -3238,6 +3295,16 @@ > > >> > > >> return WM_UI_HANDLER_BREAK; > > >> } > > >> + else if (event->type == NDOF_MOTION) { > > >> + wmNDOFMotionData *ndof = (wmNDOFMotionData*) > > >> event->customdata; > > >> + > > >> + ui_ndofedit_but_HSVCUBE(but, data, ndof, > > >> event->shift); > > >> + > > >> + button_activate_state(C, but, > > BUTTON_STATE_EXIT); > > >> + ui_apply_button(C, but->block, but, data, 1); > > >> + > > >> + return WM_UI_HANDLER_BREAK; > > >> + } > > >> /* XXX hardcoded keymap check.... */ > > >> else if (ELEM(event->type, ZEROKEY, PAD0) && event->val > > == > > >> KM_PRESS) { > > >> if (but->a1==UI_GRAD_V_ALT){ > > >> @@ -3337,11 +3404,62 @@ > > >> return changed; > > >> } > > >> > > >> +static void ui_ndofedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData > > >> *data, wmNDOFMotionData *ndof, int shift) > > >> +{ > > >> + float *hsv= ui_block_hsv_get(but->block); > > >> + float rgb[3]; > > >> + float phi, r, sqr, v[2]; > > >> + float sensitivity = (shift?0.15:0.3) * ndof->dt; > > >> + > > >> + ui_get_but_vectorf(but, rgb); > > >> + rgb_to_hsv_compat(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2); > > >> + > > >> + /* Convert current colour on hue/sat disc to circular > > coordinates > > >> phi, r */ > > >> + phi = fmodf(hsv[0]+0.25, 1.0f) * -2.0f*M_PI; > > >> + r = hsv[1]; > > >> + sqr = r>0.f?sqrtf(r):1; > > >> + > > >> + /* Convert to 2d vectors */ > > >> + v[0] = r * cos(phi); > > >> + v[1] = r * sin(phi); > > >> + > > >> + /* Use ndof device y and x rotation to move the vector in 2d > > space > > >> */ > > >> + v[0] += ndof->ry * sensitivity; > > >> + v[1] += ndof->rx * sensitivity; > > >> > > >> + /* convert back to polar coords on circle */ > > >> + phi = atan2(v[0], v[1])/(2.0f*(float)M_PI) + 0.5f; > > >> + > > >> + /* use ndof z rotation to additionally rotate hue */ > > >> + phi -= ndof->rz * sensitivity * 0.5; > > >> + > > >> + r = len_v2(v); > > >> + CLAMP(r, 0.0f, 1.0f); > > >> + > > >> + /* convert back to hsv values, in range [0,1] */ > > >> + hsv[0] = fmodf(phi, 1.0); > > >> + hsv[1] = r; > > >> + > > >> + /* exception, when using color wheel in 'locked' value state: > > >> + * allow choosing a hue for black values, by giving a tiny > > >> increment */ > > >> + if (but->flag & UI_BUT_COLOR_LOCK) { // lock > > >> + if (hsv[2] == 0.f) hsv[2] = 0.0001f; > > >> + } > > >> + > > >> + hsv_to_rgb(hsv[0], hsv[1], hsv[2], data->vec, data->vec+1, > > >> data->vec+2); > > >> + > > >> + if((but->flag & UI_BUT_VEC_SIZE_LOCK) && (data->vec[0] || > > >> data->vec[1] || data->vec[2])) { > > >> + normalize_v3(data->vec); > > >> + mul_v3_fl(data->vec, but->a2); > > >> + } > > >> + > > >> + ui_set_but_vectorf(but, data->vec); > > >> +} > > >> + > > >> + > > >> static int ui_do_but_HSVCIRCLE(bContext *C, uiBlock *block, uiBut > *but, > > >> uiHandleButtonData *data, wmEvent *event) > > >> { > > >> int mx, my; > > >> - > > >> mx= event->x; > > >> my= event->y; > > >> ui_window_to_block(data->region, block, &mx, &my); > > >> @@ -3360,6 +3478,16 @@ > > >> > > >> return WM_UI_HANDLER_BREAK; > > >> } > > >> + else if (event->type == NDOF_MOTION) { > > >> + wmNDOFMotionData *ndof = (wmNDOFMotionData*) > > >> event->customdata; > > >> + > > >> + ui_ndofedit_but_HSVCIRCLE(but, data, ndof, > > >> event->shift); > > >> + > > >> + button_activate_state(C, but, > > BUTTON_STATE_EXIT); > > >> + ui_apply_button(C, but->block, but, data, 1); > > >> + > > >> + return WM_UI_HANDLER_BREAK; > > >> + } > > >> /* XXX hardcoded keymap check.... */ > > >> else if (ELEM(event->type, ZEROKEY, PAD0) && event->val > > == > > >> KM_PRESS) { > > >> int len; > > >> > > >> _______________________________________________ > > >> Bf-blender-cvs mailing list > > >> [email protected] > > >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs > > >> > > > _______________________________________________ > > > Bf-committers mailing list > > > [email protected] > > > http://lists.blender.org/mailman/listinfo/bf-committers > > > > > > > > > > > -- > > - Campbell > > _______________________________________________ > > Bf-committers mailing list > > [email protected] > > http://lists.blender.org/mailman/listinfo/bf-committers > > > _______________________________________________ > Bf-committers mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-committers > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
