/** * Created by syl on 2016/7/27 0027. */ var BitmapDataBezierMeshAlgorithm = (function() { function BitmapDataBezierMeshAlgorithm($colCount, $rowCount) { var s = this; LExtends(s, LObject, []); s.colCount = $colCount || 1; s.rowCount = $rowCount || 1; s.tr = new TransformTrianglesResult(); s.cr2point = {}; s.buildMesh(); s.subdivisionU = 4; s.subdivisionV = 4; s.bze = new Bez(); } var p = { result:function() { var s = this; var ut,vt,col,row,local_ut,local_vt; var mesh_tl,mesh_tr,mesh_bl,mesh_br; var lp = new LPoint(0,0); var rp = new LPoint(0,0); var mp = new LPoint(0,0); s.tr.uvt = []; s.tr.vectices = []; s.tr.indices = []; for(i=0;i<= s.subdivisionV;i++){ ut = i/s.subdivisionV; for(j=0;j<= s.subdivisionU;j++){ vt = j/s.subdivisionU; col = parseInt(ut / (1 / s.colCount)); row = parseInt(vt / (1 / s.rowCount)); col = col == s.colCount ? col - 1 : col; row = row == s.rowCount ? row - 1 : row; local_ut = (ut - col / s.colCount) / (1 / s.colCount); local_vt = (vt - row / s.rowCount) / (1 / s.rowCount); mesh_tl = s.pointAt(col, row); mesh_tr = s.pointAt(col + 1, row); mesh_bl = s.pointAt(col, row + 1); mesh_br = s.pointAt(col + 1, row + 1); lp.x = s.bze.cubicTo(mesh_tl.x,mesh_tl.bottomControl.x, mesh_bl.topControl.x, mesh_bl.x,local_vt); lp.y = s.bze.cubicTo(mesh_tl.y,mesh_tl.bottomControl.y, mesh_bl.topControl.y, mesh_bl.y,local_vt); rp.x = s.bze.cubicTo(mesh_tr.x,mesh_tr.bottomControl.x, mesh_br.topControl.x, mesh_br.x,local_vt); rp.y = s.bze.cubicTo(mesh_tr.y,mesh_tr.bottomControl.y, mesh_br.topControl.y, mesh_br.y,local_vt); mp.x = s.bze.cubicTo(lp.x,(1 - local_vt) * mesh_tl.rightControl.x + local_vt * mesh_bl.rightControl.x, (1 - local_vt) * mesh_tr.leftControl.x + local_vt * mesh_br.leftControl.x, rp.x,local_ut); mp.y = s.bze.cubicTo(lp.y,(1 - local_vt) * mesh_tl.rightControl.y + local_vt * mesh_bl.rightControl.y, (1 - local_vt) * mesh_tr.leftControl.y + local_vt * mesh_br.leftControl.y, rp.y,local_ut); s.tr.vectices.push(mp.x,mp.y); s.tr.uvt.push(ut,vt); } } for(i = 0; i < s.subdivisionV; i++) { for(j = 0; j < s.subdivisionU; j++) { s.tr.indices.push(i*(s.subdivisionU+1)+j,(i+1)*(s.subdivisionU+1)+j,i*(s.subdivisionU+1)+j+1); s.tr.indices.push((i+1)*(s.subdivisionU+1)+j,i*(s.subdivisionU+1)+j+1,(i+1)*(s.subdivisionU+1)+j+1); } } }, buildMesh:function() { var s = this; var i; var j; var cr; var uva; var ilen = s.colCount; var jlen = s.rowCount; for(i = 0; i <= ilen; i++) { for(j = 0; j <= jlen; j++) { cr = s.toCR(i, j); uva = new UVAnchorPoint(); uva.col = i; uva.row = j; uva.leftControl.enabled = i > 0; uva.rightControl.enabled = i < ilen; uva.topControl.enabled = j > 0; uva.bottomControl.enabled = j < jlen; s.cr2point[cr] = uva; } } }, toCR:function(col, row) { var s = this; return col+","+row; }, pointAt:function(col, row) { var s = this; if(col < 0 || col > s.colCount || row < 0 || row > s.rowCount) return null; var cr = s.toCR(col, row); return s.cr2point[cr]; }, applyResult:function(target, container) { var s = this; container.graphics.clear(); container.graphics.beginBitmapFill(target); container.graphics.drawTriangles(s.tr.vectices, s.tr.indices, s.tr.uvt,.5); } } for (var k in p) { BitmapDataBezierMeshAlgorithm.prototype[k] = p[k]; } return BitmapDataBezierMeshAlgorithm; })();
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交