diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-01-29 16:00:04 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2012-01-29 16:00:04 +0400 |
commit | 831f33998060abf76ce1dfa26a08397121210e86 (patch) | |
tree | dfc5e5e5c3e588d0398bb9fa5656ea1dea9432bb /source/blender/editors/space_view3d | |
parent | 12baf364f528f11db8f9c9d139ef97f657145c8f (diff) | |
parent | d4584dfd23ab4880cc6e2f7f6d699ea3c9687d22 (diff) |
Merged changes in the trunk up to revision 43748.
Conflicts resolved:
source/blender/editors/include/UI_resources.h
Diffstat (limited to 'source/blender/editors/space_view3d')
6 files changed, 96 insertions, 71 deletions
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c index 5f521cc3dd1..62c12500aa8 100644 --- a/source/blender/editors/space_view3d/drawmesh.c +++ b/source/blender/editors/space_view3d/drawmesh.c @@ -713,7 +713,7 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec } else { if(GPU_buffer_legacy(dm)) { - if (draw_flags & DRAW_DYNAMIC_PAINT_PREVIEW) + if (draw_flags & DRAW_MODIFIERS_PREVIEW) dm->drawFacesTex(dm, draw_mcol__set_draw_legacy, NULL, NULL); else dm->drawFacesTex(dm, draw_tface__set_draw_legacy, NULL, NULL); @@ -849,7 +849,7 @@ static int tex_mat_set_face_editmesh_cb(void *UNUSED(userData), int index) void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, DerivedMesh *dm, int draw_flags) { - if((!scene_use_new_shading_nodes(scene)) || (draw_flags & DRAW_DYNAMIC_PAINT_PREVIEW)) { + if((!scene_use_new_shading_nodes(scene)) || (draw_flags & DRAW_MODIFIERS_PREVIEW)) { draw_mesh_textured_old(scene, v3d, rv3d, ob, dm, draw_flags); return; } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index fd0338c8206..1b94c9152b8 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -36,7 +36,6 @@ #include "DNA_camera_types.h" #include "DNA_curve_types.h" #include "DNA_constraint_types.h" // for drawing constraint -#include "DNA_dynamicpaint_types.h" #include "DNA_lamp_types.h" #include "DNA_lattice_types.h" #include "DNA_material_types.h" @@ -155,6 +154,10 @@ typedef struct drawDMFacesSel_userData { int *orig_index; } drawDMFacesSel_userData; +typedef struct drawDMNormal_userData { + float normalsize; +} drawDMNormal_userData; + typedef struct bbsObmodeMeshVerts_userData { void *offset; MVert *mvert; @@ -2213,20 +2216,24 @@ void nurbs_foreachScreenVert( static void draw_dm_face_normals__mapFunc(void *userData, int index, float *cent, float *no) { - ToolSettings *ts= ((Scene *)userData)->toolsettings; + drawDMNormal_userData *data = userData; EditFace *efa = EM_get_face_for_index(index); if (efa->h==0 && efa->fgonf!=EM_FGON) { glVertex3fv(cent); - glVertex3f( cent[0] + no[0]*ts->normalsize, - cent[1] + no[1]*ts->normalsize, - cent[2] + no[2]*ts->normalsize); + glVertex3f(cent[0] + no[0] * data->normalsize, + cent[1] + no[1] * data->normalsize, + cent[2] + no[2] * data->normalsize); } } static void draw_dm_face_normals(Scene *scene, DerivedMesh *dm) { + drawDMNormal_userData data; + + data.normalsize = scene->toolsettings->normalsize; + glBegin(GL_LINES); - dm->foreachMappedFaceCenter(dm, draw_dm_face_normals__mapFunc, scene); + dm->foreachMappedFaceCenter(dm, draw_dm_face_normals__mapFunc, &data); glEnd(); } @@ -2248,28 +2255,32 @@ static void draw_dm_face_centers(DerivedMesh *dm, int sel) static void draw_dm_vert_normals__mapFunc(void *userData, int index, float *co, float *no_f, short *no_s) { - Scene *scene= (Scene *)userData; - ToolSettings *ts= scene->toolsettings; + drawDMNormal_userData *data = userData; EditVert *eve = EM_get_vert_for_index(index); if (eve->h==0) { glVertex3fv(co); if (no_f) { - glVertex3f( co[0] + no_f[0]*ts->normalsize, - co[1] + no_f[1]*ts->normalsize, - co[2] + no_f[2]*ts->normalsize); - } else { - glVertex3f( co[0] + no_s[0]*ts->normalsize/32767.0f, - co[1] + no_s[1]*ts->normalsize/32767.0f, - co[2] + no_s[2]*ts->normalsize/32767.0f); + glVertex3f(co[0] + no_f[0] * data->normalsize, + co[1] + no_f[1] * data->normalsize, + co[2] + no_f[2] * data->normalsize); + } + else { + glVertex3f(co[0] + no_s[0] * (data->normalsize / 32767.0f), + co[1] + no_s[1] * (data->normalsize / 32767.0f), + co[2] + no_s[2] * (data->normalsize / 32767.0f)); } } } static void draw_dm_vert_normals(Scene *scene, DerivedMesh *dm) { + drawDMNormal_userData data; + + data.normalsize = scene->toolsettings->normalsize; + glBegin(GL_LINES); - dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, scene); + dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, &data); glEnd(); } @@ -3107,27 +3118,16 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D eWireDrawMode draw_wire= OBDRAW_WIRE_OFF; int /* totvert,*/ totedge, totface; DerivedMesh *dm= mesh_get_derived_final(scene, ob, scene->customdata_mask); - ModifierData *md = NULL; const short is_obact= (ob == OBACT); int draw_flags = (is_obact && paint_facesel_test(ob)) ? DRAW_FACE_SELECT : 0; if(!dm) return; - /* check to draw dynamic paint colors */ - if ((md = modifiers_findByType(ob, eModifierType_DynamicPaint))) - { - /* check if target has an active dpaint modifier */ - if(md && (md->mode & eModifierMode_Realtime)) - { - DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)md; - /* if canvas is ready to preview vertex colors */ - if (pmd->canvas && pmd->canvas->flags & MOD_DPAINT_PREVIEW_READY && - DM_get_face_data_layer(dm, CD_WEIGHT_MCOL)) { - draw_flags |= DRAW_DYNAMIC_PAINT_PREVIEW; - } - } - } + /* Check to draw dynamic paint colors (or weights from WeightVG modifiers). + * Note: Last "preview-active" modifier in stack will win! */ + if(DM_get_face_data_layer(dm, CD_WEIGHT_MCOL) && modifiers_isPreview(ob)) + draw_flags |= DRAW_MODIFIERS_PREVIEW; /* Unwanted combination */ if (draw_flags & DRAW_FACE_SELECT) { @@ -3168,7 +3168,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D draw_mesh_object_outline(v3d, ob, dm); } - if(draw_glsl_material(scene, ob, v3d, dt) && !(draw_flags & DRAW_DYNAMIC_PAINT_PREVIEW)) { + if(draw_glsl_material(scene, ob, v3d, dt) && !(draw_flags & DRAW_MODIFIERS_PREVIEW)) { glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW); dm->drawFacesGLSL(dm, GPU_enable_material); @@ -3219,7 +3219,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D /* since we already draw wire as wp guide, dont draw over the top */ draw_wire= OBDRAW_WIRE_OFF; } - else if (draw_flags & DRAW_DYNAMIC_PAINT_PREVIEW) { + else if (draw_flags & DRAW_MODIFIERS_PREVIEW) { /* for object selection draws no shade */ if (flag & (DRAW_PICKING|DRAW_CONSTCOLOR)) { dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material); diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 2620fe4ac71..f617f673397 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -634,7 +634,7 @@ static void viewrotate_apply(ViewOpsData *vod, int x, int y) sub_v3_v3v3(dvec, newvec, vod->trackvec); - si= sqrt(dvec[0]*dvec[0]+ dvec[1]*dvec[1]+ dvec[2]*dvec[2]); + si = len_v3(dvec); si /= (float)(2.0 * TRACKBALLSIZE); cross_v3_v3v3(q1+1, vod->trackvec, newvec); diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 00bb8d16943..e9b339c0baf 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -231,6 +231,8 @@ static int view3d_layers_invoke(bContext *C, wmOperator *op, wmEvent *event) if(event->shift) RNA_boolean_set(op->ptr, "extend", TRUE); + else + RNA_boolean_set(op->ptr, "extend", FALSE); if(event->alt) { int nr= RNA_int_get(op->ptr, "nr") + 10; diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index f6c82b0ba9d..07754c0883c 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -59,7 +59,7 @@ struct wmNDOFMotionData; #define DRAW_SCENESET 4 /* draw_mesh_fancy/draw_mesh_textured draw_flags */ -#define DRAW_DYNAMIC_PAINT_PREVIEW 1 +#define DRAW_MODIFIERS_PREVIEW 1 #define DRAW_FACE_SELECT 2 /* view3d_header.c */ diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 1b153d03e45..f98149d2485 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -240,6 +240,12 @@ static void EM_backbuf_checkAndSelectTFaces(Mesh *me, int select) /* *********************** GESTURE AND LASSO ******************* */ +typedef struct LassoSelectUserData { + ViewContext *vc; + rcti *rect; + int (*mcords)[2], moves, select, pass, done; +} LassoSelectUserData; + static int view3d_selectable_data(bContext *C) { Object *ob = CTX_data_active_object(C); @@ -456,7 +462,7 @@ static void lasso_select_boundbox(rcti *rect, int mcords[][2], short moves) static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) { - struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } *data = userData; + LassoSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { eve->f = data->select?(eve->f|1):(eve->f&~1); @@ -464,7 +470,7 @@ static void do_lasso_select_mesh__doSelectVert(void *userData, EditVert *eve, in } static void do_lasso_select_mesh__doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index) { - struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } *data = userData; + LassoSelectUserData *data = userData; if (EM_check_backbuf(em_solidoffs+index)) { if (data->pass==0) { @@ -483,16 +489,16 @@ static void do_lasso_select_mesh__doSelectEdge(void *userData, EditEdge *eed, in } static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) { - struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } *data = userData; + LassoSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y) && lasso_inside(data->mcords, data->moves, x, y)) { - EM_select_face_fgon(data->vc.em, efa, data->select); + EM_select_face_fgon(data->vc->em, efa, data->select); } } static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves, short extend, short select) { - struct { ViewContext vc; rcti *rect; int (*mcords)[2], moves, select, pass, done; } data; + LassoSelectUserData data; ToolSettings *ts= vc->scene->toolsettings; rcti rect; int bbsel; @@ -502,7 +508,7 @@ static void do_lasso_select_mesh(ViewContext *vc, int mcords[][2], short moves, /* set editmesh */ vc->em= ((Mesh *)vc->obedit->data)->edit_mesh; - data.vc= *vc; + data.vc= vc; data.rect = ▭ data.mcords = mcords; data.moves = moves; @@ -610,7 +616,7 @@ static void do_lasso_select_mesh_uv(int mcords[][2], short moves, short select) static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { - struct { ViewContext *vc; int (*mcords)[2]; short moves; short select; } *data = userData; + LassoSelectUserData *data = userData; Object *obedit= data->vc->obedit; Curve *cu= (Curve*)obedit->data; @@ -639,7 +645,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP static void do_lasso_select_curve(ViewContext *vc, int mcords[][2], short moves, short extend, short select) { - struct { ViewContext *vc; int (*mcords)[2]; short moves; short select; } data; + LassoSelectUserData data; /* set vc->editnurb */ data.vc = vc; @@ -656,7 +662,7 @@ static void do_lasso_select_curve(ViewContext *vc, int mcords[][2], short moves, static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, int y) { - struct { int (*mcords)[2]; short moves; short select; } *data = userData; + LassoSelectUserData *data = userData; if (lasso_inside(data->mcords, data->moves, x, y)) { bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); @@ -664,7 +670,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x, } static void do_lasso_select_lattice(ViewContext *vc, int mcords[][2], short moves, short extend, short select) { - struct { int (*mcords)[2]; short moves; short select; } data; + LassoSelectUserData data; /* set editdata in vc */ data.mcords = mcords; @@ -1624,6 +1630,11 @@ static int mouse_select(bContext *C, const int mval[2], short extend, short obce /* ******************** border and circle ************************************** */ +typedef struct BoxSelectUserData { + ViewContext *vc; + rcti *rect; + int select, pass, done; +} BoxSelectUserData; int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2) { @@ -1649,7 +1660,7 @@ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { - struct { ViewContext *vc; rcti *rect; int select; } *data = userData; + BoxSelectUserData *data = userData; Object *obedit= data->vc->obedit; Curve *cu= (Curve*)obedit->data; @@ -1677,7 +1688,7 @@ static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoi } static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend) { - struct { ViewContext *vc; rcti *rect; int select; } data; + BoxSelectUserData data; data.vc = vc; data.rect = rect; @@ -1694,7 +1705,7 @@ static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int exte static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y) { - struct { ViewContext vc; rcti *rect; int select; } *data = userData; + BoxSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y)) { bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT); @@ -1702,9 +1713,9 @@ static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, i } static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend) { - struct { ViewContext vc; rcti *rect; int select, pass, done; } data; + BoxSelectUserData data; - data.vc= *vc; + data.vc= vc; data.rect = rect; data.select = select; @@ -1719,7 +1730,7 @@ static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int ex static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) { - struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; + BoxSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y)) { eve->f = data->select?(eve->f|1):(eve->f&~1); @@ -1727,7 +1738,7 @@ static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int } static void do_mesh_box_select__doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index) { - struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; + BoxSelectUserData *data = userData; if(EM_check_backbuf(em_solidoffs+index)) { if (data->pass==0) { @@ -1744,19 +1755,19 @@ static void do_mesh_box_select__doSelectEdge(void *userData, EditEdge *eed, int } static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) { - struct { ViewContext vc; rcti *rect; short select, pass, done; } *data = userData; + BoxSelectUserData *data = userData; if (BLI_in_rcti(data->rect, x, y)) { - EM_select_face_fgon(data->vc.em, efa, data->select); + EM_select_face_fgon(data->vc->em, efa, data->select); } } static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend) { - struct { ViewContext vc; rcti *rect; short select, pass, done; } data; + BoxSelectUserData data; ToolSettings *ts= vc->scene->toolsettings; int bbsel; - data.vc= *vc; + data.vc= vc; data.rect = rect; data.select = select; data.pass = 0; @@ -2251,9 +2262,16 @@ void VIEW3D_OT_select(wmOperatorType *ot) /* -------------------- circle select --------------------------------------------- */ +typedef struct CircleSelectUserData { + ViewContext *vc; + short select; + int mval[2]; + float radius; +} CircleSelectUserData; + static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index)) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; float r = sqrt(mx*mx + my*my); @@ -2263,7 +2281,7 @@ static void mesh_circle_doSelectVert(void *userData, EditVert *eve, int x, int y } static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int UNUSED(index)) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; if (edge_inside_circle(data->mval[0], data->mval[1], (short) data->radius, x0, y0, x1, y1)) { EM_select_edge(eed, data->select); @@ -2271,7 +2289,7 @@ static void mesh_circle_doSelectEdge(void *userData, EditEdge *eed, int x0, int } static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y, int UNUSED(index)) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; float r = sqrt(mx*mx + my*my); @@ -2284,7 +2302,7 @@ static void mesh_circle_select(ViewContext *vc, int select, const int mval[2], f { ToolSettings *ts= vc->scene->toolsettings; int bbsel; - struct {ViewContext *vc; short select; int mval[2]; float radius; } data; + CircleSelectUserData data; bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0f)); ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */ @@ -2346,7 +2364,7 @@ static void paint_vertsel_circle_select(ViewContext *vc, int select, const int m Object *ob= vc->obact; Mesh *me = ob?ob->data:NULL; /* int bbsel; */ /* UNUSED */ - /* struct {ViewContext *vc; short select; int mval[2]; float radius; } data = {NULL}; */ /* UNUSED */ + /* CircleSelectUserData data = {NULL}; */ /* UNUSED */ if (me) { em_vertoffs= me->totvert+1; /* max index array */ @@ -2361,7 +2379,7 @@ static void paint_vertsel_circle_select(ViewContext *vc, int select, const int m static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint *bp, BezTriple *bezt, int beztindex, int x, int y) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; float r = sqrt(mx*mx + my*my); Object *obedit= data->vc->obedit; @@ -2392,7 +2410,7 @@ static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint } static void nurbscurve_circle_select(ViewContext *vc, int select, const int mval[2], float rad) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } data; + CircleSelectUserData data; /* set vc-> edit data */ @@ -2409,7 +2427,7 @@ static void nurbscurve_circle_select(ViewContext *vc, int select, const int mval static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int y) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; float r = sqrt(mx*mx + my*my); @@ -2419,7 +2437,7 @@ static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int } static void lattice_circle_select(ViewContext *vc, int select, const int mval[2], float rad) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } data; + CircleSelectUserData data; /* set vc-> edit data */ @@ -2436,7 +2454,7 @@ static void lattice_circle_select(ViewContext *vc, int select, const int mval[2] // NOTE: pose-bone case is copied from editbone case... static short pchan_circle_doSelectJoint(void *userData, bPoseChannel *pchan, int x, int y) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; float r = sqrt(mx*mx + my*my); @@ -2451,7 +2469,8 @@ static short pchan_circle_doSelectJoint(void *userData, bPoseChannel *pchan, int } static void pose_circle_select(ViewContext *vc, int select, const int mval[2], float rad) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } data; + CircleSelectUserData data; + bArmature *arm = vc->obact->data; bPose *pose = vc->obact->pose; bPoseChannel *pchan; int change= FALSE; @@ -2470,6 +2489,10 @@ static void pose_circle_select(ViewContext *vc, int select, const int mval[2], f short sco1[2], sco2[2], didpoint=0; float vec[3]; + /* skip invisible bones */ + if (PBONE_VISIBLE(arm, pchan->bone) == 0) + continue; + /* project head location to screenspace */ mul_v3_m4v3(vec, vc->obact->obmat, pchan->pose_head); project_short(vc->ar, vec, sco1); @@ -2496,7 +2519,7 @@ static void pose_circle_select(ViewContext *vc, int select, const int mval[2], f static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int x, int y, short head) { - struct {ViewContext *vc; short select; int mval[2]; float radius; } *data = userData; + CircleSelectUserData *data = userData; int mx = x - data->mval[0], my = y - data->mval[1]; float r = sqrt(mx*mx + my*my); @@ -2519,7 +2542,7 @@ static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int } static void armature_circle_select(ViewContext *vc, int select, const int mval[2], float rad) { - struct {ViewContext *vc; short select, mval[2]; float radius; } data; + CircleSelectUserData data; bArmature *arm= vc->obedit->data; EditBone *ebone; int change= FALSE; |