package {
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
import org.libspark.flartoolkit.core.analyzer.raster.threshold.FLARRasterThresholdAnalyzer_SlidePTile;
import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
import org.libspark.flartoolkit.support.pv3d.FLARBaseNode;
import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
import org.papervision3d.render.LazyRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
public class PV3DARApp extends ARAppBase {
protected var _base:Sprite;
protected var _viewport:Viewport3D;
protected var _camera3d:FLARCamera3D;
protected var _scene:Scene3D;
protected var _renderer:LazyRenderEngine;
protected var _markerNode:FLARBaseNode;
protected var _resultMat:FLARTransMatResult = new FLARTransMatResult();
private var contadorDetectar:uint = 0;
private var contadorOcultar:uint = 0;
private var mostrando:Boolean = false;
// creo un temporizador
private var temporizador:Timer = new Timer(4000, 1);
private var _threshold:int = 110;
private var _threshold_detect:FLARRasterThresholdAnalyzer_SlidePTile;
protected var _is_raster_view:Boolean = false;
public function PV3DARApp() { temporizador.addEventListener(TimerEvent.TIMER, onMarca);
temporizador.addEventListener(TimerEvent.TIMER_COMPLETE, onContadorCompleto);
}
public function onMarca(event:TimerEvent):void
{
trace("marca " + event.target.currentCount);
}
public function onContadorCompleto(event:TimerEvent):void
{
trace("llegamos al final!");
_markerNode.visible = false;
}
public function isRasterViewMode(onView:Boolean = true):void
{
this._is_raster_view = onView;
}
protected override function init(cameraFile:String, codeFile:String, canvasWidth:int = 320, canvasHeight:int = 240, codeWidth:int = 80):void {
addEventListener(Event.INIT, _onInit, false, int.MAX_VALUE);
super.init(cameraFile, codeFile, canvasWidth, canvasHeight, codeWidth);
}
private function _onInit(e:Event):void {
_base = addChild(new Sprite()) as Sprite;
_capture.width = 640;
_capture.height = 480;
_base.addChild(_capture);
_viewport = _base.addChild(new Viewport3D(320, 240)) as Viewport3D;
_viewport.scaleX = 640 / 320;
_viewport.scaleY = 480 / 240;
_viewport.x = -4; // 4pix ???
_camera3d = new FLARCamera3D(_param);
_scene = new Scene3D();
_markerNode = _scene.addChild(new FLARBaseNode()) as FLARBaseNode;
_renderer = new LazyRenderEngine(_scene, _camera3d, _viewport);
this._threshold_detect=new FLARRasterThresholdAnalyzer_SlidePTile(15,4);
if (this._is_raster_view) {
var binRasterBitmap:Bitmap = new Bitmap(this._detector.thresholdedBitmapData);
_base.addChild(binRasterBitmap);
}
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
}
private function _onEnterFrame(e:Event = null):void {
_capture.bitmapData.draw(_video);
var detected:Boolean = false;
try {
detected = _detector.detectMarkerLite(_raster, _threshold) && _detector.getConfidence() > 0.5;
} catch (e:Error) {}
if (detected) { if(mostrando == false){
mostrando = true;
trace ("+ detectamos. "+contadorDetectar);
contadorDetectar++;
if (contadorOcultar != 0){
this.temporizador.stop();
}
}
_detector.getTransformMatrix(_resultMat);
_markerNode.setTransformMatrix(_resultMat);
_markerNode.visible = true;
} else {
if(mostrando == true){
mostrando = false;
trace ("- ocultamos. "+contadorOcultar);
contadorOcultar++;
// arrancamos el temporizador
temporizador.start();
}
//_markerNode.visible = false;
var th:int=this._threshold_detect.analyzeRaster(_raster);
this._threshold=(this._threshold+th)/2;
// trace("[threshold] : " + this._threshold);
}
_renderer.render();
}
public function set mirror(value:Boolean):void {
if (value) {
_base.scaleX = -1;
_base.x = 640;
} else {
_base.scaleX = 1;
_base.x = 0;
}
}
public function get mirror():Boolean {
return _base.scaleX < 0;
}
}
}