Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-07-24 00:56:40 +0400
committerTon Roosendaal <ton@blender.org>2005-07-24 00:56:40 +0400
commit1516381df1548cad58f505b35e13f6455bf6d1b6 (patch)
treef7d3ed683afd7abb618d2d48b71a380714ff7d72 /source/blender/src/editview.c
parente331e68b571b0b72de1c4636209d038c4f679631 (diff)
- Armature editmode now supports lasso. Please be aware that in editmode,
armatures actually only consists of points, flushing bone selection based on points that are selected. Renamed the "Lines" drawmode for bones to "Sticks". Thanks Basse! :) - Fix; crash in selecting in editmode armature (commit 1 hour ago) - Fix; in editmode, bones didn't transform (same commit) - Fix; in drawmode "Sticks", names could go weird in editmode (commit two days ago)
Diffstat (limited to 'source/blender/src/editview.c')
-rw-r--r--source/blender/src/editview.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index 3f60bb00157..00a18c27126 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -234,7 +234,7 @@ static int lasso_inside_edge(short mcords[][2], short moves, short *v1, short *v
/* warning; lasso select with backbuffer-check draws in backbuf with persp(PERSP_WIN)
and returns with persp(PERSP_VIEW). After lasso select backbuf is not OK
*/
-void do_lasso_select_pose(Object *ob, short mcords[][2], short moves, short select)
+static void do_lasso_select_pose(Object *ob, short mcords[][2], short moves, short select)
{
bPoseChannel *pchan;
float vec[3];
@@ -459,6 +459,40 @@ static void do_lasso_select_lattice(short mcords[][2], short moves, short select
}
}
+static void do_lasso_select_armature(short mcords[][2], short moves, short select)
+{
+ EditBone *ebone;
+ float vec[3];
+ short sco1[2], sco2[2], didpoint;
+
+ for (ebone=G.edbo.first; ebone; ebone=ebone->next) {
+
+ VECCOPY(vec, ebone->head);
+ Mat4MulVecfl(G.obedit->obmat, vec);
+ project_short(vec, sco1);
+ VECCOPY(vec, ebone->tail);
+ Mat4MulVecfl(G.obedit->obmat, vec);
+ project_short(vec, sco2);
+
+ didpoint= 0;
+ if(lasso_inside(mcords, moves, sco1[0], sco1[1])) {
+ if(select) ebone->flag |= BONE_ROOTSEL;
+ else ebone->flag &= ~BONE_ROOTSEL;
+ didpoint= 1;
+ }
+ if(lasso_inside(mcords, moves, sco2[0], sco2[1])) {
+ if(select) ebone->flag |= BONE_TIPSEL;
+ else ebone->flag &= ~BONE_TIPSEL;
+ didpoint= 1;
+ }
+ /* if one of points selected, we skip the bone itself */
+ if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1, sco2)) {
+ if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED;
+ else ebone->flag &= ~(BONE_ACTIVE|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ }
+ }
+ countall(); // abused for flushing selection
+}
static void do_lasso_select_facemode(short mcords[][2], short moves, short select)
{
@@ -506,6 +540,8 @@ static void do_lasso_select(short mcords[][2], short moves, short select)
do_lasso_select_curve(mcords, moves, select);
else if(G.obedit->type==OB_LATTICE)
do_lasso_select_lattice(mcords, moves, select);
+ else if(G.obedit->type==OB_ARMATURE)
+ do_lasso_select_armature(mcords, moves, select);
BIF_undo_push("Lasso select");