[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

Mats Holmberg mats.holmberg at 2me.fi
Fri Nov 4 22:34:20 CET 2011


Hi,

Do you know anything about the state of the integration? Is it meant to be continued at some point, or is it being worked on at the moment? I haven't really heard any news on this.

It seems as if development stopped dead in it's tracks. Quite a few features are still missing, which means that at least my 3d-mouse sits unused on my desk (except for occasional Lightwave use). Compared to other programs I believe that the most important missing features still are panning, the ability to control objects and even scrubbing the timeline. 

It's a bit of a shame, because 3Dconnexion really wanted to get the best integration in Blender. And good integration would help users of other software adopt Blender in their workflow too.

-mats

On Nov 4, 2011, at 11:16 PM, Matt Ebb wrote:

> 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 <
> zanqdo at gmail.com> 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 <ideasman42 at gmail.com
>>> wrote:
>> 
>>> 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
>>> _______________________________________________
>>> Bf-committers mailing list
>>> Bf-committers at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>> 
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>> 
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers



More information about the Bf-committers mailing list