2010-01-10 158 views
2

矩阵转换让我头脑转动。我有一个dojox.gfx.group,我想用拖动器拖动它,然后可以在表面上的某个点上旋转它。我的基本代码如下所示:dojo.gfx矩阵转换

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没有太多帮助。

回答

0

官方文件是我的头开始旋转的地方。在相当长的一段时间里,我一直盯着,因为我无法知道如何将新的坐标输入到即将到来的矩阵变换中。

我终于设法弄清楚了这个问题。这是一个监听器连接在动子触发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); 
}, 

生活的华丽再次。感谢尤金的建议。