diff options
author | Joerg Mueller <nexyon@gmail.com> | 2011-07-05 17:54:25 +0400 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2011-07-05 17:54:25 +0400 |
commit | 3f3c6f5f1fb336f8f0015d7857a1ae153fa2a80f (patch) | |
tree | 27e2ae66dd589013c24592fe0803b440a7e014be /source/blender/editors/transform | |
parent | 887fd19894047832fbb7a7300e5fc11438b1f3b2 (diff) | |
parent | ccd31900ab9659b6fdc035fd91bff9f508334e22 (diff) |
Merging from trunk up to r38119.
Diffstat (limited to 'source/blender/editors/transform')
4 files changed, 64 insertions, 11 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index b8369d8cbff..e1c41e7f763 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -5551,7 +5551,7 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, void initTimeTranslate(TransInfo *t) { /* this tool is only really available in the Action Editor... */ - if (t->spacetype != SPACE_ACTION) { + if (!ELEM(t->spacetype, SPACE_ACTION, SPACE_SEQ)) { t->state = TRANS_CANCEL; } diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c index 0ca0812f050..be5f539431f 100644 --- a/source/blender/editors/transform/transform_constraints.c +++ b/source/blender/editors/transform/transform_constraints.c @@ -105,8 +105,8 @@ void constraintNumInput(TransInfo *t, float vec[3]) if (getConstraintSpaceDimension(t) == 2) { int axis = mode & (CON_AXIS0|CON_AXIS1|CON_AXIS2); if (axis == (CON_AXIS0|CON_AXIS1)) { - vec[0] = vec[0]; - vec[1] = vec[1]; + /* vec[0] = vec[0]; */ /* same */ + /* vec[1] = vec[1]; */ /* same */ vec[2] = nval; } else if (axis == (CON_AXIS1|CON_AXIS2)) { @@ -115,14 +115,14 @@ void constraintNumInput(TransInfo *t, float vec[3]) vec[0] = nval; } else if (axis == (CON_AXIS0|CON_AXIS2)) { - vec[0] = vec[0]; + /* vec[0] = vec[0]; */ /* same */ vec[2] = vec[1]; vec[1] = nval; } } else if (getConstraintSpaceDimension(t) == 1) { if (mode & CON_AXIS0) { - vec[0] = vec[0]; + /* vec[0] = vec[0]; */ /* same */ vec[1] = nval; vec[2] = nval; } diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index ef0acfce72a..23411b13a32 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -690,7 +690,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob) for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { bone = pchan->bone; if (PBONE_VISIBLE(arm, bone)) { - if ((bone->flag & BONE_SELECTED) && !(ob->proxy && pchan->bone->layer & arm->layer_protected)) + if ((bone->flag & BONE_SELECTED)) bone->flag |= BONE_TRANSFORM; else bone->flag &= ~BONE_TRANSFORM; diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index 65cd285cf48..d62227a122d 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -278,6 +278,7 @@ int calc_manipulator_stats(const bContext *C) ARegion *ar= CTX_wm_region(C); Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); + ToolSettings *ts = CTX_data_tool_settings(C); View3D *v3d= sa->spacedata.first; RegionView3D *rv3d= ar->regiondata; Base *base; @@ -309,11 +310,63 @@ int calc_manipulator_stats(const bContext *C) calc_tw_center(scene, vec); totsel= 1; } else { - /* do vertices for center, and if still no normal found, use vertex normals */ - for(eve= em->verts.first; eve; eve= eve->next) { - if(eve->f & SELECT) { - totsel++; - calc_tw_center(scene, eve->co); + /* do vertices/edges/faces for center depending on selection + mode. note we can't use just vertex selection flag because + it is not flush down on changes */ + if(ts->selectmode & SCE_SELECT_VERTEX) { + for(eve= em->verts.first; eve; eve= eve->next) { + if(eve->f & SELECT) { + totsel++; + calc_tw_center(scene, eve->co); + } + } + } + else if(ts->selectmode & SCE_SELECT_EDGE) { + EditEdge *eed; + + for(eve= em->verts.first; eve; eve= eve->next) eve->f1= 0; + for(eed= em->edges.first; eed; eed= eed->next) { + if(eed->h==0 && (eed->f & SELECT)) { + if(!eed->v1->f1) { + eed->v1->f1= 1; + totsel++; + calc_tw_center(scene, eed->v1->co); + } + if(!eed->v2->f1) { + eed->v2->f1= 1; + totsel++; + calc_tw_center(scene, eed->v2->co); + } + } + } + } + else { + EditFace *efa; + + for(eve= em->verts.first; eve; eve= eve->next) eve->f1= 0; + for(efa= em->faces.first; efa; efa= efa->next) { + if(efa->h==0 && (efa->f & SELECT)) { + if(!efa->v1->f1) { + efa->v1->f1= 1; + totsel++; + calc_tw_center(scene, efa->v1->co); + } + if(!efa->v2->f1) { + efa->v2->f1= 1; + totsel++; + calc_tw_center(scene, efa->v2->co); + } + if(!efa->v3->f1) { + efa->v3->f1= 1; + totsel++; + calc_tw_center(scene, efa->v3->co); + } + if(efa->v4 && !efa->v4->f1) { + efa->v4->f1= 1; + totsel++; + calc_tw_center(scene, efa->v4->co); + } + } } } } |