dojo.gfx矩阵变换

时间:2010-01-10 20:32:30

标签: matrix dojo gfx

Matrix变换让我头晕目眩。我有一个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)只是为了简单起见。我似乎不明白小组是如何轮换的。

任何关于矩阵变换的简单教程的参考也会有所帮助。我检查过的ones没有多大帮助。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

官方文件是我的头开始旋转的地方。很长一段时间以来一直在盯着它,因为我无法弄清楚如何将新坐标提供给即将到来的矩阵变换。

我终于设法解决了这个问题。这是一个将监听器连接到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);
},

生活再次花花公子。感谢Eugene的建议。