матричное преобразование dojo.gfx - PullRequest
2 голосов
/ 10 января 2010

Матричные преобразования заставили мою голову кружиться. У меня есть 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 ]

0 голосов
/ 12 января 2010

Официальная документация - это то, где моя голова начала вращаться. Я смотрел на это довольно долго, потому что я не мог понять, как передать новые координаты в грядущие преобразования матрицы.

Мне, наконец, удалось выяснить проблему. Это был вопрос подключения слушателя, когда 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);
},

Жизнь снова денди. Спасибо Евгению за предложения.

0 голосов
/ 11 января 2010
...