| Refresh | Home EGTry.com

cuboid (3d like rectangle)


Cuboid shape cuboid

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;
		}
		
	}
}