/**
         * 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);
        }
Esempio n. 4
0
        /**
         * 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);
            }
        }
Esempio n. 6
0
        //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);
        }