//My class that creates double Plane(Cube) in scene package com.papervision3D { import flash.display.Stage; import flash.geom.Rectangle; import com.display.PlaneMaterial.MainMaterial; import com.display.PlaneMaterial.MainMaterialEvent; import com.display.PlaneMaterial.CoverMaterial.*; import com.MailTypeConstant; //Papervision3D import-----------------------------// import org.papervision3d.objects.*; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.materials.MovieMaterial; import org.papervision3d.events.*; import org.papervision3d.materials.utils.*; public class MyDoublePlane extends DisplayObject3D { private var frontMaterial:CoverMaterial; public var backMaterial:MainMaterial; private var materialFront:MovieMaterial; private var materialBack:MovieMaterial; private var doublePlane:Cube; private var materialList:MaterialsList; public var planeWidth:int = 225; public var planeHeight:int = 250; public var positionObj:Object = {}; private var quality:Number = 4; private var config:Object; public function MyDoublePlane(conf:Object = null) { config = conf; createCube(); //create my Cube } public function createCube():void { //Create movie for front material frontMaterial = new CoverMaterial(); frontMaterial.addEventListener(CoverMaterialEvent.LOAD_COMPLETE, onMaterialLoadComplete); frontMaterial.addEventListener(CoverMaterialEvent.UNLOAD, onMaterialUnload); //Create movie for back material backMaterial = new MainMaterial(); backMaterial.addEventListener(MainMaterialEvent.LOAD_COMPLETE, onMaterialLoadComplete); backMaterial.addEventListener(MainMaterialEvent.ERROR, onMaterialError); backMaterial.addEventListener(MainMaterialEvent.UNLOAD, onMaterialUnload); materialList = new MaterialsList(); materialFront = new MovieMaterial(frontMaterial,false, true, true); materialBack = new MovieMaterial(backMaterial, false, true, true); materialFront.interactive = true; materialBack.interactive = true; materialFront.smooth = true; materialBack.smooth = true; materialBack.rect = new Rectangle(0, 0 ,planeWidth, planeHeight); materialList.addMaterial(materialBack, "back"); materialList.addMaterial(materialFront, "front"); var insideFaces:int = Cube.FRONT + Cube.BACK; doublePlane = new Cube(materialList, planeWidth, 0, planeHeight, quality, quality, quality, insideFaces); doublePlane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onMouseOver, false, 0, false); doublePlane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onMouseOut, false, 0, false); addChild(doublePlane); } public function unloadBackImage():void { if( backMaterial.src != "") backMaterial.unload(); backMaterial = new MainMaterial({width:planeWidth, height:planeHeight, background:config.mail.background}); backMaterial.removeEventListener(MainMaterialEvent.LOAD_COMPLETE, onMaterialLoadComplete); backMaterial.removeEventListener(MainMaterialEvent.UNLOAD, onMaterialUnload); } public function deletePlane():void { unloadBackImage(); unloadFrontImage(); removeChild(doublePlane); doublePlane.removeEventListener(InteractiveScene3DEvent.OBJECT_OVER, onMouseOver, false); doublePlane.removeEventListener(InteractiveScene3DEvent.OBJECT_OUT, onMouseOut, false); backMaterial = null; frontMaterial = null; materialList.removeMaterial(materialBack); materialList.addMaterial(materialFront); materialBack.destroy(); materialBack.interactive = false; materialBack.unregisterObject(doublePlane); materialBack = null; materialFront.unregisterObject(doublePlane); materialFront.interactive = false; materialFront.destroy(); materialFront = null; materialList = null; doublePlane =null; } public function unloadFrontImage():void { if(frontMaterial.src != "") frontMaterial.unload(); frontMaterial.removeEventListener(CoverMaterialEvent.LOAD_COMPLETE, onMaterialLoadComplete); frontMaterial.removeEventListener(CoverMaterialEvent.UNLOAD, onMaterialUnload); } public function setMaterialAnimated(anim:Boolean):void { if (materialList) { materialFront.animated = anim; materialBack.animated = anim; } } } } //Function for delete instance of MyDoublePlane - doublePlanes is Array with all instance of MyDoublePlane private function deletePlane(index:int):void { scene.removeChild(doublePlanes[index]); if(doublePlanes[index].planeType != MailTypeConstant.EMPTY) { doublePlanes[index].setMaterialAnimated(false); doublePlanes[index].deletePlane(); } delete doublePlanes[index]; }