[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41508] trunk/blender/source/blender/ editors/interface/interface_handlers.c: Enabled ndof devices for controlling colour wheel and cube UI controls

Campbell Barton ideasman42 at gmail.com
Fri Nov 4 04:30:02 CET 2011


Do you mean configure sensitivity or disable options like this?

On Fri, Nov 4, 2011 at 1:41 PM, Daniel Salazar - 3Developer.com
<zanqdo at gmail.com> 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 <matt at mke3.net> 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
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>



-- 
- Campbell


More information about the Bf-committers mailing list