/* 非同期イベントハンドラ * CaptureDeviceからのイベントをハンドリングして、バッファとテクスチャを更新する。 */ public void OnBuffer(CaptureDevice i_sender, double i_sample_time, IntPtr i_buffer, int i_buffer_len) { try { lock (this) { this._reality_source.setDShowImage(i_buffer, i_buffer_len, i_sender.video_vertical_flip); this._reality.progress(this._reality_source); //テクスチャ内容を更新 this._surface.setRaster(this._reality_source.refRgbSource()); //UnknownTargetを1個取得して、遷移を試す。 NyARRealityTarget t = this._reality.selectSingleUnknownTarget(); if (t == null) { return; } //ターゲットに一致するデータを検索 RawbitSerialIdTable.IdentifyIdResult r = new RawbitSerialIdTable.IdentifyIdResult(); if (this._mklib.identifyId(t, this._reality_source, r)) { //テーブルにターゲットが見つかったので遷移する。 if (!this._reality.changeTargetToKnown(t, r.artk_direction, r.marker_width)) { //遷移の成功チェック return; //失敗 } //遷移に成功したので、tagにユーザ定義情報を書きこむ。 long l = new long(); l = r.id; t.tag = l; } else { //一致しないので、このターゲットは捨てる。(15フレーム無視) this._reality.changeTargetToDead(t, 15); } } } catch (Exception e) { System.Console.WriteLine(e.StackTrace); } return; }
public void run() { try { Thread.Sleep(3000); RawbitSerialIdTable.IdentifyIdResult ret=new RawbitSerialIdTable.IdentifyIdResult(); bool res; lock(this._parent._mklib){ NyARDoublePoint2d[] vx=NyARDoublePoint2d.createArray(4); //反時計まわり vx[0].x=0; vx[0].y=0; vx[1].x=99;vx[1].y=0; vx[2].x=99;vx[2].y=99; vx[3].x=0; vx[3].y=99; res=this._parent._mklib.identifyId(vx,this._source,ret); } this._parent.callListener(res,this._serial,ret.artk_direction,ret.marker_width,ret.id); } catch (Exception e){ Console.Error.WriteLine(e.StackTrace); } }
/* 非同期イベントハンドラ * CaptureDeviceからのイベントをハンドリングして、バッファとテクスチャを更新する。 */ public void OnBuffer(CaptureDevice i_sender, double i_sample_time, IntPtr i_buffer, int i_buffer_len) { try { lock (this) { this._reality_source.setDShowImage(i_buffer, i_buffer_len,i_sender.video_vertical_flip); this._reality.progress(this._reality_source); //テクスチャ内容を更新 this._surface.setRaster(this._reality_source.refRgbSource()); //UnknownTargetを1個取得して、遷移を試す。 NyARRealityTarget t=this._reality.selectSingleUnknownTarget(); if(t==null){ return; } //ターゲットに一致するデータを検索 RawbitSerialIdTable.IdentifyIdResult r=new RawbitSerialIdTable.IdentifyIdResult(); if (this._mklib.identifyId(t, this._reality_source, r)) { //テーブルにターゲットが見つかったので遷移する。 if(!this._reality.changeTargetToKnown(t,r.artk_direction,r.marker_width)){ //遷移の成功チェック return;//失敗 } //遷移に成功したので、tagにユーザ定義情報を書きこむ。 long l = new long(); l = r.id; t.tag = l; }else{ //一致しないので、このターゲットは捨てる。(15フレーム無視) this._reality.changeTargetToDead(t,15); } } } catch (Exception e) { System.Console.WriteLine(e.StackTrace); } return; }