Cuboid.as
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;
}
}
}