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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-01-05 15:12:21 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-01-05 15:20:33 +0400
commit99d050f88b57f4eb616542f064da8f47594559f1 (patch)
tree7907321b121c2bf78b05fe3e5b1ab410c1c22849 /source
parent42bd5d7c8081a4f4524c07cc542c772ccf0a26eb (diff)
Text3d: selection in editmode now follows rotated text along path
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_font.h1
-rw-r--r--source/blender/blenkernel/intern/font.c6
-rw-r--r--source/blender/blenlib/BLI_math_matrix.h1
-rw-r--r--source/blender/blenlib/intern/math_matrix.c5
-rw-r--r--source/blender/editors/space_view3d/drawobject.c47
-rw-r--r--source/blender/editors/uvedit/uvedit_parametrizer.c2
6 files changed, 57 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index 16cbcde0167..85aaafda39f 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -55,6 +55,7 @@ struct CharTrans {
typedef struct SelBox {
float x, y, w, h;
+ float rot;
} SelBox;
typedef struct EditFont {
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index a85ddb8733e..556e9dc8c37 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -926,6 +926,12 @@ makebreak:
ct->xof = vec[0] + si * yof;
ct->yof = vec[1] + co * yof;
+
+ if (cu->selboxes && (i >= selstart) && (i <= selend)) {
+ SelBox *sb;
+ sb = &(cu->selboxes[i - selstart]);
+ sb->rot = -ct->rot;
+ }
}
cucu->flag = oldflag;
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index c83494790a8..af251480ece 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -91,6 +91,7 @@ void mul_m4_v3(float M[4][4], float r[3]);
void mul_v3_m4v3(float r[3], float M[4][4], const float v[3]);
void mul_v2_m4v3(float r[2], float M[4][4], const float v[3]);
void mul_v2_m2v2(float r[2], float M[2][2], const float v[2]);
+void mul_m2v2(float M[2][2], float v[2]);
void mul_mat3_m4_v3(float M[4][4], float r[3]);
void mul_m4_v4(float M[4][4], float r[4]);
void mul_v4_m4v4(float r[4], float M[4][4], const float v[4]);
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index a4ea406ed43..c185fe1a16d 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -398,6 +398,11 @@ void mul_v2_m2v2(float r[2], float mat[2][2], const float vec[2])
r[1] = mat[0][1] * x + mat[1][1] * vec[1];
}
+void mul_m2v2(float mat[2][2], float vec[2])
+{
+ mul_v2_m2v2(vec, mat, vec);
+}
+
/* same as mul_m4_v3() but doesnt apply translation component */
void mul_mat3_m4_v3(float mat[4][4], float vec[3])
{
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index c26a8b08bb4..93106ea9161 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -6873,6 +6873,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
set_inverted_drawing(1);
for (i = 0; i <= (selend - selstart); i++) {
SelBox *sb = &(cu->selboxes[i]);
+ float tvec[3];
if (i < (selend - selstart)) {
if (cu->selboxes[i + 1].y == sb->y)
@@ -6883,11 +6884,49 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, const short
else {
selboxw = sb->w;
}
+
+ /* fill in xy below */
+ tvec[2] = 0.001;
+
glBegin(GL_QUADS);
- glVertex3f(sb->x, sb->y, 0.001);
- glVertex3f(sb->x + selboxw, sb->y, 0.001);
- glVertex3f(sb->x + selboxw, sb->y + sb->h, 0.001);
- glVertex3f(sb->x, sb->y + sb->h, 0.001);
+
+ if (sb->rot == 0.0f) {
+ copy_v2_fl2(tvec, sb->x, sb->y);
+ glVertex3fv(tvec);
+
+ copy_v2_fl2(tvec, sb->x + selboxw, sb->y);
+ glVertex3fv(tvec);
+
+ copy_v2_fl2(tvec, sb->x + selboxw, sb->y + sb->h);
+ glVertex3fv(tvec);
+
+ copy_v2_fl2(tvec, sb->x, sb->y + sb->h);
+ glVertex3fv(tvec);
+ }
+ else {
+ float mat[2][2];
+
+ angle_to_mat2(mat, sb->rot);
+
+ copy_v2_fl2(tvec, sb->x, sb->y);
+ glVertex3fv(tvec);
+
+ copy_v2_fl2(tvec, selboxw, 0.0f);
+ mul_m2v2(mat, tvec);
+ add_v2_v2(tvec, &sb->x);
+ glVertex3fv(tvec);
+
+ copy_v2_fl2(tvec, selboxw, sb->h);
+ mul_m2v2(mat, tvec);
+ add_v2_v2(tvec, &sb->x);
+ glVertex3fv(tvec);
+
+ copy_v2_fl2(tvec, 0.0f, sb->h);
+ mul_m2v2(mat, tvec);
+ add_v2_v2(tvec, &sb->x);
+ glVertex3fv(tvec);
+ }
+
glEnd();
}
set_inverted_drawing(0);
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 34c44185026..66e4c01f9d0 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -493,7 +493,7 @@ static void p_chart_uv_transform(PChart *chart, float mat[2][2])
PVert *v;
for (v = chart->verts; v; v = v->nextlink) {
- mul_v2_m2v2(v->uv, mat, v->uv);
+ mul_m2v2(mat, v->uv);
}
}