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 <
> [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

_______________________________________________
Bf-committers mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to