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:
authorJoerg Mueller <nexyon@gmail.com>2011-07-05 17:54:25 +0400
committerJoerg Mueller <nexyon@gmail.com>2011-07-05 17:54:25 +0400
commit3f3c6f5f1fb336f8f0015d7857a1ae153fa2a80f (patch)
tree27e2ae66dd589013c24592fe0803b440a7e014be /source/blender/editors/transform
parent887fd19894047832fbb7a7300e5fc11438b1f3b2 (diff)
parentccd31900ab9659b6fdc035fd91bff9f508334e22 (diff)
Merging from trunk up to r38119.
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform.c2
-rw-r--r--source/blender/editors/transform/transform_constraints.c8
-rw-r--r--source/blender/editors/transform/transform_conversions.c2
-rw-r--r--source/blender/editors/transform/transform_manipulator.c63
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);
+ }
+ }
}
}
}