チェンジセット 4753: as3/FLARToolKit/branches

差分発生行の前後
無視リスト:
コミット日時:
2012/06/28 01:24:56 (1 年前)
コミッタ:
nyatla
ログメッセージ:

ARPlayCard対応、NyId?のbugfix

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/FLARToolKit/branches/nyatla/v4/trunk/src/org/libspark/flartoolkit/markersystem/FLARMarkerSystem_BaseClass_.as

    r4737 r4753  
    4040        import org.libspark.flartoolkit.core.types.matrix.*; 
    4141        import org.libspark.flartoolkit.markersystem.utils.*; 
     42        import jp.nyatla.as3utils.*; 
    4243 
    4344 
     
    6768                private const IDTYPE_ARTK:int=0x00000000; 
    6869                private const IDTYPE_NYID:int=0x00001000; 
     70                private const IDTYPE_PSID:int=0x00002000; 
    6971 
    7072                protected var _sqdetect:IFLARMarkerSystemSquareDetect; 
     
    7779                private var _armk_list:ARMarkerList; 
    7880                private var _idmk_list:NyIdList; 
     81                private var _psmk_list:ARPlayCardList; 
    7982                 
    8083                private var lost_th:int=5; 
     
    9699                         
    97100                        this._armk_list=new ARMarkerList(); 
    98                         this._idmk_list=new NyIdList(); 
     101                        this._idmk_list = new NyIdList(); 
     102                        this._psmk_list=new ARPlayCardList(); 
    99103                        this._tracking_list = new TrackingList(); 
    100104                         
     
    102106                        //同時に判定待ちにできる矩形の数 
    103107                        this._sq_stack=new SquareStack(INITIAL_MARKER_STACK_SIZE);                       
    104                         this._on_sq_handler=new OnSquareDetect(i_config,this._armk_list,this._idmk_list,this._tracking_list,this._sq_stack); 
     108                        this._on_sq_handler=new OnSquareDetect(i_config,this._armk_list,this._idmk_list,this._psmk_list,this._tracking_list,this._sq_stack); 
    105109                } 
    106110                protected function initInstance(i_ref_config:IFLARMarkerSystemConfig):void 
     
    152156                public function addNyIdMarker(i_id:Number,i_marker_size:Number):int 
    153157                { 
    154                         var target:MarkerInfoNyId=new MarkerInfoNyId(i_id,i_id,i_marker_size); 
    155                         if(!this._idmk_list.add(target)){ 
    156                                 throw new FLARException(); 
    157                         } 
    158                         if(!this._tracking_list.add(target)){ 
    159                                 throw new FLARException(); 
    160                         } 
    161                         return (this._idmk_list.size()-1)|IDTYPE_NYID; 
     158                        return this.addNyIdMarker_2(i_id,i_id, i_marker_size);                   
    162159                } 
    163160                /** 
     
    178175                public function addNyIdMarker_2(i_id_s:Number,i_id_e:Number,i_marker_size:Number):int 
    179176                { 
    180                         var target:MarkerInfoNyId=new MarkerInfoNyId(i_id_s,i_id_e,i_marker_size); 
     177                        var target:NyIdList_Item=new NyIdList_Item(i_id_s,i_id_e,i_marker_size); 
    181178                        if(!this._idmk_list.add(target)){ 
    182179                                throw new FLARException(); 
     
    184181                        this._tracking_list.add(target); 
    185182                        return (this._idmk_list.size()-1)|IDTYPE_NYID; 
     183                } 
     184                /** 
     185                 * この関数は、1個の範囲を持つARプレイマーカをシステムに登録して、検出可能にします。 
     186                 * インスタンスは、i_id_s<=n<=i_id_eの範囲にあるマーカを検出します。 
     187                 * 例えば、1番から5番までのマーカを検出する場合に使います。 
     188                 * 関数はマーカに対応したID値(ハンドル値)を返します。 
     189                 * @param i_id_s 
     190                 * Id範囲の開始値 (1<=n<=6) 
     191                 * @param i_id_e 
     192                 * Id範囲の終了値 (1<=n<=6) 
     193                 * @param i_marker_size 
     194                 * マーカの四方サイズ[mm] 
     195                 * @return 
     196                 * マーカID(ハンドル)値。この値はIDの値ではなく、マーカのハンドル値です。 
     197                 * @throws FLARException 
     198                 */ 
     199                public function addPsARPlayCard_2(i_id_s:int,i_id_e:int,i_marker_size:Number):int 
     200                { 
     201                        NyAS3Utils.assert(i_id_s>0 && i_id_s<=6); 
     202                        NyAS3Utils.assert(i_id_e>0 && i_id_e<=6); 
     203                        var target:ARPlayCardList_Item=new ARPlayCardList_Item(i_id_s,i_id_e,i_marker_size); 
     204                        if(!this._psmk_list.add(target)){ 
     205                                throw new FLARException(); 
     206                        } 
     207                        this._tracking_list.add(target); 
     208                        return (this._psmk_list.size()-1)|IDTYPE_PSID; 
     209                } 
     210                /** 
     211                 * この関数は、1個のARプレイマーカをシステムに登録して、検出可能にします。 
     212                 * 関数はマーカに対応したID値(ハンドル値)を返します。 
     213                 * @param i_id 
     214                 * PSARプレイマーカのID。1-6までの数値です。 
     215                 * @param i_marker_size 
     216                 * マーカの四方サイズ[mm] 
     217                 * @return 
     218                 * マーカID(ハンドル)値。この値はIDの値ではなく、マーカのハンドル値です。 
     219                 * @throws FLARException 
     220                 */ 
     221                public function addPsARPlayCard(i_id:int,i_marker_size:Number):int 
     222                { 
     223                        return this.addPsARPlayCard_2(i_id,i_id,i_marker_size); 
    186224                } 
    187225                /** 
     
    199237                public function addARMarker(i_code:FLARCode,i_patt_edge_percentage:int,i_marker_size:Number):int 
    200238                { 
    201                         var target:MarkerInfoARMarker=new MarkerInfoARMarker(i_code,i_patt_edge_percentage,i_marker_size); 
     239                        var target:ARMarkerList_Item=new ARMarkerList_Item(i_code,i_patt_edge_percentage,i_marker_size); 
    202240                        if(!this._armk_list.add(target)){ 
    203241                                throw new FLARException(); 
     
    280318                        if((i_id & MASK_IDTYPE)==IDTYPE_ARTK){ 
    281319                                //ARマーカ 
    282                                 return MarkerInfoARMarker(this._armk_list.getItem(i_id &MASK_IDNUM)).cf; 
     320                                return ARMarkerList_Item(this._armk_list.getItem(i_id &MASK_IDNUM)).cf; 
    283321                        } 
    284322                        //Idマーカ? 
     
    298336                        if((i_id & MASK_IDTYPE)==IDTYPE_NYID){ 
    299337                                //Idマーカ 
    300                                 return MarkerInfoNyId(this._idmk_list.getItem(i_id &MASK_IDNUM)).nyid; 
     338                                return NyIdList_Item(this._idmk_list.getItem(i_id &MASK_IDNUM)).nyid; 
    301339                        } 
    302340                        //ARマーカ? 
     
    323361                public function getLife(i_id:int):int 
    324362                { 
    325                         if((i_id & MASK_IDTYPE)==IDTYPE_ARTK){ 
    326                                 //ARマーカ 
    327                                 return MarkerInfoARMarker(this._armk_list.getItem(i_id & MASK_IDNUM)).life; 
    328                         }else{ 
    329                                 //Idマーカ 
    330                                 return MarkerInfoNyId(this._idmk_list.getItem(i_id & MASK_IDNUM)).life; 
     363                        switch(i_id & MASK_IDTYPE) 
     364                        { 
     365                        case IDTYPE_ARTK: 
     366                                return ARMarkerList_Item(this._armk_list.getItem(i_id & MASK_IDNUM)).life; 
     367                        case IDTYPE_NYID: 
     368                                return NyIdList_Item(this._idmk_list.getItem(i_id & MASK_IDNUM)).life; 
     369                        case IDTYPE_PSID: 
     370                                return ARPlayCardList_Item(this._psmk_list.getItem(i_id & MASK_IDNUM)).life; 
     371                        default: 
     372                                throw new FLARException(); 
    331373                        } 
    332374                } 
     
    341383                public function getLostCount(i_id:int):int 
    342384                { 
    343                         if((i_id & MASK_IDTYPE)==IDTYPE_ARTK){ 
    344                                 //ARマーカ 
    345                                 return MarkerInfoARMarker(this._armk_list.getItem(i_id & MASK_IDNUM)).lost_count; 
    346                         }else{ 
    347                                 //Idマーカ 
    348                                 return MarkerInfoNyId(this._idmk_list.getItem(i_id & MASK_IDNUM)).lost_count; 
     385                switch(i_id & MASK_IDTYPE) 
     386                { 
     387                        case IDTYPE_ARTK: 
     388                                return ARMarkerList_Item(this._armk_list.getItem(i_id & MASK_IDNUM)).lost_count; 
     389                        case IDTYPE_NYID: 
     390                                return NyIdList_Item(this._idmk_list.getItem(i_id & MASK_IDNUM)).lost_count; 
     391                        case IDTYPE_PSID: 
     392                                return ARPlayCardList_Item(this._psmk_list.getItem(i_id & MASK_IDNUM)).lost_count; 
     393                        default: 
     394                                throw new FLARException(); 
     395 
    349396                        } 
    350397                } 
     
    485532                public function getMarkerMatrix(i_id:int):FLARDoubleMatrix44 
    486533                { 
    487                         if((i_id & MASK_IDTYPE)==IDTYPE_ARTK){ 
    488                                 //ARマーカ 
    489                                 return MarkerInfoARMarker(this._armk_list.getItem(i_id &MASK_IDNUM)).tmat; 
    490                         }else{ 
    491                                 //Idマーカ 
    492                                 return MarkerInfoNyId(this._idmk_list.getItem(i_id &MASK_IDNUM)).tmat; 
     534                        switch(i_id & MASK_IDTYPE) 
     535                        { 
     536                        case IDTYPE_ARTK: 
     537                                return ARMarkerList_Item(this._armk_list.getItem(i_id &MASK_IDNUM)).tmat; 
     538                        case IDTYPE_NYID: 
     539                                return NyIdList_Item(this._idmk_list.getItem(i_id &MASK_IDNUM)).tmat; 
     540                        case IDTYPE_PSID: 
     541                                return ARPlayCardList_Item(this._psmk_list.getItem(i_id &MASK_IDNUM)).tmat; 
     542                        default: 
     543                                throw new FLARException(); 
    493544                        } 
    494545                } 
     
    502553                public function getMarkerVertex2D(i_id:int):Vector.<FLARIntPoint2d> 
    503554                { 
    504                         if((i_id & MASK_IDTYPE)==IDTYPE_ARTK){ 
    505                                 //ARマーカ 
    506                                 return MarkerInfoARMarker(this._armk_list.getItem(i_id &MASK_IDNUM)).tl_vertex; 
    507                         }else{ 
    508                                 //Idマーカ 
    509                                 return MarkerInfoNyId(this._idmk_list.getItem(i_id &MASK_IDNUM)).tl_vertex; 
     555                        switch(i_id & MASK_IDTYPE) 
     556                        { 
     557                        case IDTYPE_ARTK: 
     558                                return ARMarkerList_Item(this._armk_list.getItem(i_id &MASK_IDNUM)).tl_vertex; 
     559                        case IDTYPE_NYID: 
     560                                return NyIdList_Item(this._idmk_list.getItem(i_id &MASK_IDNUM)).tl_vertex; 
     561                        case IDTYPE_PSID: 
     562                                return ARPlayCardList_Item(this._psmk_list.getItem(i_id &MASK_IDNUM)).tl_vertex; 
     563                        default: 
     564                                throw new FLARException(); 
    510565                        } 
    511566                } 
     
    564619                        this._idmk_list.prepare(); 
    565620                        this._armk_list.prepare(); 
     621                        this._psmk_list.prepare(); 
    566622                        //検出処理 
    567623                        this._on_sq_handler._ref_input_rfb=i_sensor.getPerspectiveCopy(); 
    568                         this._on_sq_handler._ref_input_gs=i_sensor.getGsImage(); 
     624                        this._on_sq_handler._ref_input_gs = i_sensor.getGsImage(); 
    569625                        //検出 
    570626                        this._sqdetect.detectMarkerCb(i_sensor,th,this._on_sq_handler); 
     
    574630                        this._armk_list.finish(); 
    575631                        this._idmk_list.finish(); 
     632                        this._psmk_list.finish(); 
    576633                        //期限切れチェック 
    577634                        var i:int; 
     
    584641                        //各ターゲットの更新 
    585642                        for(i=this._armk_list.size()-1;i>=0;i--){ 
    586                                 var target1:MarkerInfoARMarker=MarkerInfoARMarker(this._armk_list.getItem(i)); 
     643                                var target1:TMarkerData=TMarkerData(this._armk_list.getItem(i)); 
    587644                                if(target1.lost_count==0){ 
    588645                                        target1.time_stamp=time_stamp; 
     
    591648                        } 
    592649                        for(i=this._idmk_list.size()-1;i>=0;i--){ 
    593                                 var target2:MarkerInfoNyId=MarkerInfoNyId(this._idmk_list.getItem(i)); 
     650                                var target2:TMarkerData=TMarkerData(this._idmk_list.getItem(i)); 
    594651                                if(target2.lost_count==0){ 
    595652                                        target2.time_stamp=time_stamp; 
    596653                                        this._transmat.transMatContinue(target2.sq,target2.marker_offset,target2.tmat,target2.tmat); 
     654                                } 
     655                        } 
     656                        for(i=this._psmk_list.size()-1;i>=0;i--){ 
     657                                var target3:TMarkerData =TMarkerData(this._psmk_list.getItem(i)); 
     658                                if(target3.lost_count==0){ 
     659                                        target3.time_stamp=time_stamp; 
     660                                        this._transmat.transMatContinue(target3.sq,target3.marker_offset,target3.tmat,target3.tmat); 
    597661                                } 
    598662                        } 
     
    629693        private var _ref_armk_list:ARMarkerList; 
    630694        private var _ref_idmk_list:NyIdList; 
     695        private var _ref_psmk_list:ARPlayCardList; 
    631696        private var _ref_sq_stack:SquareStack; 
    632697        public var _ref_input_rfb:IFLARPerspectiveCopy; 
     
    634699         
    635700        private var _coordline:FLARCoord2Linear; 
    636         public function OnSquareDetect(i_config:IFLARMarkerSystemConfig,i_armk_list:ARMarkerList,i_idmk_list:NyIdList,i_tracking_list:TrackingList ,i_ref_sq_stack:SquareStack) 
     701        public function OnSquareDetect(i_config:IFLARMarkerSystemConfig, 
     702                i_armk_list:ARMarkerList, i_idmk_list:NyIdList, i_psmk_list:ARPlayCardList, 
     703                i_tracking_list:TrackingList ,i_ref_sq_stack:SquareStack) 
    637704        { 
    638705                this._coordline=new FLARCoord2Linear(i_config.getFLARParam().getScreenSize(),i_config.getFLARParam().getDistortionFactor()); 
    639706                this._ref_armk_list=i_armk_list; 
    640                 this._ref_idmk_list=i_idmk_list; 
     707                this._ref_idmk_list = i_idmk_list; 
     708                this._ref_psmk_list=i_psmk_list; 
    641709                this._ref_tracking_list=i_tracking_list; 
    642710                //同時に判定待ちにできる矩形の数 
     
    676744                                } 
    677745                        } 
     746                        //PSARマーカの特定(IDマーカの特定はここで完結する。) 
     747                        if(this._ref_psmk_list.size()>0){ 
     748                                if(this._ref_psmk_list.update(this._ref_input_gs,sq_tmp)){ 
     749                                        is_target_marker=true; 
     750                                        break;//idマーカを特定 
     751                                } 
     752                        } 
    678753                        //ARマーカの特定 
    679                         if(this._ref_armk_list.size()>0){ 
     754                        if (this._ref_armk_list.size() > 0) { 
     755                                //敷居値により1個のマーカに対して複数の候補が見つかることもある。 
    680756                                if(this._ref_armk_list.update(this._ref_input_rfb,sq_tmp)){ 
    681757                                        is_target_marker=true; 
  • as3/FLARToolKit/branches/nyatla/v4/trunk/src/org/libspark/flartoolkit/markersystem/utils/ARMarkerList.as

    r4700 r4753  
    5555                 * このAdd以外使わないでね。 
    5656                 */ 
    57                 public function add_2(i_e:MarkerInfoARMarker):Boolean 
     57                public function add_2(i_e:ARMarkerList_Item):Boolean 
    5858                { 
    5959                        //マッチテーブルのサイズを調整 
     
    8484                        var is_ganalated_sq:Boolean=false; 
    8585                        for(var i:int=this.size()-1;i>=0;i--){ 
    86                                 var target:MarkerInfoARMarker=MarkerInfoARMarker(this.getItem(i)); 
     86                                var target:ARMarkerList_Item=ARMarkerList_Item(this.getItem(i)); 
    8787                                //解像度に一致する画像を取得 
    8888                                var diff:FLARMatchPattDeviationColorData=this._mpickup.getDeviationColorData(target, i_pix_drv,i_sq.ob_vertex); 
     
    122122                        //検出のために初期値設定 
    123123                        for(var i:int=this.size()-1;i>=0;i--){ 
    124                                 var target:MarkerInfoARMarker=MarkerInfoARMarker(this.getItem(i)); 
     124                                var target:ARMarkerList_Item=ARMarkerList_Item(this.getItem(i)); 
    125125                                if(target.life>0){ 
    126126                                        target.lost_count++; 
     
    135135                        while(top_item!=null){ 
    136136                                //検出したアイテムのARmarkerIndexのデータをセット 
    137                                 var target:MarkerInfoARMarker=top_item.marker; 
     137                                var target:ARMarkerList_Item=top_item.marker; 
    138138                                if(target.lost_count>0){ 
    139139                                        //未割当のマーカのみ検出操作を実行。 
  • as3/FLARToolKit/branches/nyatla/v4/trunk/src/org/libspark/flartoolkit/markersystem/utils/ARMarkerSortList_Item.as

    r4700 r4753  
    3636        public class ARMarkerSortList_Item extends FLARLinkList_Item 
    3737        { 
    38                 public var marker:MarkerInfoARMarker
     38                public var marker:ARMarkerList_Item
    3939                public var cf:Number; 
    4040                public var dir:int; 
  • as3/FLARToolKit/branches/nyatla/v4/trunk/src/org/libspark/flartoolkit/markersystem/utils/MultiResolutionPattProvider.as

    r4700 r4753  
    5252                 * @throws FLARException  
    5353                 */ 
    54                 public function getDeviationColorData(i_marker:MarkerInfoARMarker,i_pix_drv:IFLARPerspectiveCopy,i_vertex:Vector.<FLARIntPoint2d>):FLARMatchPattDeviationColorData 
     54                public function getDeviationColorData(i_marker:ARMarkerList_Item,i_pix_drv:IFLARPerspectiveCopy,i_vertex:Vector.<FLARIntPoint2d>):FLARMatchPattDeviationColorData 
    5555                { 
    5656                        var mk_edge:int=i_marker.patt_edge_percentage; 
  • as3/FLARToolKit/branches/nyatla/v4/trunk/src/org/libspark/flartoolkit/markersystem/utils/NyIdList.as

    r4700 r4753  
    5454                { 
    5555                        for(var i:int=this.size()-1;i>=0;i--){ 
    56                                 var target:MarkerInfoNyId=MarkerInfoNyId(this.getItem(i));//get(i); 
     56                                var target:NyIdList_Item=NyIdList_Item(this.getItem(i));//get(i); 
    5757                                if(target.life>0){ 
    5858                                        target.lost_count++; 
     
    7373                        var s:Number=this._id_data.marker_id; 
    7474                        for(var i:int=this.size()-1;i>=0;i--){ 
    75                                 var target:MarkerInfoNyId=MarkerInfoNyId(this.getItem(i)); 
     75                                var target:NyIdList_Item=NyIdList_Item(this.getItem(i)); 
    7676                                if(target.nyid_range_s>s || s>target.nyid_range_e) 
    7777                                { 
     
    9494                        for(var i:int=this.size()-1;i>=0;i--) 
    9595                        { 
    96                                 var target:MarkerInfoNyId=MarkerInfoNyId(this.getItem(i)); 
     96                                var target:NyIdList_Item=NyIdList_Item(this.getItem(i)); 
    9797                                if(target.sq==null){ 
    9898                                        continue; 
  • as3/FLARToolKit/branches/nyatla/v4/trunk/src/org/libspark/flartoolkit/nyidmarker/NyIdMarkerPickup.as

    r4700 r4753  
    11/*  
    2  * PROJECT: FLARToolKit 
     2 * PROJECT: FLARToolkitAS3 
    33 * -------------------------------------------------------------------------------- 
    4  * This work is based on the FLARToolKit developed by 
    5  *   R.Iizuka (nyatla) 
    6  * http://nyatla.jp/nyatoolkit/ 
     4 * This work is based on the original ARToolKit developed by 
     5 *   Hirokazu Kato 
     6 *   Mark Billinghurst 
     7 *   HITLab, University of Washington, Seattle 
     8 * http://www.hitl.washington.edu/artoolkit/ 
    79 * 
    8  * The FLARToolKit is ActionScript 3.0 version ARToolkit class library. 
    9  * Copyright (C)2008 Saqoosh
     10 * The FLARToolkitAS3 is AS3 edition ARToolKit class library. 
     11 * Copyright (C)2010 Ryo Iizuk
    1012 * 
    1113 * This program is free software: you can redistribute it and/or modify 
     
    2325 *  
    2426 * For further information please contact. 
    25  *      http://www.libspark.org/wiki/saqoosha/FLARToolKit 
    26  *      <saq(at)saqoosha.net
     27 *      http://nyatla.jp/nyatoolkit/ 
     28 *      <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp
    2729 *  
    2830 */ 
     
    782784                                if(xx<0 || xx>=raster_width || yy<0 || yy>=raster_height) 
    783785                                { 
    784                                         ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:raster_width); 
    785                                         ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:raster_height); 
     786                                        ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:xx); 
     787                                        ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:yy); 
    786788                                } 
    787789                                pt++; 
     
    792794                                if(xx<0 || xx>=raster_width || yy<0 || yy>=raster_height) 
    793795                                { 
    794                                         ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:raster_width); 
    795                                         ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:raster_height); 
     796                                        ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:xx); 
     797                                        ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:yy); 
    796798                                } 
    797799                                pt++; 
     
    802804                                if(xx<0 || xx>=raster_width || yy<0 || yy>=raster_height) 
    803805                                { 
    804                                         ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:raster_width); 
    805                                         ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:raster_height); 
     806                                        ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:xx); 
     807                                        ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:yy); 
    806808                                } 
    807809                                pt++; 
     
    812814                                if(xx<0 || xx>=raster_width || yy<0 || yy>=raster_height) 
    813815                                { 
    814                                         ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:raster_width); 
    815                                         ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:raster_height); 
     816                                        ref_x[pt]=xx<0?0:(xx>=raster_width?raster_width-1:xx); 
     817                                        ref_y[pt]=yy<0?0:(yy>=raster_height?raster_height-1:yy); 
    816818                                } 
    817819                                pt++;