// forked from hacker_ah3i35qm's forked from: How do you make a pentagon in sandy package { import flash.display.Sprite; import flash.display.StageScaleMode; import flash.events.Event; import flash.geom.Point; import sandy.core.*; import sandy.core.data.*; import sandy.core.scenegraph.*; import sandy.materials.*; import sandy.materials.attributes.*; import sandy.extrusion.*; import sandy.extrusion.data.*; [SWF(backgroundColor="#7F7F7F", frameRate="150", width="150", height="150")] public class Simple extends Sprite { private var scene:Scene3D; private var ext:Extrusion; var sVal:String = "-410 440 0 440 0 0 410 0 410 -145 0 -145 0 0 -25 0 -25 120 0 120 0 0 -360 0 -360 -390 0 -390 0 0 360 0 360 120 0 120 0 0 25 0 25 -145 0 -145 0 0 -410 0 0"; public function Simple():void { stage.scaleMode = StageScaleMode.NO_SCALE; // minimal sandy setup scene = new Scene3D ("scene", this, new Camera3D (150, 150), new Group("root")); // first matrix does not transform profile at all var m0:Matrix4 = new Matrix4; m0.identity (); // second matrix pushes profile 50 pixels backwards var m1:Matrix4 = new Matrix4; m1.translation (0, 0, 20); var aVals:Array = sVal.split(" "); var aPoly:Array = []; var prev:Point; for (var i:int = 0; i<aVals.length-1; i+=2) { var p:Point = new Point(aVals[i], aVals[i+1]); if (!prev) aPoly.push( new Point(aVals[i]/10, aVals[i+1]/10)); else if (!Point(p).equals(prev)) aPoly.push( new Point(aVals[i]/10, aVals[i+1]/10)); prev = p; } aPoly.reverse(); var q:Polygon2D = new Polygon2D (aPoly); // create extrusion ext = new Extrusion ("q", q, [m0, m1]); scene.root.addChild (ext); // add some material ext.appearance = new Appearance (new ColorMaterial (0xFFAF00, 1, new MaterialAttributes (new LightAttributes(false, 0.3)))); ext.appearance.frontMaterial.lightingEnable = true; // show it addEventListener ("enterFrame", render); } private function render (e:*):void { ext.rotateY += 0.1; scene.render (); } } } forked from: forked from: How do you make a pentagon in sandy