package { import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Point; public class Cuboid extends Sprite { public function Cuboid() { var p1:Point=new Point(50, 50); var w:Number=60; var h:Number=100; var topDegree:Number=25; var p2:Point=new Point(p1.x+w, p1.y+h); //main rectangle drawRect(p1, p2, 1); //top var h1:Number=20; var topRect:Shape=drawRect(new Point(p1.x, p1.y-h1), new Point(p1.x+w, p1.y),2); topRect.transform.matrix=skewX(p1.y,-topDegree); //left var w1:Number=h1*Math.tan(topDegree*Math.PI/180); var leftRect:Shape=new Shape(); addChild(leftRect); var g:Graphics=leftRect.graphics; g.lineStyle(1, 0x000000, 1); g.beginFill(0x000000,0.1); g.drawRect(p1.x+w, p1.y, w1, h); g.endFill(); leftRect.transform.matrix=skewY(p1.x+w,-(90-topDegree)); } public function drawRect(p1:Point, p2:Point, alpha:Number):Shape { var shape:Shape=new Shape(); var g:Graphics=shape.graphics; g.lineStyle(1, 0x000000, alpha); g.drawRect(p1.x, p1.y, Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y)); addChild(shape); return shape; } public static function skewX(yc:Number, angleDegree:Number):Matrix { var radian:Number=angleDegree*Math.PI/180; var c:Number=Math.tan(radian); var m:Matrix=new Matrix(1,0,c,1, -c*yc,0); return m; } public static function skewY(xc:Number, angleDegree:Number):Matrix { var radian:Number=angleDegree*Math.PI/180; var b:Number=Math.tan(radian); var m:Matrix=new Matrix(1,b,0,1, 0, -b*xc); return m; } } }