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
