package {
import com.derschmale.slicedVolume.SlicedVolumeContainer;
import flash.display.Sprite;
import flash.display.StageQuality;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
import net.hires.debug.Stats;
/**
* Volume Rendering based on view-aligned slice textures
*
* @author David Lenaerts - http://www.derschmale.com
*/
[SWF(width="500", height="500", frameRate="120", backgroundColor="0x000000")]
public class SlicedVolumeRendering extends Sprite
{
private var _slicedVolumeHQ : SlicedVolumeContainer;
private var _slicedVolumeLQ : SlicedVolumeContainer;
[Embed(source="/../assets/bulldogscan_hq.png")]
private var TextureHQ : Class;
[Embed(source="/../assets/bulldogscan_lq.png")]
private var TextureLQ : Class;
private var _dragStartX : Number;
private var _dragStartY : Number;
public function SlicedVolumeRendering()
{
stage.quality = StageQuality.LOW;
init();
}
/**
* Initialize the view
*/
private function init() : void
{
addChild(new Stats());
_slicedVolumeHQ = new SlicedVolumeContainer(new TextureHQ().bitmapData, 100);
_slicedVolumeLQ = new SlicedVolumeContainer(new TextureLQ().bitmapData);
_slicedVolumeLQ.x = _slicedVolumeHQ.x = stage.stageWidth*.5;
_slicedVolumeLQ.y = _slicedVolumeHQ.y = stage.stageHeight*.5;
_slicedVolumeHQ.scaleX = _slicedVolumeHQ.scaleY = 2;
_slicedVolumeLQ.scaleX = _slicedVolumeLQ.scaleY = 4;
_slicedVolumeLQ.fallOffPower = _slicedVolumeHQ.fallOffPower = 2;
_slicedVolumeLQ.visible = false;
addChild(_slicedVolumeHQ);
addChild(_slicedVolumeLQ);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function onMouseDown(event : MouseEvent) : void
{
_dragStartX = mouseX;
_dragStartY = mouseY;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
_slicedVolumeLQ.visible = true;
_slicedVolumeHQ.visible = false;
}
private function onMouseUp(event : MouseEvent) : void
{
removeEventListener(Event.ENTER_FRAME, onEnterFrame);
_slicedVolumeLQ.visible = false;
_slicedVolumeHQ.visible = true;
_slicedVolumeHQ.rotationX = _slicedVolumeLQ.rotationX;
_slicedVolumeHQ.rotationY = _slicedVolumeLQ.rotationY;
_slicedVolumeHQ.forceRender();
}
/**
* Rotate object based on mouse drag
*/
private function onEnterFrame(event : Event) : void
{
_slicedVolumeLQ.rotationY += (_dragStartX-mouseX)/50;
_slicedVolumeLQ.rotationX -= (_dragStartY-mouseY)/50;
}
}
}