/** * ContourTargetを表示します。 */ private void drawContourTarget(NyARTarget t, Graphics sink) { Font f = new Font("System", 14); sink.DrawString("CT", f, Brushes.Blue, new PointF(t._sample_area.x, t._sample_area.y)); // g.drawRect(t._sample_area.x,t._sample_area.y,t._sample_area.w,t._sample_area.h); NyARContourTargetStatus st = (NyARContourTargetStatus)t._ref_status; VecLinearCoordinatesOperator vp = new VecLinearCoordinatesOperator(); vp.margeResembleCoords(st.vecpos); for (int i2 = 0; i2 < st.vecpos.length; i2++) { // for(int i2=43;i2<44;i2++){ // g.drawString(i2+":"+"-"+t._delay_tick,(int)st.vecpos.items[i2].x-1, (int)st.vecpos.items[i2].y-1); sink.FillRectangle(Brushes.Blue, (int)st.vecpos.items[i2].x, (int)st.vecpos.items[i2].y, 1, 1); double co, si; co = st.vecpos.items[i2].dx; si = st.vecpos.items[i2].dy; double p = Math.Sqrt(co * co + si * si); co /= p; si /= p; double ss = st.vecpos.items[i2].scalar * 3; sink.DrawLine( Pens.Blue, (int)st.vecpos.items[i2].x, (int)st.vecpos.items[i2].y, (int)(co * ss) + (int)st.vecpos.items[i2].x, (int)(si * ss) + (int)st.vecpos.items[i2].y); int xx = (int)st.vecpos.items[i2].x; int yy = (int)st.vecpos.items[i2].y; // g.drawRect(xx/8*8,yy/8*8,16,16); } }
/** * Newtargetを表示します。 */ private void drawNewTarget(NyARTarget t, Graphics sink) { Font f = new Font("System", 14); //サンプリング結果の表示 sink.DrawString("NW" + "-" + t._delay_tick, f, Brushes.Green, new PointF(t._sample_area.x, t._sample_area.y)); sink.DrawRectangle(Pens.Green, t._sample_area.x, t._sample_area.y, t._sample_area.w, t._sample_area.h); }
/** * 新しいRealityTargetを作って返します。 * @param tt * @return * @throws NyARException */ public NyARRealityTarget newNewTarget(NyARTarget tt) { NyARRealityTarget ret = base.newObject(); if (ret == null) { return(null); } ret.grab_rate = 50;//開始時の捕捉レートは10% ret._ref_tracktarget = (NyARTarget)tt.refObject(); ret._serial = NyARRealityTarget.createSerialId(); ret.tag = null; tt.tag = ret; //トラックターゲットのタグに自分の値設定しておく。 return(ret); }
/** * Realityの状態を、i_inの{@link NyARRealitySource}を元に、1サイクル進めます。 * 現在の更新ルールは以下の通りです。 * 0.呼び出されるごとに、トラックターゲットからUnknownターゲットを生成する。 * 1.一定時間捕捉不能なKnown,Unknownターゲットは、deadターゲットへ移動する。 * 2.knownターゲットは最新の状態を維持する。 * 3.deadターゲットは(次の呼び出しで)捕捉対象から削除する。 * Knownターゲットが捕捉不能になった時の動作は、以下の通りです。 * 4.[未実装]捕捉不能なターゲットの予測と移動 * @param i_in * @throws NyARException */ public void progress(NyARRealitySource i_in) { //tracker進行 this._tracker.progress(i_in.makeTrackSource()); //トラックしてないrectターゲット1個探してunknownターゲットに入力 NyARTarget tt = findEmptyTagItem(this._tracker._targets); if (tt != null) { this.addUnknownTarget(tt); } //リストのアップデート updateLists(); //リストのアップグレード upgradeLists(); return; }
/** * RectTargetを表示します。 */ private void drawRectTarget(NyARTarget t, Graphics sink) { Font f = new Font("System", 14); //サンプリング結果の表示 NyARRectTargetStatus s = (NyARRectTargetStatus)t._ref_status; sink.DrawString("RT:" + t._serial + "(" + s.detect_type + ")" + "-" + t._delay_tick, f, Brushes.Cyan, new PointF(t._sample_area.x, t._sample_area.y)); sink.DrawRectangle(Pens.Cyan, (int)s.vertex[0].x - 1, (int)s.vertex[0].y - 1, 2, 2); for (int i2 = 0; i2 < 4; i2++) { // g.fillRect((int)st.vecpos[i2].x-1, (int)st.vecpos[i2].y-1,2,2); sink.DrawLine(Pens.Cyan, (int)s.vertex[i2].x, (int)s.vertex[i2].y, (int)s.vertex[(i2 + 1) % 4].x, (int)s.vertex[(i2 + 1) % 4].y); } }
//RealityTargetの編集関数 /** * Realityターゲットリストへ新しい{@link NyARRealityTarget}を追加する。 * @param i_track_target * UnknownTargetに関連付ける{@link NyARTarget}.このターゲットは、{@link NyARTargetStatus#ST_RECT}であること? */ private NyARRealityTarget addUnknownTarget(NyARTarget i_track_target) { Debug.Assert(i_track_target._st_type == NyARTargetStatus.ST_RECT); NyARRealityTarget rt = this._pool.newNewTarget(i_track_target); if (rt == null) { return(null); } //個数制限 if (this._number_of_unknown >= this.MAX_LIMIT_UNKNOWN) { return(null); } rt._target_type = NyARRealityTarget.RT_UNKNOWN; this.target.pushAssert(rt); this._number_of_unknown++; return(rt); }