[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46986] trunk/blender/source/blender/ editors: Modifications to the view3d.select() operator:

Nathan Vegdahl cessen at cessen.com
Thu May 24 23:40:19 CEST 2012


Ah, yes!  Thanks for the catch.

--Nathan


On Thu, May 24, 2012 at 2:22 PM, Campbell Barton <ideasman42 at gmail.com> wrote:
> editmesh_select.c:1499 --- should this be 'toggle' ? - it is for edge
> and vertex but not face.
>
> On Thu, May 24, 2012 at 11:05 PM, Nathan Vegdahl <cessen at cessen.com> wrote:
>> Revision: 46986
>>          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46986
>> Author:   cessen
>> Date:     2012-05-24 21:05:27 +0000 (Thu, 24 May 2012)
>> Log Message:
>> -----------
>> Modifications to the view3d.select() operator:
>>
>> 1. Two new boolean options have been added to the operator: "deselect"
>>   and "toggle".
>> 2. The previous behavior of "extend" (toggling the selection) has
>>   been moved to the "toggle" option.
>> 3. "extend" now only extends the selection, it never deselects.
>> 4. "deselect" is pretty self-explanatory: it deselects (i.e. opposite
>>   of extend).
>> 5. The built-in keymap has been changed to use "toggle" where
>>   "extend" was used before for this operator, to maintain the
>>   previous behavior in the default keymap.
>>
>> In short, this works towards making "extend" and "deselect" fully
>> consistent across all selection tools (adding to and removing from
>> selection, respectively), but still preserves the old behavior
>> as well.
>>
>> (Patch reviewed by Brecht.)
>>
>> Modified Paths:
>> --------------
>>    trunk/blender/source/blender/editors/armature/editarmature.c
>>    trunk/blender/source/blender/editors/curve/editcurve.c
>>    trunk/blender/source/blender/editors/include/ED_armature.h
>>    trunk/blender/source/blender/editors/include/ED_curve.h
>>    trunk/blender/source/blender/editors/include/ED_mball.h
>>    trunk/blender/source/blender/editors/include/ED_mesh.h
>>    trunk/blender/source/blender/editors/include/ED_object.h
>>    trunk/blender/source/blender/editors/include/ED_particle.h
>>    trunk/blender/source/blender/editors/mesh/editface.c
>>    trunk/blender/source/blender/editors/mesh/editmesh_select.c
>>    trunk/blender/source/blender/editors/metaball/mball_edit.c
>>    trunk/blender/source/blender/editors/object/object_lattice.c
>>    trunk/blender/source/blender/editors/physics/particle_edit.c
>>    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
>>    trunk/blender/source/blender/editors/space_view3d/view3d_select.c
>>
>> Modified: trunk/blender/source/blender/editors/armature/editarmature.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/armature/editarmature.c        2012-05-24 20:20:12 UTC (rev 46985)
>> +++ trunk/blender/source/blender/editors/armature/editarmature.c        2012-05-24 21:05:27 UTC (rev 46986)
>> @@ -1842,7 +1842,7 @@
>>  }
>>
>>  /* context: editmode armature in view3d */
>> -int mouse_armature(bContext *C, const int mval[2], int extend)
>> +int mouse_armature(bContext *C, const int mval[2], int extend, int deselect, int toggle)
>>  {
>>        Object *obedit = CTX_data_edit_object(C);
>>        bArmature *arm = obedit->data;
>> @@ -1857,7 +1857,7 @@
>>        nearBone = get_nearest_editbonepoint(&vc, mval, arm->edbo, 1, &selmask);
>>        if (nearBone) {
>>
>> -               if (!extend)
>> +               if (!extend && !deselect && !toggle)
>>                        ED_armature_deselect_all(obedit, 0);
>>
>>                /* by definition the non-root connected bones have no root point drawn,
>> @@ -1867,6 +1867,18 @@
>>                        if (nearBone->parent && (nearBone->flag & BONE_CONNECTED)) {
>>                                /* click in a chain */
>>                                if (extend) {
>> +                                       /* select this bone */
>> +                                       nearBone->flag |= BONE_TIPSEL;
>> +                                       nearBone->parent->flag |= BONE_TIPSEL;
>> +                               }
>> +                               else if (deselect) {
>> +                                       /* deselect this bone */
>> +                                       nearBone->flag &= ~(BONE_TIPSEL | BONE_SELECTED);
>> +                                       /* only deselect parent tip if it is not selected */
>> +                                       if (!(nearBone->parent->flag & BONE_SELECTED))
>> +                                               nearBone->parent->flag &= ~BONE_TIPSEL;
>> +                               }
>> +                               else if (toggle) {
>>                                        /* hold shift inverts this bone's selection */
>>                                        if (nearBone->flag & BONE_SELECTED) {
>>                                                /* deselect this bone */
>> @@ -1889,18 +1901,29 @@
>>                        }
>>                        else {
>>                                if (extend) {
>> +                                       nearBone->flag |= (BONE_TIPSEL | BONE_ROOTSEL);
>> +                               }
>> +                               else if (deselect) {
>> +                                       nearBone->flag &= ~(BONE_TIPSEL | BONE_ROOTSEL);
>> +                               }
>> +                               else if (toggle) {
>>                                        /* hold shift inverts this bone's selection */
>>                                        if (nearBone->flag & BONE_SELECTED)
>>                                                nearBone->flag &= ~(BONE_TIPSEL | BONE_ROOTSEL);
>>                                        else
>>                                                nearBone->flag |= (BONE_TIPSEL | BONE_ROOTSEL);
>>                                }
>> -                               else nearBone->flag |= (BONE_TIPSEL | BONE_ROOTSEL);
>> +                               else
>> +                                       nearBone->flag |= (BONE_TIPSEL | BONE_ROOTSEL);
>>                        }
>>                }
>>                else {
>> -                       if (extend && (nearBone->flag & selmask))
>> +                       if (extend)
>> +                               nearBone->flag |= selmask;
>> +                       else if (deselect)
>>                                nearBone->flag &= ~selmask;
>> +                       else if (toggle && (nearBone->flag & selmask))
>> +                               nearBone->flag &= ~selmask;
>>                        else
>>                                nearBone->flag |= selmask;
>>                }
>> @@ -4475,7 +4498,7 @@
>>
>>  /* called from editview.c, for mode-less pose selection */
>>  /* assumes scene obact and basact is still on old situation */
>> -int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, short hits, short extend)
>> +int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, short hits, short extend, short deselect, short toggle)
>>  {
>>        Object *ob = base->object;
>>        Bone *nearBone;
>> @@ -4494,7 +4517,7 @@
>>                 * note, special exception for armature mode so we can do multi-select
>>                 * we could check for multi-select explicitly but think its fine to
>>                 * always give predictable behavior in weight paint mode - campbell */
>> -               if (!extend || ((ob_act && (ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0))) {
>> +               if ((!extend && !deselect && !toggle)|| ((ob_act && (ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0))) {
>>                        ED_pose_deselectall(ob, 0);
>>                        nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>>                        arm->act_bone = nearBone;
>> @@ -4503,25 +4526,34 @@
>>                        //select_actionchannel_by_name(ob->action, nearBone->name, 1);
>>                }
>>                else {
>> -                       if (nearBone->flag & BONE_SELECTED) {
>> -                               /* if not active, we make it active */
>> -                               if (nearBone != arm->act_bone) {
>> -                                       arm->act_bone = nearBone;
>> +                       if (extend) {
>> +                               nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>> +                               arm->act_bone = nearBone;
>> +                       }
>> +                       else if (deselect) {
>> +                               nearBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>> +                       }
>> +                       else if (toggle) {
>> +                               if (nearBone->flag & BONE_SELECTED) {
>> +                                       /* if not active, we make it active */
>> +                                       if (nearBone != arm->act_bone) {
>> +                                               arm->act_bone = nearBone;
>> +                                       }
>> +                                       else {
>> +                                               nearBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>> +
>> +                                               // XXX old cruft! use notifiers instead
>> +                                               //select_actionchannel_by_name(ob->action, nearBone->name, 0);
>> +                                       }
>>                                }
>>                                else {
>> -                                       nearBone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>> -
>> +                                       nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>> +                                       arm->act_bone = nearBone;
>> +
>>                                        // XXX old cruft! use notifiers instead
>> -                                       //select_actionchannel_by_name(ob->action, nearBone->name, 0);
>> +                                       //select_actionchannel_by_name(ob->action, nearBone->name, 1);
>>                                }
>> -                       }
>> -                       else {
>> -                               nearBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
>> -                               arm->act_bone = nearBone;
>> -
>> -                               // XXX old cruft! use notifiers instead
>> -                               //select_actionchannel_by_name(ob->action, nearBone->name, 1);
>> -                       }
>> +                       }
>>                }
>>
>>                /* in weightpaint we select the associated vertex group too */
>>
>> Modified: trunk/blender/source/blender/editors/curve/editcurve.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/curve/editcurve.c      2012-05-24 20:20:12 UTC (rev 46985)
>> +++ trunk/blender/source/blender/editors/curve/editcurve.c      2012-05-24 21:05:27 UTC (rev 46986)
>> @@ -4126,7 +4126,7 @@
>>
>>  /***************** pick select from 3d view **********************/
>>
>> -int mouse_nurb(bContext *C, const int mval[2], int extend)
>> +int mouse_nurb(bContext *C, const int mval[2], int extend, int deselect, int toggle)
>>  {
>>        Object *obedit = CTX_data_edit_object(C);
>>        Curve *cu = obedit->data;
>> @@ -4146,12 +4146,8 @@
>>        hand = findnearestNurbvert(&vc, 1, location, &nu, &bezt, &bp);
>>
>>        if (bezt || bp) {
>> -               if (extend == 0) {
>> -
>> -                       setflagsNurb(editnurb, 0);
>> -
>> +               if (extend) {
>>                        if (bezt) {
>> -
>>                                if (hand == 1) {
>>                                        select_beztriple(bezt, SELECT, 1, HIDDEN);
>>                                        cu->lastsel = bezt;
>> @@ -4167,11 +4163,28 @@
>>                                cu->lastsel = bp;
>>                                select_bpoint(bp, SELECT, 1, HIDDEN);
>>                        }
>> -
>>                }
>> -               else {
>> +               else if (deselect) {
>>                        if (bezt) {
>>                                if (hand == 1) {
>> +                                       select_beztriple(bezt, DESELECT, 1, HIDDEN);
>> +                                       if (bezt == cu->lastsel) cu->lastsel = NULL;
>> +                               }
>> +                               else if (hand == 0) {
>> +                                       bezt->f1 &= ~SELECT;
>> +                               }
>> +                               else {
>> +                                       bezt->f3 &= ~SELECT;
>> +                               }
>> +                       }
>> +                       else {
>> +                               select_bpoint(bp, DESELECT, 1, HIDDEN);
>> +                               if (cu->lastsel == bp) cu->lastsel = NULL;
>> +                       }
>> +               }
>> +               else if (toggle) {
>> +                       if (bezt) {
>> +                               if (hand == 1) {
>>                                        if (bezt->f2 & SELECT) {
>>                                                select_beztriple(bezt, DESELECT, 1, HIDDEN);
>>                                                if (bezt == cu->lastsel) cu->lastsel = NULL;
>> @@ -4198,7 +4211,27 @@
>>                                        cu->lastsel = bp;
>>                                }
>>                        }
>> +               }
>> +               else {
>> +                       setflagsNurb(editnurb, 0);
>>
>> +                       if (bezt) {
>> +
>> +                               if (hand == 1) {
>> +                                       select_beztriple(bezt, SELECT, 1, HIDDEN);
>> +                                       cu->lastsel = bezt;
>> +                               }
>> +                               else {
>> +                                       if (hand == 0) bezt->f1 |= SELECT;
>> +                                       else bezt->f3 |= SELECT;
>> +
>> +                                       cu->lastsel = NULL;
>> +                               }
>> +                       }
>> +                       else {
>> +                               cu->lastsel = bp;
>> +                               select_bpoint(bp, SELECT, 1, HIDDEN);
>> +                       }
>>                }
>>
>>                if (nu != get_actNurb(obedit))
>>
>> Modified: trunk/blender/source/blender/editors/include/ED_armature.h
>> ===================================================================
>> --- trunk/blender/source/blender/editors/include/ED_armature.h  2012-05-24 20:20:12 UTC (rev 46985)
>> +++ trunk/blender/source/blender/editors/include/ED_armature.h  2012-05-24 21:05:27 UTC (rev 46986)
>> @@ -113,8 +113,8 @@
>>  void ED_armature_deselect_all_visible(struct Object *obedit);
>>
>>  int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer,
>> -                            short hits, short extend);
>> -int mouse_armature(struct bContext *C, const int mval[2], int extend);
>> +                            short hits, short extend, short deselect, short toggle);
>> +int mouse_armature(struct bContext *C, const int mval[2], int extend, int deselect, int toggle);
>>  int join_armature_exec(struct bContext *C, struct wmOperator *op);
>>  struct Bone *get_indexed_bone(struct Object *ob, int index);
>>  float ED_rollBoneToVector(EditBone *bone, const float new_up_axis[3], const short axis_only);
>>
>> Modified: trunk/blender/source/blender/editors/include/ED_curve.h
>> ===================================================================
>> --- trunk/blender/source/blender/editors/include/ED_curve.h     2012-05-24 20:20:12 UTC (rev 46985)
>> +++ trunk/blender/source/blender/editors/include/ED_curve.h     2012-05-24 21:05:27 UTC (rev 46986)
>> @@ -65,7 +65,7 @@
>>
>>  void    BKE_curve_editNurb_free(struct Curve *cu);
>>
>> -int     mouse_nurb(struct bContext *C, const int mval[2], int extend);
>> +int     mouse_nurb(struct bContext *C, const int mval[2], int extend, int deselect, int toggle);
>>
>>  struct Nurb *add_nurbs_primitive(struct bContext *C, float mat[4][4], int type, int newob);
>>
>>
>> Modified: trunk/blender/source/blender/editors/include/ED_mball.h
>> ===================================================================
>> --- trunk/blender/source/blender/editors/include/ED_mball.h     2012-05-24 20:20:12 UTC (rev 46985)
>> +++ trunk/blender/source/blender/editors/include/ED_mball.h     2012-05-24 21:05:27 UTC (rev 46986)
>> @@ -40,7 +40,7 @@
>>
>>  struct MetaElem *add_metaball_primitive(struct bContext *C, float mat[4][4], int type, int newname);
>>
>> -int mouse_mball(struct bContext *C, const int mval[2], int extend);
>> +int mouse_mball(struct bContext *C, const int mval[2], int extend, int deselect, int toggle);
>>
>>  void free_editMball(struct Object *obedit);
>>  void make_editMball(struct Object *obedit);
>>
>> Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
>> ===================================================================
>> --- trunk/blender/source/blender/editors/include/ED_mesh.h      2012-05-24 20:20:12 UTC (rev 46985)
>> +++ trunk/blender/source/blender/editors/include/ED_mesh.h      2012-05-24 21:05:27 UTC (rev 46986)
>> @@ -156,7 +156,7 @@
>>  /* editmesh_mods.c */
>>  extern unsigned int bm_vertoffs, bm_solidoffs, bm_wireoffs;
>>
>> -int         mouse_mesh(struct bContext *C, const int mval[2], short extend);
>> +int         mouse_mesh(struct bContext *C, const int mval[2], short extend, short deselect, short toggle);
>>
>>  struct BMVert *editbmesh_get_x_mirror_vert(struct Object *ob, struct BMEditMesh *em, struct BMVert *eve, const float co[3], int index);
>>  int            mesh_get_x_mirror_vert(struct Object *ob, int index);
>>
>> @@ Diff output truncated at 10240 characters. @@
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
>
>
> --
> - Campbell
> _______________________________________________
> 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