Матричное преобразование dojo.gfx
Матричные преобразования заставили мою голову кружиться. У меня есть группа dojox.gfx.group, которую я хочу перетаскивать с помощью Mover, а затем иметь возможность вращать ее вокруг определенной точки на поверхности. Мой основной код выглядит так:
this.m = dojox.gfx.matrix,
.
.
.
updateMatrix: function(){
var mtx = this.group._getRealMatrix();
var trans_m = this.m.translate(mtx.dx, mtx.dy);
this.group.setTransform([this.m.rotateAt(this.rotation, 0, 0), trans_m]);
}
Точка вращения в (0,0) просто для простоты. Кажется, я не понимаю, как вращается группа.
Любая ссылка на упрощенный учебник по матричным преобразованиям также поможет. Те , что я проверил, не очень помогают.
2 ответа
Попробуйте официальный учебник по матрице dojox.gfx. Посмотрите, поможет ли официальная документация.
Официальная документация - это то, где моя голова начала вращаться. Я смотрел на это довольно долго, потому что я не мог понять, как передать новые координаты в грядущие преобразования матрицы.
Мне наконец удалось выяснить проблему, хотя. Это был вопрос подключения слушателя, когда Mover запускает onMoveStop:
dojo.connect(movable, "onMoveStop", map, "reposition");
Затем я получаю новые перемещенные расстояния и передаю их в любой перевод матрицы вращения или масштабирования в моем графическом классе:
updateMatrix: function(){
//So far it is the group which is being rotated
if (this.group) {
if(!this.curr_matrix){
this.curr_matrix = this.initial_matrix;
}
this.group.setTransform([
this.m.rotateAt(this.rotation, this.stage_w_2, this.stage_h_2),
this.m.scaleAt(this.scaling, this.stage_w_2, this.stage_h_2),
this.curr_matrix
]);
//this.group.setTransform([
// this.m.rotateAt(this.rotation, mid_x, mid_y),
// this.m.scaleAt(this.scaling, mid_x, mid_y),
// this.initial_matrix]);
}
},
reposition: function(){
mtx = this.group._getRealMatrix();
this.curr_matrix = this.m.translate(mtx.dx, mtx.dy);
},
Жизнь снова денди. Спасибо Евгению за предложения.