flash on 2009-2-2 zahir forked:2favorite:0lines:238license : All rights reserved modified : 2009-02-02 05:40:47 Embed Tweet package { import __AS3__.vec.Vector; import flash.display.*; import flash.geom.*; import flash.utils.*; public class GradientMesh2 extends Sprite{ private static const _data:Vector.<int> = Vector.<int>([165, 1, 0, 0, 0, 164, 18, 0, 84, 104, 114, 101, 101, 80, 111, 105, 110, 116, 71, 114, 97, 100, 105, 101, 110, 116, 160, 12, 110, 97, 109, 101, 115, 112, 97, 99, 101, 0, 80, 101, 116, 114, 105, 32, 76, 101, 115, 107, 105, 110, 101, 110, 58, 58, 69, 120, 97, 109, 112, 108, 101, 0, 160, 12, 118, 101, 110, 100, 111, 114, 0, 80, 101, 116, 114, 105, 32, 76, 101, 115, 107, 105, 110, 101, 110, 0, 160, 8, 118, 101, 114, 115, 105, 111, 110, 0, 1, 0, 160, 12, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 0, 67, 114, 101, 97, 116, 101, 115, 32, 97, 32, 103, 114, 97, 100, 105, 101, 110, 116, 32, 102, 105, 108, 108, 32, 117, 115, 105, 110, 103, 32, 116, 104, 114, 101, 101, 32, 115, 112, 101, 99, 105, 102, 105, 101, 100, 32, 112, 111, 105, 110, 116, 115, 32, 97, 110, 100, 32, 99, 111, 108, 111, 114, 115, 46, 0, 161, 1, 2, 0, 0, 12, 95, 79, 117, 116, 67, 111, 111, 114, 100, 0, 161, 1, 2, 0, 0, 3, 112, 111, 105, 110, 116, 49, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 69, 122, 0, 0, 69, 122, 0, 0, 161, 1, 4, 1, 0, 15, 99, 111, 108, 111, 114, 49, 0, 162, 4, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 63, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 128, 0, 0, 161, 1, 2, 2, 0, 12, 112, 111, 105, 110, 116, 50, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 69, 122, 0, 0, 69, 122, 0, 0, 162, 2, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 67, 250, 0, 0, 67, 250, 0, 0, 161, 1, 4, 3, 0, 15, 99, 111, 108, 111, 114, 50, 0, 162, 4, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 63, 128, 0, 0, 0, 0, 0, 0, 63, 128, 0, 0, 161, 1, 2, 2, 0, 3, 112, 111, 105, 110, 116, 51, 0, 162, 2, 109, 105, 110, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 2, 109, 97, 120, 86, 97, 108, 117, 101, 0, 69, 122, 0, 0, 69, 122, 0, 0, 162, 2, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 67, 250, 0, 0, 161, 1, 4, 4, 0, 15, 99, 111, 108, 111, 114, 51, 0, 162, 4, 100, 101, 102, 97, 117, 108, 116, 86, 97, 108, 117, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 128, 0, 0, 63, 128, 0, 0, 161, 2, 4, 5, 0, 15, 100, 115, 116, 0, 29, 6, 0, 193, 2, 0, 16, 0, 2, 6, 0, 193, 0, 0, 176, 0, 29, 6, 0, 49, 6, 0, 16, 0, 29, 6, 0, 193, 2, 0, 176, 0, 2, 6, 0, 193, 0, 0, 176, 0, 29, 7, 0, 193, 6, 0, 16, 0, 29, 8, 0, 128, 7, 0, 64, 0, 50, 6, 0, 128, 0, 0, 0, 0, 2, 6, 0, 128, 6, 0, 192, 0, 29, 8, 0, 64, 6, 0, 0, 0, 50, 6, 0, 128, 0, 0, 0, 0, 2, 6, 0, 128, 7, 0, 0, 0, 29, 8, 0, 32, 6, 0, 0, 0, 29, 8, 0, 16, 6, 0, 128, 0, 29, 6, 0, 128, 6, 0, 128, 0, 3, 6, 0, 128, 7, 0, 64, 0, 29, 6, 0, 64, 7, 0, 0, 0, 3, 6, 0, 64, 6, 0, 192, 0, 29, 7, 0, 32, 6, 0, 0, 0, 2, 7, 0, 32, 6, 0, 64, 0, 29, 10, 0, 243, 7, 0, 170, 0, 4, 9, 0, 4, 10, 0, 0, 0, 3, 9, 0, 4, 8, 0, 0, 0, 29, 8, 0, 4, 9, 0, 0, 0, 29, 6, 0, 193, 0, 0, 16, 0, 2, 6, 0, 193, 0, 0, 176, 0, 29, 7, 0, 49, 6, 0, 16, 0, 34, 7, 0, 52, 8, 0, 0, 0, 29, 6, 0, 193, 7, 0, 176, 0, 29, 7, 0, 49, 6, 0, 16, 0, 50, 9, 0, 128, 0, 0, 0, 0, 50, 9, 0, 64, 63, 128, 0, 0, 10, 7, 0, 32, 9, 0, 0, 0, 29, 9, 0, 32, 7, 0, 128, 0, 10, 7, 0, 16, 9, 0, 0, 0, 29, 9, 0, 16, 7, 0, 192, 0, 9, 9, 0, 32, 9, 0, 64, 0, 29, 10, 0, 128, 9, 0, 128, 0, 9, 9, 0, 16, 9, 0, 64, 0, 29, 10, 0, 64, 9, 0, 192, 0, 29, 6, 0, 193, 9, 0, 176, 0, 29, 9, 0, 128, 6, 0, 0, 0, 29, 9, 0, 64, 6, 0, 0, 0, 29, 9, 0, 32, 6, 0, 0, 0, 29, 9, 0, 16, 6, 0, 0, 0, 50, 10, 0, 240, 63, 128, 0, 0, 2, 10, 0, 243, 9, 0, 27, 0, 29, 11, 0, 243, 1, 0, 27, 0, 3, 11, 0, 243, 10, 0, 27, 0, 29, 12, 0, 243, 3, 0, 27, 0, 3, 12, 0, 243, 9, 0, 27, 0, 1, 11, 0, 243, 12, 0, 27, 0, 29, 9, 0, 128, 6, 0, 64, 0, 29, 9, 0, 64, 6, 0, 64, 0, 29, 9, 0, 32, 6, 0, 64, 0, 29, 9, 0, 16, 6, 0, 64, 0, 50, 10, 0, 240, 63, 128, 0, 0, 2, 10, 0, 243, 9, 0, 27, 0, 29, 12, 0, 243, 11, 0, 27, 0, 3, 12, 0, 243, 10, 0, 27, 0, 29, 13, 0, 243, 4, 0, 27, 0, 3, 13, 0, 243, 9, 0, 27, 0, 1, 12, 0, 243, 13, 0, 27, 0, 29, 5, 0, 243, 12, 0, 27, 0 ]); private static var _byteCode:ByteArray; private var dp_arr:Array; private var w:int = 3; private var h:int = 3; private var margin:int = 150; private var myShader:Shader; private var s:Shape; public function GradientMesh2(){ super(); s = new Shape(); initShader(); } private function initShader():void{ if (!_byteCode){ _byteCode = new ByteArray(); var len:int = _data.length; for (var i:int = 0; i < len; i++){ _byteCode.writeByte(_data[i]); } setShader( _byteCode ); setPoligon(); } } private function setShader( _bc:ByteArray):void{ myShader = new Shader(); myShader.byteCode = _bc; } private function setPoligon():void{ dp_arr = addPoligon(h,w, margin); for(var i:int = 1; i<h; i++){ for(var j:int = 1; j<w; j++){ addFace( dp_arr[i-1][j-1], dp_arr[i-1][j], dp_arr[i][j-1], dp_arr[i][j]); } } //this.addChild(s); // ドラッグするポインタはあと吊るし for(i = 0; i<h; i++){ for(j = 0; j<w; j++){ this.addChild( dp_arr[i][j] ); } } } private function addFace(p1:Poligon, p2:Poligon, p3:Poligon, p4:Poligon):void{ new GradientFace( this, myShader, p1, p2, p3, p4); } private function addPoligon(_i:int = 2, _j:int = 2, margin:int = 50):Array{ var _arr:Array = []; var ca:Array = [[0xFF0000, 0xFF00],[0xFF, 0]] for(var i:int = 0; i<_i; i++){ var _arr2:Array = []; for(var j:int = 0; j<_j; j++){ _arr2.push( new Poligon(this, new Point(j*margin + 50, i*margin + 50), 0xFFFFFF * Math.random(), 1.0)); } _arr.push(_arr2); } return _arr; } } } import flash.geom.Point; import flash.display.Sprite; import flash.display.Graphics; import flash.display.Shape; import flash.display.Shader; import frocessing.color.ColorLerp; import flash.events.MouseEvent; class GradientFace{ private var shader:Shader; private var myParent:GradientMesh2; private var p1:Poligon, p2:Poligon, p3:Poligon, p4:Poligon, p5:Poligon; private var p6:Poligon, p7:Poligon, p8:Poligon, p9:Poligon; private var _arr:Array; public function GradientFace( _parent:GradientMesh2, _shader:Shader, _p1:Poligon, _p2:Poligon, _p3:Poligon, _p4:Poligon):void{ myParent = _parent; shader = _shader; p1 = _p1; p2 = _p2; p3 = _p3; p4 = _p4; p1.setFace(this); p2.setFace(this); p3.setFace(this); p4.setFace(this); var code1:uint = ColorLerp.lerp(p1.color, p4.color, 0.5); var code2:uint = ColorLerp.lerp(p2.color, p3.color, 0.5); var p:Point = Equation.cross({x1:p1.x, y1:p1.y, x2:p4.x, y2:p4.y},{x1:p3.x, y1:p3.y, x2:p2.x, y2:p2.y}); p5 = new Poligon( myParent, p, ColorLerp.lerp(code1, code2, 0.5)); p.x = p1.x + (p2.x -p1.x)/2; p.y = p1.y; p6 = new Poligon( myParent, p, ColorLerp.lerp(p1.color, p2.color, 0.5)); p.x = p2.x; p.y = p2.y + (p4.y - p2.y)/2; p7 = new Poligon( myParent, p, ColorLerp.lerp(p2.color, p4.color, 0.5)); p.x = p3.x + (p4.x -p3.x)/2; p.y = p3.y; p8 = new Poligon( myParent, p, ColorLerp.lerp(p4.color, p3.color, 0.5)); p.x = p1.x; p.y = p1.y + (p3.y - p1.y)/2; p9 = new Poligon( myParent, p, ColorLerp.lerp(p3.color, p1.color, 0.5)); _arr = []; //* createTriangle( p5, p6, p1); // TOP L createTriangle( p5, p6, p2); // TOP R createTriangle( p5, p7, p2); // RIGHT T createTriangle( p5, p7, p4); // RIGHT B createTriangle( p5, p8, p4); // BOTTOM R createTriangle( p5, p8, p3); // BOTTOM L createTriangle( p5, p9, p3); // LEFT B createTriangle( p5, p9, p1); // LEFT B //*/ /* createTriangle( p9, p6, p1); // TOP L createTriangle( p9, p6, p5); // TOP R createTriangle( p6, p7, p2); // RIGHT T createTriangle( p6, p7, p5); // RIGHT B createTriangle( p7, p8, p4); // BOTTOM R createTriangle( p7, p8, p5); // BOTTOM L createTriangle( p8, p9, p3); // LEFT B createTriangle( p8, p9, p5); // LEFT B //*/ } public function reset():void{ var code1:uint = ColorLerp.lerp(p1.color, p4.color, 0.5); var code2:uint = ColorLerp.lerp(p2.color, p3.color, 0.5); var p:Point = Equation.cross({x1:p1.x, y1:p1.y, x2:p4.x, y2:p4.y},{x1:p3.x, y1:p3.y, x2:p2.x, y2:p2.y}); p5.x = p.x; p5.y = p.y; p5.color = ColorLerp.lerp(code1, code2, 0.5); p6.x = p1.x + (p2.x -p1.x)/2; p6.y = p1.y + (p2.y -p1.y)/2; p7.x = p2.x + (p4.x -p2.x)/2; p7.y = p2.y + (p4.y -p2.y)/2; p8.x = p3.x + (p4.x -p3.x)/2; p8.y = p3.y + (p4.y -p3.y)/2; p9.x = p1.x + (p3.x -p1.x)/2; p9.y = p1.y + (p3.y -p1.y)/2; for(var i:int = 0, len:int = _arr.length; i<len; i++) _arr[i].setShader(); } private function createTriangle(_p1:Poligon, _p2:Poligon, _p3:Poligon):void{ _arr.push( new GradientTriangle(shader, _p1, _p2, _p3) ); myParent.addChild( _arr[_arr.length-1] ); } } class Equation{ public static function cross(o1:Object, o2:Object):Point{ var x:Number=0; var y:Number=0; var A:Number = ( o1.y2 - o1.y1 )/( o1.x2 - o1.x1 ); var B:Number = ( o2.y2 - o2.y1 )/( o2.x2 - o2.x1 ); if( ( o1.x1 != o1.x2 ) && ( o2.x1 != o2.x2 ) ){ x = ( ( o1.x1*A ) - o1.y1 - ( o2.x1*B ) + o2.y1 )/( A-B ); y = A*( x-o1.x1 ) + o1.y1; }else if( ( o1.x1 == o1.x2 ) && ( o2.x1 != o2.x2 ) ){ x = o1.x1; y = B*( x-o2.x1 ) + o2.y1; }else if( ( o1.x1 != o1.x2 ) && ( o2.x1 == o2.x2 ) ){ x = o2.x1; y = A*( x-o1.x1 ) + o1.y1; }else { x=y=0; } return new Point(x,y); } } class GradientTriangle extends Shape{ private var shader:Shader; private var p1:Poligon, p2:Poligon, p3:Poligon; public function GradientTriangle(_shader:Shader, _p1:Poligon, _p2:Poligon, _p3:Poligon):void{ p1 = _p1; p2 = _p2; p3 = _p3; shader = _shader; setShader(); } public function setShader():void{ // setting Points shader.data.point1.value = [p1.x, p1.y]; shader.data.point2.value = [p2.x, p2.y]; shader.data.point3.value = [p3.x, p3.y]; // setting Colors shader.data.color1.value = [ p1.rr, p1.gg, p1.bb, p1.aa ]; shader.data.color2.value = [ p2.rr, p2.gg, p2.bb, p2.aa ]; shader.data.color3.value = [ p3.rr, p3.gg, p3.bb, p3.aa ]; onFill(); } private function onFill():void{ var g:Graphics = this.graphics; g.clear(); //g.lineStyle( 0 , 0xFFFF, 0.5); g.beginShaderFill( shader ); g.moveTo( p1.x, p1.y); g.lineTo( p2.x, p2.y); g.lineTo( p3.x, p3.y); g.lineTo( p1.x, p1.y); g.endFill(); } } class Poligon extends Sprite{ public var color:uint; public var rr:Number, gg:Number, bb:Number, aa:Number; private var _arr:Array = []; private var len:int = 0; public function Poligon(_parent:GradientMesh2, _p:Point, _color:uint, _aa:Number = 1.0 ):void{ super(); x = _p.x; y = _p.y; color = _color; aa = _aa; rr = ( _color >> 16 &0xFF ) / 255; gg = ( _color >> 8 &0xFF ) / 255; bb = ( _color &0xFF ) / 255; draw(); this.addEventListener(MouseEvent.MOUSE_DOWN, onDown); } private function draw():void{ var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x333333); g.beginFill(color); g.drawCircle(0,0,3); g.endFill(); } private function onDown(e:MouseEvent):void{ this.stage.addEventListener( MouseEvent.MOUSE_MOVE, onMove); this.stage.addEventListener( MouseEvent.MOUSE_UP, onUp); } private function onMove(e:MouseEvent):void{ this.x += this.mouseX; this.y += this.mouseY; movePos(); } private function onUp(e:MouseEvent):void{ this.stage.removeEventListener( MouseEvent.MOUSE_MOVE, onMove); this.stage.removeEventListener( MouseEvent.MOUSE_UP, onUp); } public function movePos():void{ for(var i:int = 0; i<len; i++){ _arr[i].reset(); } } public function setPos(_p:Point):void{ x = _p.x; y = _p.y; for(var i:int = 0; i<len; i++){ _arr[i].reset(); } } public function setColor(_color:uint, _aa:Number = 1.0):void{ color = _color; aa = _aa; rr = ( _color >> 16 &0xFF ) / 255; gg = ( _color >> 8 &0xFF ) / 255; bb = ( _color &0xFF ) / 255; draw(); for(var i:int = 0; i<len; i++){ _arr[i].reset(); } } public function setFace(face:GradientFace):void{ _arr.push(face); len = _arr.length; } } Code Fullscreen Preview Fullscreen ColorLerp.lerp Shader removeEventListener addEventListener clear ByteArray writeByte byteCode MouseEvent.MOUSE_MOVE MouseEvent.MOUSE_UP MouseEvent push Object MouseEvent.MOUSE_DOWN length reset Point uint Math.random Vector sort new page view favorite forked pv0 forked from: flash on 2009-2-2.. rejoydominic forked:0 favorite:0lines:238 (diff:1) pv0 forked from: flash on 2009-2-2.. rejoydominic forked:0 favorite:0lines:238 (diff:1)