<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init();"  viewSourceURL="srcview/index.html">
<mx:Script>
    <![CDATA[
        import org.papervision3d.core.geom.Mesh3D;
        import mx.core.UIComponent;
        import org.papervision3d.scenes.*;
        import org.papervision3d.cameras.*;
        import org.papervision3d.materials.*;
        import org.papervision3d.objects.*;

        
        private var paperUi:UIComponent = new UIComponent();
        private var container:Sprite = new Sprite();
        private var scene3d:Scene3D= new Scene3D(container);
        private var pcamera:Camera3D = new Camera3D();
        private var somexid:Number = 0;
        [Embed(source="assets/bitmap.jpg")]
        [Bindable]
        public var imgCls:Class;        
        private var material:BitmapFileMaterial = new BitmapFileMaterial("assets/bitmap.jpg");        

        private var p:DisplayObject3D;
        
        private var rotVx:Number = 0;
        private var rotVy:Number = 0;
        private var rotVz:Number = 0;
        private function init():void {
            hcanv.removeAllChildren();
            scene3d.removeChildByName("pv3dobj");
            removeEventListener(Event.ENTER_FRAME, rotX );
            removeEventListener(Event.ENTER_FRAME, rotY );
            removeEventListener(Event.ENTER_FRAME, rotZ );
            hcanv.addChild(paperUi);
            paperUi.addChild(container);
            container.x = 200;
            container.y = 200;
            pcamera.x = 0;
            pcamera.y = 0;
            pcamera.zoom = 11;

             var cmaterial:ColorMaterial = new ColorMaterial(0xFF0000);
            cmaterial.oneSide = false;
            material.doubleSided = true;
            material.smooth = true;
            createObj();
        }
        private function createObj():void {
            material.smooth = true;
            var size :Number = 180;
            var quality :Number = 6;
            var materialist:MaterialsList = new MaterialsList({
            front:  material,
            back:   material,
            right:  material,
            left:   material,
            top:    material,
            bottom: material});
            switch (String(radGrp.selectedValue)) {
                case "1":
                    p = new Plane(material, 234, 236, 16, 16);
                    break;
                case "2":                    
                    p = new Cube(materialist, size, size, size, quality, quality, quality, Cube.ALL);
                    break;
                case "3":
                    p = new Sphere(material, 100, 16, 16);
                    break;
                case "4":
                    p = new Cylinder(material, 100,100,16,16,70);
                    break;
                case "5":
                    p = new Cone(material, 100, 60, 16, 16);
                    break;
                case "6":
                    p = new PaperPlane(material, 1);
                    break;
                case "7":
                    p = new ParticleField(200, 0xFFFFFF, null, 200, 200, 200);
                    break;
            }
            scene3d.addChild(p, "pv3dobj");
            scene3d.renderCamera(pcamera);
            checkAxis(null);
            
        }
        private function rotX(e:Event):void {
            if (rotVx >= 359) {
                rotVx = 0;
            }
            rotVx += 10;
            scene3d.getChildByName("pv3dobj").rotationX = rotVx;
            scene3d.renderCamera(pcamera);
        }
        private function rotY(e:Event):void {
            if (rotVy >= 359) {
                rotVy = 0;
            }
            rotVy += 10;
            scene3d.getChildByName("pv3dobj").rotationY = rotVy;
            scene3d.renderCamera(pcamera);
        }
        private function rotZ(e:Event):void {
            if (rotVz >= 359) {
                rotVz = 0;
            }
            rotVz += 10;
            scene3d.getChildByName("pv3dobj").rotationZ = rotVz;
            scene3d.renderCamera(pcamera);
        }
        private function checkAxis(e:Event):void {
            if (Xaxis.selected == true) {
                addEventListener(Event.ENTER_FRAME, rotX );
            }else {
                removeEventListener(Event.ENTER_FRAME, rotX );
            }
            if (Yaxis.selected == true) {
                addEventListener(Event.ENTER_FRAME, rotY );
            }else {
                removeEventListener(Event.ENTER_FRAME, rotY );
            }
            if (Zaxis.selected == true) {
                addEventListener(Event.ENTER_FRAME, rotZ );
            }else {
                removeEventListener(Event.ENTER_FRAME, rotZ );
            }
            
        }
        private function objSelect(e:Event):void {
            init();
        }
        private function reset():void {
            Xaxis.selected = false;
            Yaxis.selected = false;
            Zaxis.selected = false;
            init();
        }
    ]]>
</mx:Script>
<mx:HBox >
    <mx:VBox borderStyle="solid" backgroundColor="0xCCCCCC" backgroundAlpha="0.5"
        paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
        <mx:Label text="Select Object:" fontWeight="bold"/>
        <mx:RadioButtonGroup id="radGrp" itemClick="objSelect(event);"/>
        <mx:RadioButton label="Plane" groupName="radGrp" value="1" selected="true"/>
        <mx:RadioButton label="Cube" groupName="radGrp" value="2"/>
        <mx:RadioButton label="Sphere" groupName="radGrp" value="3"/>
        <mx:RadioButton label="Cylinder" groupName="radGrp" value="4"/>
        <mx:RadioButton label="Cone" groupName="radGrp" value="5"/>
        <mx:RadioButton label="PaperPlane" groupName="radGrp" value="6"/>
        <mx:RadioButton label="ParticleField" groupName="radGrp" value="7"/>
    </mx:VBox>
    <mx:VBox borderStyle="solid" backgroundColor="0xCCCCCC" backgroundAlpha="0.5"
        paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10">
        <mx:Label text="Rotate Object on:" fontWeight="bold"/>
        <mx:CheckBox id="Xaxis" label="X Axis" click="checkAxis(event);"/> 
        <mx:CheckBox id="Yaxis" label="Y Axis" click="checkAxis(event);"/> 
        <mx:CheckBox id="Zaxis" label="Z Axis" click="checkAxis(event);"/> 
        <mx:Spacer height="15"/>
        <mx:Button label="Reset" click="reset();"/>
    </mx:VBox>
    <mx:HBox id="hcanv" borderStyle="solid" backgroundColor="0x010111" width="400" height="400"/>
</mx:HBox>
    
</mx:Application>