public override bool encode(NyIdMarkerPattern i_data, INyIdMarkerData o_dest) { //対象か調べるん if (i_data.ctrl_domain != 0) { return(false); } //受け入れられるMaskは0のみ if (i_data.ctrl_mask != 0) { return(false); } //受け入れられるModelは5未満 if (i_data.model >= 5) { return(false); } //エンコードしてみる if (!base.encode(i_data, this._tmp)) { return(false); } //SerialIDの再構成 ulong s = 0; //最大4バイト繋げて1個のint値に変換 for (int i = 0; i < this._tmp.length; i++) { s = (s << 8) | (uint)this._tmp.packet[i]; } ((NyIdMarkerData_RawBitId)o_dest).marker_id = (long)s; return(true); }
public override bool encode(NyIdMarkerPattern i_data, INyIdMarkerData o_dest) { //対象か調べるん if (i_data.ctrl_domain != 0) { return false; } //受け入れられるMaskは0のみ if (i_data.ctrl_mask != 0) { return false; } //受け入れられるModelは5未満 if (i_data.model >= 5) { return false; } //エンコードしてみる if (!base.encode(i_data, this._tmp)) { return false; } //SerialIDの再構成 ulong s = 0; //最大4バイト繋げて1個のint値に変換 for (int i = 0; i < this._tmp.length; i++) { s = (s << 8) | (uint)this._tmp.packet[i]; } ((NyIdMarkerData_RawBitId)o_dest).marker_id = (long)s; return true; }
/** * この関数は、マーカパターンデータを{@link NyIdMarkerData_RawBit}型のデータに変換します。 * o_destには、{@link NyIdMarkerData_RawBit}型のオブジェクトを指定してください。 */ public virtual bool Encode(NyIdMarkerPattern i_data, INyIdMarkerData o_dest) { NyIdMarkerData_RawBit dest = (NyIdMarkerData_RawBit)o_dest; if (i_data.ctrl_domain != _DOMAIN_ID) { return(false); } //パケット数計算 int resolution_len = (i_data.model + i_data.model - 1); //データドットの数 int packet_length = (resolution_len * resolution_len) / 8 + 1; int sum = 0; for (int i = 0; i < packet_length; i++) { dest.packet[i] = i_data.data[i]; sum += i_data.data[i]; } //チェックドット値計算 sum = sum % _mod_data[i_data.model - 2]; //チェックドット比較 if (i_data.check != sum) { return(false); } dest.length = packet_length; return(true); }
/** * この関数は、マーカパターンデータを{@link NyIdMarkerData_RawBit}型のデータに変換します。 * o_destには、{@link NyIdMarkerData_RawBit}型のオブジェクトを指定してください。 */ public virtual bool encode(NyIdMarkerPattern i_data,INyIdMarkerData o_dest) { NyIdMarkerData_RawBit dest=(NyIdMarkerData_RawBit)o_dest; if(i_data.ctrl_domain!=_DOMAIN_ID){ return false; } //パケット数計算 int resolution_len=(i_data.model+i_data.model-1); //データドットの数 int packet_length=(resolution_len*resolution_len)/8+1; int sum=0; for(int i=0;i<packet_length;i++){ dest.packet[i]=i_data.data[i]; sum+=i_data.data[i]; } //チェックドット値計算 sum=sum%_mod_data[i_data.model-2]; //チェックドット比較 if(i_data.check!=sum){ return false; } dest.length=packet_length; return true; }
/** * 矩形が見付かるたびに呼び出されます。 * 発見した矩形のパターンを検査して、方位を考慮した頂点データを確保します。 */ public void onSquareDetect(NyARSquareContourDetector i_sender, int[] i_coordx, int[] i_coordy, int i_coor_num, int[] i_vertex_index) { //既に発見済なら終了 if (this.marker_data != null) { return; } //輪郭座標から頂点リストに変換 NyARIntPoint2d[] vertex = this.__tmp_vertex; vertex[0].x = i_coordx[i_vertex_index[0]]; vertex[0].y = i_coordy[i_vertex_index[0]]; vertex[1].x = i_coordx[i_vertex_index[1]]; vertex[1].y = i_coordy[i_vertex_index[1]]; vertex[2].x = i_coordx[i_vertex_index[2]]; vertex[2].y = i_coordy[i_vertex_index[2]]; vertex[3].x = i_coordx[i_vertex_index[3]]; vertex[3].y = i_coordy[i_vertex_index[3]]; NyIdMarkerParam param = this._marker_param; NyIdMarkerPattern patt_data = this._marker_data; // 評価基準になるパターンをイメージから切り出す if (!this._id_pickup.pickFromRaster(this._ref_raster, vertex, patt_data, param)) { return; } //エンコード if (!this._encoder.encode(patt_data, this._data_temp)) { return; } //継続認識要求されている? if (this._prev_data == null) { //継続認識要求なし this._current_data.copyFrom(this._data_temp); } else { //継続認識要求あり if (!this._prev_data.isEqual((this._data_temp))) { return;//認識請求のあったIDと違う。 } } //新しく認識、または継続認識中に更新があったときだけ、Square情報を更新する。 //ココから先はこの条件でしか実行されない。 NyARSquare sq = this.square; //directionを考慮して、squareを更新する。 for (int i = 0; i < 4; i++) { int idx = (i + 4 - param.direction) % 4; this._coordline.coord2Line(i_vertex_index[idx], i_vertex_index[(idx + 1) % 4], i_coordx, i_coordy, i_coor_num, sq.line[i]); } for (int i = 0; i < 4; i++) { //直線同士の交点計算 if (!NyARLinear.crossPos(sq.line[i], sq.line[(i + 3) % 4], sq.sqvertex[i])) { throw new NyARException();//ここのエラー復帰するならダブルバッファにすればOK } } this.threshold = param.threshold; this.marker_data = this._current_data;//みつかった。 }