package { import org.papervision3d.cameras.Camera3D; import org.papervision3d.objects.*; import org.papervision3d.materials.*; import org.papervision3d.utils.*; import org.papervision3d.events.*; import org.papervision3d.scenes.InteractiveScene3D; import flash.events.*; import flash.display.*; import flash.events.*; import flash.utils.*; import flash.media.* import flash.net.*; import flash.text.*; import flash.xml.XMLDocument; import flash.external.ExternalInterface; import flash.ui.Keyboard; import flash.events.KeyboardEvent; import caurina.transitions.Tweener; import caurina.transitions.properties.TextShortcuts; import SWFAddress; import SWFAddressEvent; public class main extends MovieClip { // _______________________________________________________________________ // vars public var sp : MovieClip; public var frontH : Sprite; public var s : InteractiveScene3D; public var cam : Camera3D; public var timerCount : Number = 0; private var startpx : Number; private var startI : Number; private var palID : Number; private var renderQual : Number; public var tim : Timer; private var req : String; public var spher : Sphere; public var wireFrame : WireframeMaterial; public var wireCube : Cube; public var fileRef : FileReference; private var isNew : Boolean = true; private var interfaceExists:Boolean; public var forward : Boolean; public var back : Boolean; public var goLeft : Boolean; public var goRight : Boolean; public var goUp : Boolean; public var goDown : Boolean; public var inProg : Boolean; private var PAL : Boolean; private var rendering : Boolean; private var noMouse : Boolean; private var help : Boolean; private var loadGal : Boolean; public var up : MovieClip; public var tB : MovieClip; public var mind : MovieClip; public var samp : MovieClip; public var dial : MovieClip; public var dialback : Sprite; public var mN : MovieClip; public var rA : MovieClip; public var instructions : MovieClip; private var cMc : MovieClip; private var aMc : MovieClip; private var hP : MovieClip; private var miN : MovieClip; private var aTP : MovieClip; private var reSet : MovieClip; private var dumbVar : MovieClip; private var pMC : MovieClip; private var email : MovieClip; private var deleteP : MovieClip; public var currentSection: MovieClip; private var sendE : MovieClip; private var sendP : MovieClip; private var forget : MovieClip; private var startit : MovieClip; private var full : MovieClip; private var medium : MovieClip; private var low : MovieClip; private var gMC : MovieClip; private var galCube : Sprite; private var galTxt : MovieClip; public var menuArray : Array; public var colARRAY : Array; public var mostColor : Array; public var colornums : Array; private var colorOBS : Array; private var galArray : Array; private var color1 : Array; private var color2 : Array; public var center : DisplayObject3D // _______________________________________________________________________ // constructor public function main() { stage.frameRate = 30; stage.quality = "BEST"; stage.scaleMode = "noScale"; stage.align = StageAlign.TOP; TextShortcuts.init(); SWFAddress.addEventListener(Event.INIT, handleSWFInit); init(); } // _______________________________________________________________________ // Init public function init():void { SWFAddress.addEventListener(Event.CHANGE, Swfhand); color1 = ["0x684018", "0x785028", "0x885830","0x986838", "0xb07840", "0xc89850", "0xd8a880", "0xf0b880", "0xf8c080"]; sp = new MovieClip(); sp.name ="container"; addChild(sp); sp.x = 500; sp.y = 300; sp.alpha = 0; Tweener.addTween(sp, {alpha:1, time:1.5, transition:"easeOutExpo"}); s = new InteractiveScene3D(sp); cam = new Camera3D(); frontH = new Sprite(); sp.addChild(frontH); interfaceExists = false; forward = false; back = false; goLeft = false; goRight = false; goUp = false; goDown = false; PAL = false; rendering = false; noMouse = false; startpx = 80; startI = 0; palID = 0; this.setChildIndex(this.getChildByName("container"), 1); this.setChildIndex(this.getChildByName("background"), 0); samp = new sample(); samp.x = -500; samp.y = -120; samp.alpha = 0; frontH.addChild(samp); Tweener.addTween(samp, {alpha:1, time:1.2, transition:"easeInQuad"}); if(isNew != true) { cleanUp(analyze) }; menuArray = new Array(analyze, gallery, about, contact); for(var i= 0; i<4; i++) { menuArray[i].buttonMode = true; menuArray[i].addEventListener(MouseEvent.CLICK, hMenuClick); menuArray[i].addEventListener(MouseEvent.MOUSE_OVER, hMenuOver); menuArray[i].addEventListener(MouseEvent.MOUSE_OUT, hMenuOut); }; //camera values //cam.sort = true; cam.z = 400; cam.zoom = 11; cam.focus = 100; tB = new tBox(); tB.x = -195; tB.y = -225; frontH.addChild(tB); up = new upload(); up.buttonMode = true; up.x = -110; up.y = -143; frontH.addChild(up); up.addEventListener(MouseEvent.CLICK, handleUpload); stage.addEventListener(Event.MOUSE_LEAVE, handleMouseLeave); currentSection = analyze; currentSection.alpha = .6 currentSection.removeEventListener(MouseEvent.MOUSE_OVER, hMenuOver) currentSection.removeEventListener(MouseEvent.MOUSE_OUT, hMenuOut) currentSection.removeEventListener(MouseEvent.CLICK, hMenuClick) //render first time //buildFront(); s.renderCamera(cam); } private function handleSWFInit(e:Event):void { trace("in handleSWFInit"); var addr = SWFAddress.getValue(); trace("addr is "+addr); switch(addr) { case "": //init(); break; case "analyze": init(); break; case "gallery": goGallery(); break; case "about": goAbout(); break; case "contact": goContact(); break; default: req = addr; handleSWFReq() }; SWFAddress.setTitle("3D Histogram request : "+addr); }; private function Swfhand(e:Event):void { var addr = SWFAddress.getValue(); trace("addr is "+addr); switch(addr) { case "": //init(); break; case "analyze": init(); break; case "gallery": goGallery(); break; case "about": goAbout(); break; case "contact": goContact(); break; default: req = addr; handleSWFReq() }; SWFAddress.setTitle("3D Histogram request : "+addr); }; private function handleSWFReq():void { if(interfaceExists == true) { //errorMes.text = "in handleSWF, iE is true"; loadAnalysis(); } else { //errorMes.text = "in handleSWF, iE is false"; //init(req); buildInterface(); loadAnalysis(); }; }; public function hMenuOver(e:Event) { var butt = e.target; Tweener.addTween(butt, {alpha:.6, time:.5, transition:"easeInSine"}); }; public function hMenuOut(e:Event) { var butt = e.target; Tweener.addTween(butt, {alpha:1, time:.5, transition:"easeOutSine"}); }; public function handleEmailFriend(e:Event) { trace("in email to friend"); sendPal(colARRAY, false); } public function handleResetClick(e:Event) { trace("in handle reset"); cam.x = 0; cam.y = 0; cam.z = 400; } public function handlemiNClick(e:Event) { dumbVar = e.target.parent dumbVar.x = 370; dumbVar.y = 2; dumbVar.scaleX = dumbVar.scaleY = .17; //e.target.removeEventListener(MouseEvent.CLICK, handlemiNClick); dumbVar.mouseChildren = false; dumbVar.buttonMode = true; //dial.areInaccessibleObjectsUnderPoint( dumbVar.addEventListener(MouseEvent.MOUSE_DOWN, unSize); } private function unSize(e:Event):void { e.target; dumbVar.x = 200; dumbVar.y = stage.stageHeight - 110; dumbVar.scaleX = dumbVar.scaleY = 1; e.target.removeEventListener(MouseEvent.MOUSE_DOWN, unSize); e.target.mouseChildren = true; e.target.buttonMode = false; }; private function cleanUp(newSection):void { if(currentSection == analyze){ stopInteraction(); PAL = false; if(noMouse) { removeEventListener(Event.ENTER_FRAME, renderNoMouse); } else { removeEventListener(Event.ENTER_FRAME, renderTwo); } if(dial) { Tweener.addTween(dial, {alpha:0, time:1.5, transition:"easeOutExpo", onComplete:remove, onCompleteParams:[dial]}); }; if(pMC) { Tweener.addTween(pMC, {alpha:0, time:1.5, transition:"easeOutExpo", onComplete:remove, onCompleteParams:[pMC]}); } Tweener.addTween(instructions, {alpha:0, time:1.5, transition:"easeOutExpo", onComplete:remove, onCompleteParams:[instructions]}); Tweener.addTween(sp, {alpha:0, time:1.5, transition:"easeOutExpo", onComplete:remove, onCompleteParams:[sp]}); if(tim != null) { tim.stop(); timerCount = 0; for(var i= 0; i150) { bmp.width = 150; }; if(bmp.height >95) { bmp.height = 95; }; tmb.addChild(bmp); tmb.scaleY = tmb.scaleX; tmb.x = 5; tmb.y = 5; tmb.name = "tmb"; tmb.alpha = 0; Tweener.addTween(tmb, {alpha:1, time:2, transition:"easeOutQuad"}); dial.addChild(tmb); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, loadxml); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); }; private function progressHandler(event:ProgressEvent):void { trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal); var per = Math.round(event.bytesLoaded / event.bytesTotal*100); dial.mes.text = event.bytesLoaded +" BYTES OF DATA LOADED"; } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function httpStatusHandler(event:HTTPStatusEvent):void { trace("httpStatusHandler: " + event); dial.mes.text = "HTTP Error :"+event; } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); dial.mes.text = "io Error "+event; } private function loadAnalysis():void { var loader:URLLoader = new URLLoader(); configureListeners(loader); loadAnalyzedImage(); loader.load(new URLRequest("http://www.3dhistogram.com/hooks.php?histogram=color&file="+req)); }; private function loadxml(e:Event):void { var xDoc:XMLDocument = new XMLDocument(); xDoc.ignoreWhite = true; var nodes:XML = XML(e.target.data); xDoc.parseXML(nodes.toXMLString()); var usefulnodes = xDoc.firstChild.childNodes; colornums = usefulnodes; dial.mes.text = "ANALYSIS COMPLETE. PLEASE SELECT A RENDER QUALITY"; Tweener.addTween(instructions, {alpha:0, time:1.5, transition:"easeOutSine", onComplete:toggleHelp}); askQuality(); //useInfo(); }; private function askQuality():void { startit = new startIt(); startit.x = -100; startit.y = -80; sp.addChild(startit); full = new fullQ(); full.name = "full"; full.x = 11.4; full.y = 61.3; full.mouseChildren = false; full.buttonMode = true; startit.addChild(full); medium = new mediumQ(); medium.name = "medium"; medium.x = 84; medium.y = 61.3; medium.mouseChildren = false; medium.buttonMode = true; startit.addChild(medium); low = new lowQ(); low.name = "low" low.x = 156.6; low.y = 61.3; low.mouseChildren = false; low.buttonMode = true; startit.addChild(low); full.addEventListener(MouseEvent.MOUSE_OVER, handleASKOVER); full.addEventListener(MouseEvent.MOUSE_OUT, handleASKOUT); full.addEventListener(MouseEvent.CLICK, handleASKCLICK); medium.addEventListener(MouseEvent.MOUSE_OVER, handleASKOVER); medium.addEventListener(MouseEvent.MOUSE_OUT, handleASKOUT); medium.addEventListener(MouseEvent.CLICK, handleASKCLICK); low.addEventListener(MouseEvent.MOUSE_OVER, handleASKOVER); low.addEventListener(MouseEvent.MOUSE_OUT, handleASKOUT); low.addEventListener(MouseEvent.CLICK, handleASKCLICK); } private function handleASKOVER(e:Event):void { var what = e.target.name; var newText; Tweener.addTween(e.target, {alpha:.8, time:1, transition:"easeInQuad"}); switch(what) { case "full": newText ="use this if you have a pretty powerful machine" Tweener.addTween(startit.mess, {_text:newText, time:.7, transition:"easeOutQuad"}); break; case "medium": newText = "use this if you have an older machine"; Tweener.addTween(startit.mess, {_text:newText, time:.7, transition:"easeOutQuad"}); break; case "low": newText = "use this if you have a very old machine"; Tweener.addTween(startit.mess, {_text:newText, time:.7, transition:"easeOutQuad"}); break; }; } private function handleASKOUT(e:Event):void { Tweener.addTween(e.target, {alpha:1, time:1, transition:"easeOutQuad"}); } private function handleASKCLICK(e:Event):void { var what = e.target.name; Tweener.addTween(startit, {alpha:0, time:1, transition:"easeInSine", onComplete:remove, onCompleteParams:[startit]}); switch(what) { case "full": renderQual = 1; useInfo(); break; case "medium": renderQual = 2; useInfo(); break; case "low": renderQual = 3; useInfo(); break; } } private function useInfo():void { tim = new Timer(.05, colornums.length/renderQual); tim.addEventListener(TimerEvent.TIMER, doOnce); tim.addEventListener(TimerEvent.TIMER_COMPLETE, finishUp); tim.start(); rendering = true; addEventListener(Event.ENTER_FRAME, renderTwo); mostColor = new Array(); stage.quality = "LOW"; stage.frameRate = 20; startKeys(); colARRAY = []; colorOBS = []; }; private function startKeys() { //trace("in start keys"); stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); stage.addEventListener(KeyboardEvent.KEY_UP, handleKeyUp); s.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, threeDClick); s.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, threeDOver); s.interactiveSceneManager.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, threeDOut); }; private function stopInteraction():void { stage.removeEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); stage.removeEventListener(KeyboardEvent.KEY_UP, handleKeyUp); stage.removeEventListener(Event.ENTER_FRAME, renderTwo); stage.removeEventListener(Event.ENTER_FRAME, renderNoMouse); s.interactiveSceneManager.removeEventListener(InteractiveScene3DEvent.OBJECT_CLICK, threeDClick); s.interactiveSceneManager.removeEventListener(InteractiveScene3DEvent.OBJECT_OVER, threeDOver); s.interactiveSceneManager.removeEventListener(InteractiveScene3DEvent.OBJECT_OUT, threeDOut); } private function threeDClick(e:InteractiveScene3DEvent):void { var COL =e.displayObject3D.extra; trace("color added to palette = "+COL); trace("colARRAY is "+ colARRAY); if(checkForSame(COL)) { addToPalette(COL); } } private function checkForSame(color):Boolean { var inARRAY = true; for(var i =0; i 25) { mostColor.push(hex); }; addSphere(rad, redx, geewhy, bezee, hex); timerCount+=renderQual; }; private function finishUp(e:Event):void { dial.mes.text = "RENDERING COMPLETE"; rendering = false; }; private function addSphere(radius:Number, ex:Number, why:Number, zee:Number, color:String):void { var cLor:uint = "0x"+color; var mat:InteractiveColorMaterial = new InteractiveColorMaterial(cLor); mat.fillAlpha = .9; mat.oneSide = true; dial.mes.text = "RENDERING COLOR "+timerCount; var spher:Cube = new Cube(mat, radius, radius, radius, 1, 1, 1); spher.z = (ex*4) -510; spher.y = (why*4) -510; spher.x = (zee*4) -510; spher.extra = color; spher.name = timerCount; s.addChild(spher); }; private function addToPalette(col) { colARRAY.push(col); if(PAL == false) { startI = 0; pMC = new palMC(); pMC.x = 20; pMC.y = 40; pMC.alpha = 1; addChild(pMC); email = new emailPal(); email.x = -4.2; email.y = 28; email.mouseChildren = false; email.buttonMode = true; pMC.addChild(email); deleteP = new deletPal(); deleteP.x = 110.8; deleteP.y = 28; deleteP.mouseChildren = false; deleteP.buttonMode = true; pMC.addChild(deleteP); email.addEventListener(MouseEvent.MOUSE_OVER, handleEmailOver); email.addEventListener(MouseEvent.MOUSE_OUT, handleEmailOut); email.addEventListener(MouseEvent.CLICK, handleEmailClick); deleteP.addEventListener(MouseEvent.MOUSE_OVER, handleDELPOver); deleteP.addEventListener(MouseEvent.MOUSE_OUT, handleDELPOut); deleteP.addEventListener(MouseEvent.CLICK, handleDELPClick); PAL = true; } var co:uint = "0x"+colARRAY[startI]; var colSprite:Sprite = new Sprite(); colorOBS.push(colSprite); colSprite.name = startI; //colSprite.id = palID; colSprite.x = startpx + startI*25; colSprite.graphics.beginFill(co, 1); colSprite.graphics.drawRect(0, 0, 22, 22); colSprite.graphics.endFill(); colSprite.addEventListener(MouseEvent.MOUSE_OVER, handleColOver); colSprite.addEventListener(MouseEvent.MOUSE_OUT, handleColOut); colSprite.addEventListener(MouseEvent.CLICK, handleColClick); pMC.addChild(colSprite); startI+=1; //startpx+=24; trace("in colARRAY, array is "+colARRAY); }; private function handleColOver(e:Event):void { var string ="CLICK ON A COLOR BOX TO REMOVE IT FROM YOUR PALETTE"; Tweener.addTween(pMC.mes, {_text:string, time:.3, transition:"easeOutQuad"}); }; private function handleColOut(e:Event):void { var string = ""; Tweener.addTween(pMC.mes, {_text:string, time:.3, transition:"easeOutQuad"}); }; private function handleColClick(e:Event):void { pMC.removeChild(e.target); var deleteIndex; var nomen = e.target.name; for(var i = 0; i0) { tim.start(); }; addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); addEventListener(KeyboardEvent.KEY_UP, handleKeyUp); if(noMouse) { addEventListener(Event.ENTER_FRAME, renderNoMouse); } else { addEventListener(Event.ENTER_FRAME, renderTwo); }; }; private function handleKeyDown(event:KeyboardEvent):void { switch( event.keyCode ) { case Keyboard.UP: forward = true; back = false; break; case Keyboard.DOWN: back = true; forward = false; break; case Keyboard.LEFT: goLeft = true; goRight = false; break; case Keyboard.RIGHT: goRight = true; goLeft = false; break; case "A".charCodeAt(): case "a".charCodeAt(): goUp = true; goDown = false; break; case "S".charCodeAt(): case "s".charCodeAt(): goDown = true; goUp = false; break; } }; private function handleKeyUp(event:KeyboardEvent):void { switch(event.keyCode) { case Keyboard.UP: forward = false; break; case Keyboard.DOWN: back = false; break; case Keyboard.LEFT: goLeft = false; break; case Keyboard.RIGHT: goRight = false; break; case "A".charCodeAt(): case "a".charCodeAt(): goUp = false; break; case "S".charCodeAt(): case "s".charCodeAt(): goDown = false; break; }; }; private function showMostP():void { var toSee = sortMost(); var eeex = 5; var wheee = 200; var squareSize = 50; for(var i = 0; i< toSee.length; i++) { if(eeex < 780) { eeex+=55; } else { eeex = 5; wheee+=55; }; var cSprite:Sprite = new Sprite(); addChild(cSprite); var cLor:uint = "0x"+toSee[i] ; cSprite.graphics.beginFill(cLor, 1); cSprite.graphics.drawRect(eeex, wheee, squareSize, squareSize); cSprite.graphics.endFill(); }; }; private function sortMost():Array { var sorteD:Array =mostColor.sort(4); var arToReturn:Array = new Array(); var interV = Math.floor(sorteD.length/10); trace("sorting interval is "+interV); for(var i = 0; i< sorteD.length; i+=interV) { arToReturn.push(sorteD[i]); }; if(arToReturn.length >10) { arToReturn.pop(); }; return arToReturn; }; // _______________________________________________________________________ // go Gallery private function goGallery() { cleanUp(gallery); trace("in go gallery"); color2 = ["0x78b088", "0x709878", "0x608868", "0x608060", "0x507060", "0x406850", "0x385848", "0x284840", "0x283830", "0x210818", "0x282830", "0x403038", "0x503848", "0x685868", "0x806880", "0x887080", "0xa07870", "0xa88078", "0xb89880", "0xb8a878", "0xc8c080", "0xa8d080"]; gMC = new galleryMovie(); gMC.x = 10; gMC.y = 100; addChild(gMC); loadGal = true; galArray = new Array(); var namearray:Array = new Array(); var gCount:Number = 0; var galOb:MovieClip; var galBack:MovieClip; var arro:MovieClip; var currentCube; var currString; galBack = new MovieClip(); gMC.addChild(galBack); var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, loadxml); loader.load(new URLRequest("http://www.3dhistogram.com/syndicate/main.php?req=list&tags=screenshots")); function loadxml(e:Event):void { var xDoc:XMLDocument = new XMLDocument(); xDoc.ignoreWhite = true; var nodes:XML = XML(loader.data); xDoc.parseXML(nodes.toXMLString()); var usefulnodes:Array = xDoc.firstChild.childNodes; for (var i = 0; i -400 && stage.mouseX < stage.stageWidth+400 && stage.mouseY>0 && stage.mouseY < stage.stageHeight+400) { cam.x += (stage.mouseX - (stage.stageWidth*0.5))/15; cam.y += (stage.mouseY - (stage.stageHeight*0.5))/15; } s.renderCamera(cam); } // _______________________________________________________________________ // render public function renderNoMouse(e:Event) { if(forward == true) { trace("going forward"); cam.z+=30; }; if(back == true) { trace("going backward"); cam.z-=30; }; if(goLeft == true) { trace("going forward"); cam.x-=30; }; if(goRight == true) { trace("going backward"); cam.x+=30; }; if(goUp == true) { trace("going forward"); cam.y-=30; }; if(goDown == true) { trace("going backward"); cam.y+=30; }; s.renderCamera(cam); } } }