/*
* PROJECT: NyARToolkit(Extension)
* --------------------------------------------------------------------------------
* The NyARToolkit is Java edition ARToolKit class library.
* Copyright (C)2008-2009 Ryo Iizuka
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For further information please contact.
* http://nyatla.jp/nyatoolkit/
* <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
*
*/
package jp.nyatla.nyartoolkit.nyidmarker.data;
import jp.nyatla.nyartoolkit.nyidmarker.*;
/**
* このクラスは、マーカパターンを{@link NyIdMarkerData_RawBit}型のデータに変換します。
*/
public class NyIdMarkerDataEncoder_RawBit implements INyIdMarkerDataEncoder
{
private final static int _DOMAIN_ID=0;
private final static int[] _mod_data={7,31,127,511,2047,4095};
/**
* この関数は、マーカパターンデータを{@link NyIdMarkerData_RawBit}型のデータに変換します。
* o_destには、{@link NyIdMarkerData_RawBit}型のオブジェクトを指定してください。
*/
public boolean encode(NyIdMarkerPattern i_data,INyIdMarkerData o_dest)
{
final NyIdMarkerData_RawBit dest=(NyIdMarkerData_RawBit)o_dest;
if(i_data.ctrl_domain!=_DOMAIN_ID){
return false;
}
//パケット数計算
final int resolution_len=(i_data.model+i_data.model-1); //データドットの数
final 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}型のオブジェクトを生成して返します。
*/
public INyIdMarkerData createDataInstance()
{
return new NyIdMarkerData_RawBit();
}
}