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:
authorCampbell Barton <ideasman42@gmail.com>2017-06-17 22:38:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-06-17 22:38:10 +0300
commit49be79693c6d2e3be20b2cd0ecf81e76a7121b2f (patch)
treeec7913671e48abc263c95ef323186f3b57daead7 /source/blender/editors/manipulator_library
parent83c28ff96a5745c7f5713665890211657b45a35f (diff)
Manipulator: use matrix instead of origin
This avoids having to use manipulator-type specific functions to set the orientation. And will make it simpler to access transformation from Python. Currently the matrix is still used as an offset in places. Also per-type orientation values still need to be removed.
Diffstat (limited to 'source/blender/editors/manipulator_library')
-rw-r--r--source/blender/editors/manipulator_library/arrow2d_manipulator.c16
-rw-r--r--source/blender/editors/manipulator_library/arrow3d_manipulator.c26
-rw-r--r--source/blender/editors/manipulator_library/cage2d_manipulator.c38
-rw-r--r--source/blender/editors/manipulator_library/dial3d_manipulator.c18
-rw-r--r--source/blender/editors/manipulator_library/grab3d_manipulator.c6
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_intern.h2
-rw-r--r--source/blender/editors/manipulator_library/primitive3d_manipulator.c10
7 files changed, 59 insertions, 57 deletions
diff --git a/source/blender/editors/manipulator_library/arrow2d_manipulator.c b/source/blender/editors/manipulator_library/arrow2d_manipulator.c
index 159fcd658ec..5e7975d05e3 100644
--- a/source/blender/editors/manipulator_library/arrow2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/arrow2d_manipulator.c
@@ -68,7 +68,7 @@ typedef struct ArrowManipulator2D {
} ArrowManipulator2D;
-static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float origin[2], const float color[4])
+static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float matrix[4][4], const float color[4])
{
const float size = 0.11f;
const float size_h = size / 2.0f;
@@ -78,11 +78,13 @@ static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float origin[2],
uint pos = VertexFormat_add_attrib(immVertexFormat(), "pos", COMP_F32, 2, KEEP_FLOAT);
gpuPushMatrix();
- gpuTranslate2fv(origin);
+ gpuMultMatrix(matrix);
gpuScaleUniform(arrow->manipulator.scale);
gpuRotate2D(RAD2DEGF(arrow->angle));
/* local offset */
- gpuTranslate2f(arrow->manipulator.offset[0] + draw_line_ofs, arrow->manipulator.offset[1]);
+ gpuTranslate2f(
+ arrow->manipulator.matrix_offset[3][0] + draw_line_ofs,
+ arrow->manipulator.matrix_offset[3][1]);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
@@ -113,14 +115,14 @@ static void manipulator_arrow2d_draw(const bContext *UNUSED(C), struct wmManipul
glLineWidth(mpr->line_width);
glEnable(GL_BLEND);
- arrow2d_draw_geom(arrow, mpr->origin, col);
+ arrow2d_draw_geom(arrow, mpr->matrix, col);
glDisable(GL_BLEND);
if (mpr->interaction_data) {
ManipulatorInteraction *inter = arrow->manipulator.interaction_data;
glEnable(GL_BLEND);
- arrow2d_draw_geom(arrow, inter->init_origin, (const float[4]){0.5f, 0.5f, 0.5f, 0.5f});
+ arrow2d_draw_geom(arrow, inter->init_matrix, (const float[4]){0.5f, 0.5f, 0.5f, 0.5f});
glDisable(GL_BLEND);
}
}
@@ -139,7 +141,7 @@ static void manipulator_arrow2d_invoke(
{
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
- copy_v2_v2(inter->init_origin, mpr->origin);
+ copy_m4_m4(inter->init_matrix, mpr->matrix);
mpr->interaction_data = inter;
}
@@ -152,7 +154,7 @@ static int manipulator_arrow2d_test_select(
float mval_local[2];
copy_v2_v2(mval_local, mval);
- sub_v2_v2(mval_local, mpr->origin);
+ sub_v2_v2(mval_local, mpr->matrix[3]);
float line[2][2];
line[0][0] = line[0][1] = line[1][0] = 0.0f;
diff --git a/source/blender/editors/manipulator_library/arrow3d_manipulator.c b/source/blender/editors/manipulator_library/arrow3d_manipulator.c
index f0f7470c058..1d3cb281af1 100644
--- a/source/blender/editors/manipulator_library/arrow3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/arrow3d_manipulator.c
@@ -89,12 +89,12 @@ typedef struct ArrowManipulator3D {
/* -------------------------------------------------------------------- */
-static void manipulator_arrow_position_get(wmManipulator *mpr, float r_pos[3])
+static void manipulator_arrow_matrix_world_get(wmManipulator *mpr, float r_matrix[4][4])
{
ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
- mul_v3_v3fl(r_pos, arrow->direction, arrow->data.offset);
- add_v3_v3(r_pos, arrow->manipulator.origin);
+ copy_m4_m4(r_matrix, arrow->manipulator.matrix);
+ madd_v3_v3fl(r_matrix[3], arrow->direction, arrow->data.offset);
}
static void arrow_draw_geom(const ArrowManipulator3D *arrow, const bool select, const float color[4])
@@ -190,10 +190,10 @@ static void arrow_draw_intern(ArrowManipulator3D *arrow, const bool select, cons
float col[4];
float rot[3][3];
float mat[4][4];
- float final_pos[3];
+ float final_matrix[4][4];
manipulator_color_get(&arrow->manipulator, highlight, col);
- manipulator_arrow_position_get(&arrow->manipulator, final_pos);
+ manipulator_arrow_matrix_world_get(&arrow->manipulator, final_matrix);
if (arrow->flag & ARROW_UP_VECTOR_SET) {
copy_v3_v3(rot[2], arrow->direction);
@@ -204,12 +204,12 @@ static void arrow_draw_intern(ArrowManipulator3D *arrow, const bool select, cons
rotation_between_vecs_to_mat3(rot, up, arrow->direction);
}
copy_m4_m3(mat, rot);
- copy_v3_v3(mat[3], final_pos);
+ copy_v3_v3(mat[3], final_matrix[3]);
mul_mat3_m4_fl(mat, arrow->manipulator.scale);
gpuPushMatrix();
gpuMultMatrix(mat);
- gpuTranslate3fv(arrow->manipulator.offset);
+ gpuMultMatrix(arrow->manipulator.matrix_offset);
glEnable(GL_BLEND);
arrow_draw_geom(arrow, select, col);
@@ -221,12 +221,12 @@ static void arrow_draw_intern(ArrowManipulator3D *arrow, const bool select, cons
ManipulatorInteraction *inter = arrow->manipulator.interaction_data;
copy_m4_m3(mat, rot);
- copy_v3_v3(mat[3], inter->init_origin);
+ copy_v3_v3(mat[3], inter->init_matrix[3]);
mul_mat3_m4_fl(mat, inter->init_scale);
gpuPushMatrix();
gpuMultMatrix(mat);
- gpuTranslate3fv(arrow->manipulator.offset);
+ gpuMultMatrix(arrow->manipulator.matrix_offset);
glEnable(GL_BLEND);
arrow_draw_geom(arrow, select, (const float [4]){0.5f, 0.5f, 0.5f, 0.5f});
@@ -269,7 +269,7 @@ static void manipulator_arrow_modal(bContext *C, wmManipulator *mpr, const wmEve
bool use_vertical = false;
- copy_v3_v3(orig_origin, inter->init_origin);
+ copy_v3_v3(orig_origin, inter->init_matrix[3]);
orig_origin[3] = 1.0f;
add_v3_v3v3(offset, orig_origin, arrow->direction);
offset[3] = 1.0f;
@@ -313,7 +313,7 @@ static void manipulator_arrow_modal(bContext *C, wmManipulator *mpr, const wmEve
float zfac = ED_view3d_calc_zfac(rv3d, orig_origin, NULL);
ED_view3d_win_to_delta(ar, dir2d_final, offset, zfac);
- add_v3_v3v3(orig_origin, offset, inter->init_origin);
+ add_v3_v3v3(orig_origin, offset, inter->init_matrix[3]);
/* calculate view vector for the new position */
if (rv3d->is_persp) {
@@ -402,7 +402,7 @@ static void manipulator_arrow_invoke(
inter->init_scale = mpr->scale;
- manipulator_arrow_position_get(mpr, inter->init_origin);
+ manipulator_arrow_matrix_world_get(mpr, inter->init_matrix);
mpr->interaction_data = inter;
}
@@ -535,7 +535,7 @@ static void MANIPULATOR_WT_arrow_3d(wmManipulatorType *wt)
/* api callbacks */
wt->draw = manipulator_arrow_draw;
wt->draw_select = manipulator_arrow_draw_select;
- wt->position_get = manipulator_arrow_position_get;
+ wt->matrix_world_get = manipulator_arrow_matrix_world_get;
wt->modal = manipulator_arrow_modal;
wt->setup = manipulator_arrow_setup;
wt->invoke = manipulator_arrow_invoke;
diff --git a/source/blender/editors/manipulator_library/cage2d_manipulator.c b/source/blender/editors/manipulator_library/cage2d_manipulator.c
index 9236a5ef10e..bf6c23f98e7 100644
--- a/source/blender/editors/manipulator_library/cage2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/cage2d_manipulator.c
@@ -219,8 +219,8 @@ static void manipulator_rect_transform_draw(const bContext *UNUSED(C), wmManipul
BLI_assert(cage->style != -1);
gpuPushMatrix();
- gpuTranslate2f(mpr->origin[0] + mpr->offset[0],
- mpr->origin[1] + mpr->offset[1]);
+ gpuMultMatrix(mpr->matrix);
+ gpuMultMatrix(mpr->matrix_offset);
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM)
gpuScaleUniform(cage->scale[0]);
else
@@ -281,9 +281,9 @@ static int manipulator_rect_transform_test_select(
float aspx = 1.0f, aspy = 1.0f;
/* rotate mouse in relation to the center and relocate it */
- sub_v2_v2v2(point_local, mouse, mpr->origin);
- point_local[0] -= mpr->offset[0];
- point_local[1] -= mpr->offset[1];
+ sub_v2_v2v2(point_local, mouse, mpr->matrix[3]);
+ point_local[0] -= mpr->matrix_offset[3][0];
+ point_local[1] -= mpr->matrix_offset[3][1];
//rotate_m2(matrot, -cage->transform.rotation);
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM)
@@ -419,7 +419,7 @@ static void manipulator_rect_transform_invoke(
Cage2D *cage = (Cage2D *)mpr;
RectTransformInteraction *data = MEM_callocN(sizeof(RectTransformInteraction), "cage_interaction");
- copy_v2_v2(data->orig_offset, mpr->offset);
+ copy_v2_v2(data->orig_offset, mpr->matrix_offset[3]);
copy_v2_v2(data->orig_scale, cage->scale);
data->orig_mouse[0] = event->mval[0];
@@ -435,26 +435,26 @@ static void manipulator_rect_transform_modal(
Cage2D *cage = (Cage2D *)mpr;
RectTransformInteraction *data = mpr->interaction_data;
/* needed here as well in case clamping occurs */
- const float orig_ofx = mpr->offset[0], orig_ofy = mpr->offset[1];
+ const float orig_ofx = mpr->matrix_offset[3][0], orig_ofy = mpr->matrix_offset[3][1];
const float valuex = (event->mval[0] - data->orig_mouse[0]);
const float valuey = (event->mval[1] - data->orig_mouse[1]);
if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_TRANSLATE) {
- mpr->offset[0] = data->orig_offset[0] + valuex;
- mpr->offset[1] = data->orig_offset[1] + valuey;
+ mpr->matrix_offset[3][0] = data->orig_offset[0] + valuex;
+ mpr->matrix_offset[3][1] = data->orig_offset[1] + valuey;
}
else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_LEFT) {
- mpr->offset[0] = data->orig_offset[0] + valuex / 2.0;
+ mpr->matrix_offset[3][0] = data->orig_offset[0] + valuex / 2.0;
cage->scale[0] = (cage->w * data->orig_scale[0] - valuex) / cage->w;
}
else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_RIGHT) {
- mpr->offset[0] = data->orig_offset[0] + valuex / 2.0;
+ mpr->matrix_offset[3][0] = data->orig_offset[0] + valuex / 2.0;
cage->scale[0] = (cage->w * data->orig_scale[0] + valuex) / cage->w;
}
else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEY_DOWN) {
- mpr->offset[1] = data->orig_offset[1] + valuey / 2.0;
+ mpr->matrix_offset[3][1] = data->orig_offset[1] + valuey / 2.0;
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
cage->scale[0] = (cage->h * data->orig_scale[0] - valuey) / cage->h;
@@ -464,7 +464,7 @@ static void manipulator_rect_transform_modal(
}
}
else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEY_UP) {
- mpr->offset[1] = data->orig_offset[1] + valuey / 2.0;
+ mpr->matrix_offset[3][1] = data->orig_offset[1] + valuey / 2.0;
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
cage->scale[0] = (cage->h * data->orig_scale[0] + valuey) / cage->h;
@@ -480,18 +480,18 @@ static void manipulator_rect_transform_modal(
cage->scale[0] < MANIPULATOR_RECT_MIN_WIDTH / cage->w)
{
cage->scale[0] = max_ff(MANIPULATOR_RECT_MIN_WIDTH / cage->h, MANIPULATOR_RECT_MIN_WIDTH / cage->w);
- mpr->offset[0] = orig_ofx;
- mpr->offset[1] = orig_ofy;
+ mpr->matrix_offset[3][0] = orig_ofx;
+ mpr->matrix_offset[3][1] = orig_ofy;
}
}
else {
if (cage->scale[0] < MANIPULATOR_RECT_MIN_WIDTH / cage->w) {
cage->scale[0] = MANIPULATOR_RECT_MIN_WIDTH / cage->w;
- mpr->offset[0] = orig_ofx;
+ mpr->matrix_offset[3][0] = orig_ofx;
}
if (cage->scale[1] < MANIPULATOR_RECT_MIN_WIDTH / cage->h) {
cage->scale[1] = MANIPULATOR_RECT_MIN_WIDTH / cage->h;
- mpr->offset[1] = orig_ofy;
+ mpr->matrix_offset[3][1] = orig_ofy;
}
}
@@ -499,7 +499,7 @@ static void manipulator_rect_transform_modal(
mpr_prop = WM_manipulator_property_find(mpr, "offset");
if (mpr_prop->prop != NULL) {
- RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, mpr->offset);
+ RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, mpr->matrix_offset[3]);
RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
}
@@ -523,7 +523,7 @@ static void manipulator_rect_transform_property_update(wmManipulator *mpr, wmMan
Cage2D *cage = (Cage2D *)mpr;
if (STREQ(mpr_prop->idname, "offset")) {
- manipulator_rect_transform_get_prop_value(mpr, mpr_prop, mpr->offset);
+ manipulator_rect_transform_get_prop_value(mpr, mpr_prop, mpr->matrix_offset[3]);
}
else if (STREQ(mpr_prop->idname, "scale")) {
manipulator_rect_transform_get_prop_value(mpr, mpr_prop, cage->scale);
diff --git a/source/blender/editors/manipulator_library/dial3d_manipulator.c b/source/blender/editors/manipulator_library/dial3d_manipulator.c
index 926bf1f2bdc..0aa3e929439 100644
--- a/source/blender/editors/manipulator_library/dial3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/dial3d_manipulator.c
@@ -110,7 +110,7 @@ static void dial_calc_matrix(const DialManipulator *dial, float mat[4][4])
rotation_between_vecs_to_mat3(rot, up, dial->direction);
copy_m4_m3(mat, rot);
- copy_v3_v3(mat[3], dial->manipulator.origin);
+ copy_v3_v3(mat[3], dial->manipulator.matrix[3]);
mul_mat3_m4_fl(mat, dial->manipulator.scale);
}
@@ -208,12 +208,12 @@ static void dial_ghostarc_get_angles(
/* we might need to invert the direction of the angles */
float view_vec[3], axis_vec[3];
- ED_view3d_global_to_vector(rv3d, dial->manipulator.origin, view_vec);
+ ED_view3d_global_to_vector(rv3d, dial->manipulator.matrix[3], view_vec);
normalize_v3_v3(axis_vec, dial->direction);
float proj_outer_rel[3];
mul_v3_project_m4_v3(proj_outer_rel, mat, co_outer);
- sub_v3_v3(proj_outer_rel, dial->manipulator.origin);
+ sub_v3_v3(proj_outer_rel, dial->manipulator.matrix[3]);
float proj_mval_new_rel[3];
float proj_mval_init_rel[3];
@@ -221,7 +221,7 @@ static void dial_ghostarc_get_angles(
float ray_co[3], ray_no[3];
float ray_lambda;
- plane_from_point_normal_v3(dial_plane, dial->manipulator.origin, axis_vec);
+ plane_from_point_normal_v3(dial_plane, dial->manipulator.matrix[3], axis_vec);
if (!ED_view3d_win_to_ray(ar, v3d, inter->init_mval, ray_co, ray_no, false) ||
!isect_ray_plane_v3(ray_co, ray_no, dial_plane, &ray_lambda, false))
@@ -229,7 +229,7 @@ static void dial_ghostarc_get_angles(
goto fail;
}
madd_v3_v3v3fl(proj_mval_init_rel, ray_co, ray_no, ray_lambda);
- sub_v3_v3(proj_mval_init_rel, dial->manipulator.origin);
+ sub_v3_v3(proj_mval_init_rel, dial->manipulator.matrix[3]);
if (!ED_view3d_win_to_ray(ar, v3d, mval, ray_co, ray_no, false) ||
!isect_ray_plane_v3(ray_co, ray_no, dial_plane, &ray_lambda, false))
@@ -237,7 +237,7 @@ static void dial_ghostarc_get_angles(
goto fail;
}
madd_v3_v3v3fl(proj_mval_new_rel, ray_co, ray_no, ray_lambda);
- sub_v3_v3(proj_mval_new_rel, dial->manipulator.origin);
+ sub_v3_v3(proj_mval_new_rel, dial->manipulator.matrix[3]);
/* Start direction from mouse or set by user */
const float *proj_init_rel = dial->use_start_direction ? dial->start_direction : proj_mval_init_rel;
@@ -284,7 +284,7 @@ static void dial_draw_intern(
gpuPushMatrix();
gpuMultMatrix(mat);
- gpuTranslate3fv(dial->manipulator.offset);
+ gpuMultMatrix(dial->manipulator.matrix_offset);
/* draw rotation indicator arc first */
if ((dial->manipulator.flag & WM_MANIPULATOR_DRAW_VALUE) &&
@@ -335,7 +335,7 @@ static void manipulator_dial_draw_select(const bContext *C, wmManipulator *mpr,
RegionView3D *rv3d = ar->regiondata;
copy_v3_v3(clip_plane, rv3d->viewinv[2]);
- clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->origin);
+ clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->matrix[3]);
glEnable(GL_CLIP_DISTANCE0);
}
@@ -363,7 +363,7 @@ static void manipulator_dial_draw(const bContext *C, wmManipulator *mpr)
RegionView3D *rv3d = ar->regiondata;
copy_v3_v3(clip_plane, rv3d->viewinv[2]);
- clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->origin);
+ clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->matrix[3]);
clip_plane[3] -= 0.02 * dial->manipulator.scale;
glEnable(GL_CLIP_DISTANCE0);
diff --git a/source/blender/editors/manipulator_library/grab3d_manipulator.c b/source/blender/editors/manipulator_library/grab3d_manipulator.c
index 136613e22c2..e9c9f13cb19 100644
--- a/source/blender/editors/manipulator_library/grab3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/grab3d_manipulator.c
@@ -87,7 +87,7 @@ static void grab_calc_matrix(const GrabManipulator *grab, float mat[4][4])
rotation_between_vecs_to_mat3(rot, up, grab->direction);
copy_m4_m3(mat, rot);
- copy_v3_v3(mat[3], grab->manipulator.origin);
+ copy_v3_v3(mat[3], grab->manipulator.matrix[3]);
mul_mat3_m4_fl(mat, grab->manipulator.scale);
}
@@ -160,7 +160,7 @@ static void grab3d_draw_intern(
gpuTranslate3fv(inter->output.co_ofs);
}
gpuMultMatrix(mat);
- gpuTranslate3fv(grab->manipulator.offset);
+ gpuMultMatrix(grab->manipulator.matrix_offset);
glEnable(GL_BLEND);
grab_geom_draw(grab, col, select);
glDisable(GL_BLEND);
@@ -169,7 +169,7 @@ static void grab3d_draw_intern(
if (grab->manipulator.interaction_data) {
gpuPushMatrix();
gpuMultMatrix(mat);
- gpuTranslate3fv(grab->manipulator.offset);
+ gpuMultMatrix(grab->manipulator.matrix_offset);
glEnable(GL_BLEND);
grab_geom_draw(grab, (const float [4]){0.5f, 0.5f, 0.5f, 0.5f}, select);
glDisable(GL_BLEND);
diff --git a/source/blender/editors/manipulator_library/manipulator_library_intern.h b/source/blender/editors/manipulator_library/manipulator_library_intern.h
index ec04349ec33..ce71017e7bc 100644
--- a/source/blender/editors/manipulator_library/manipulator_library_intern.h
+++ b/source/blender/editors/manipulator_library/manipulator_library_intern.h
@@ -50,7 +50,7 @@ typedef struct ManipulatorCommonData {
typedef struct ManipulatorInteraction {
float init_value; /* initial property value */
- float init_origin[3];
+ float init_matrix[4][4];
float init_mval[2];
float init_offset;
float init_scale;
diff --git a/source/blender/editors/manipulator_library/primitive3d_manipulator.c b/source/blender/editors/manipulator_library/primitive3d_manipulator.c
index 743927c4147..d8dbf4a52d6 100644
--- a/source/blender/editors/manipulator_library/primitive3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/primitive3d_manipulator.c
@@ -118,7 +118,7 @@ static void manipulator_primitive_draw_intern(
}
copy_m4_m3(mat, rot);
- copy_v3_v3(mat[3], prim->manipulator.origin);
+ copy_v3_v3(mat[3], prim->manipulator.matrix[3]);
mul_mat3_m4_fl(mat, prim->manipulator.scale);
gpuPushMatrix();
@@ -129,7 +129,7 @@ static void manipulator_primitive_draw_intern(
col_inner[3] *= 0.5f;
glEnable(GL_BLEND);
- gpuTranslate3fv(prim->manipulator.offset);
+ gpuMultMatrix(prim->manipulator.matrix_offset);
manipulator_primitive_draw_geom(col_inner, col_outer, prim->style);
glDisable(GL_BLEND);
@@ -143,14 +143,14 @@ static void manipulator_primitive_draw_intern(
col_outer[3] = 0.8f;
copy_m4_m3(mat, rot);
- copy_v3_v3(mat[3], inter->init_origin);
+ copy_v3_v3(mat[3], inter->init_matrix[3]);
mul_mat3_m4_fl(mat, inter->init_scale);
gpuPushMatrix();
gpuMultMatrix(mat);
glEnable(GL_BLEND);
- gpuTranslate3fv(prim->manipulator.offset);
+ gpuMultMatrix(prim->manipulator.matrix_offset);
manipulator_primitive_draw_geom(col_inner, col_outer, prim->style);
glDisable(GL_BLEND);
@@ -191,7 +191,7 @@ static void manipulator_primitive_invoke(
{
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
- copy_v3_v3(inter->init_origin, mpr->origin);
+ copy_m4_m4(inter->init_matrix, mpr->matrix);
inter->init_scale = mpr->scale;
mpr->interaction_data = inter;