import Module = require ( "../../lib/arjs.artoolkit.min" ) ; declare const wx ; const Req = function ( this ) { const _this = this ; this . open = function ( _type , _url ) { _this . type = _type ; _this . url = _url ; } ; this . send = function ( ) { wx . request ( { method : _this . type , responseType : _this . responseType , url : _this . url , success : function ( res ) { _this . response = res . data ; _this . onload ( ) ; } } ) ; } ; } ; declare let XMLHttpRequest ; XMLHttpRequest = XMLHttpRequest || Req ; export class ARToolKit { public static AR_DEBUG_DISABLE : number = 0 ; public static AR_DEBUG_ENABLE : number = 1 ; public static AR_DEFAULT_DEBUG_MODE : number = 0 ; public static AR_DEFAULT_IMAGE_PROC_MODE : number = 0 ; public static AR_DEFAULT_LABELING_MODE : number = 1 ; public static AR_DEFAULT_LABELING_THRESH : number = 100 ; public static AR_DEFAULT_MARKER_EXTRACTION_MODE : number = 2 ; public static AR_DEFAULT_PATTERN_DETECTION_MODE : number = 0 ; public static AR_IMAGE_PROC_FIELD_IMAGE : number = 1 ; public static AR_IMAGE_PROC_FRAME_IMAGE : number = 0 ; public static AR_LABELING_BLACK_REGION : number = 1 ; public static AR_LABELING_THRESH_MODE_AUTO_ADAPTIVE : number = 3 ; public static AR_LABELING_THRESH_MODE_AUTO_MEDIAN : number = 1 ; public static AR_LABELING_THRESH_MODE_AUTO_OTSU : number = 2 ; public static AR_LABELING_THRESH_MODE_MANUAL : number = 0 ; public static AR_LABELING_WHITE_REGION : number = 0 ; public static AR_LOG_LEVEL_DEBUG : number = 0 ; public static AR_LOG_LEVEL_ERROR : number = 3 ; public static AR_LOG_LEVEL_INFO : number = 1 ; public static AR_LOG_LEVEL_REL_INFO : number = 4 ; public static AR_LOG_LEVEL_WARN : number = 2 ; public static AR_LOOP_BREAK_THRESH : number = 0 ; public static AR_MARKER_INFO_CUTOFF_PHASE_HEURISTIC_TROUBLESOME_MATRIX_CODES : number = 9 ; public static AR_MARKER_INFO_CUTOFF_PHASE_MATCH_BARCODE_EDC_FAIL : number = 5 ; public static AR_MARKER_INFO_CUTOFF_PHASE_MATCH_BARCODE_NOT_FOUND : number = 4 ; public static AR_MARKER_INFO_CUTOFF_PHASE_MATCH_CONFIDENCE : number = 6 ; public static AR_MARKER_INFO_CUTOFF_PHASE_MATCH_CONTRAST : number = 3 ; public static AR_MARKER_INFO_CUTOFF_PHASE_MATCH_GENERIC : number = 2 ; public static AR_MARKER_INFO_CUTOFF_PHASE_NONE : number = 0 ; public static AR_MARKER_INFO_CUTOFF_PHASE_PATTERN_EXTRACTION : number = 1 ; public static AR_MARKER_INFO_CUTOFF_PHASE_POSE_ERROR : number = 7 ; public static AR_MARKER_INFO_CUTOFF_PHASE_POSE_ERROR_MULTI : number = 8 ; public static AR_MATRIX_CODE_3x3 : number = 3 ; public static AR_MATRIX_CODE_3x3_HAMMING63 : number = 515 ; public static AR_MATRIX_CODE_3x3_PARITY65 : number = 259 ; public static AR_MATRIX_CODE_4x4 : number = 4 ; public static AR_MATRIX_CODE_4x4_BCH_13_5_5 : number = 1028 ; public static AR_MATRIX_CODE_4x4_BCH_13_9_3 : number = 772 ; public static AR_MATRIX_CODE_DETECTION : number = 2 ; public static AR_MAX_LOOP_COUNT : number = 5 ; public static AR_NOUSE_TRACKING_HISTORY : number = 1 ; public static AR_TEMPLATE_MATCHING_COLOR : number = 0 ; public static AR_TEMPLATE_MATCHING_COLOR_AND_MATRIX : number = 3 ; public static AR_TEMPLATE_MATCHING_MONO : number = 1 ; public static AR_TEMPLATE_MATCHING_MONO_AND_MATRIX : number = 4 ; public static AR_USE_TRACKING_HISTORY : number = 0 ; public static AR_USE_TRACKING_HISTORY_V2 : number = 2 ; public static HEAPU8 = Module . HEAPU8 ; public static UNKNOWN_MARKER = - 1 ; public static PATTERN_MARKER = 0 ; public static BARCODE_MARKER = 1 ; public static markerInfo : any ; public static multiEachMarkerInfo : any ; public static setup : ( width : number , height : number , cameraParamId : any ) => any = Module . setup ; public static teardown : ( id : number ) => any = Module . teardown ; public static setupAR2 : ( ) => any = Module . setupAR2 ; public static setLogLevel : ( mode : any ) => any = Module . setLogLevel ; public static getLogLevel : ( ) => any = Module . getLogLevel ; public static setDebugMode : ( id : number , mode : number ) => any = Module . getLogLevel ; public static getDebugMode : ( id : number ) => any = Module . getDebugMode ; public static getProcessingImage : ( id : number ) => any = Module . getProcessingImage ; public static setMarkerInfoDir : ( id : number , markerIndex : number , dir : any ) => any = Module . setMarkerInfoDir ; public static setMarkerInfoVertex : ( id : number , markerIndex : number ) => any = Module . setMarkerInfoVertex ; public static getTransMatSquare : ( id : number , markerUID : number , markerWidth : number ) => any = Module . getTransMatSquare ; public static getTransMatSquareCont : ( id : any , markerUID : number , markerWidth : number ) => any = Module . getTransMatSquareCont ; public static getTransMatMultiSquare : ( id : any , markerUID : number ) => any = Module . getTransMatMultiSquare ; public static getTransMatMultiSquareRobust : ( id : number , i : number ) => any = Module . getTransMatMultiSquareRobust ; public static getMultiMarkerNum : ( id : number , multiId : number ) => any = Module . getMultiMarkerNum ; public static getMultiMarkerCount : ( id : number ) => any = Module . getMultiMarkerCount ; public static detectMarker : ( id : number ) => any = Module . detectMarker ; public static getMarkerNum : ( id : number ) => any = Module . getMarkerNum ; public static getMarker : ( id : number , markerIndex : number ) => any = Module . getMarker ; public static getMultiEachMarker : ( id : number , multiMarkerId : number , markerIndex : number ) => any = Module . getMultiEachMarker ; public static detectNFTMarker : ( id : number ) => any = Module . detectNFTMarker ; public static setProjectionNearPlane : ( id : number , value : any ) => any = Module . setProjectionNearPlane ; public static getProjectionNearPlane : ( id : number ) => any = Module . getProjectionNearPlane ; public static setProjectionFarPlane : ( id : number , value : any ) => any = Module . setProjectionFarPlane ; public static getProjectionFarPlane : ( id : number ) => any = Module . getProjectionFarPlane ; public static setThresholdMode : ( id : number , mode : any ) => any = Module . setThresholdMode ; public static getThresholdMode : ( id : number ) => any = Module . getThresholdMode ; public static setThreshold : ( id : number , threshold : number ) => any = Module . setThreshold ; public static getThreshold : ( id : number ) => any = Module . getThreshold ; public static setPatternDetectionMode : ( id : number , mode : any ) => any = Module . setPatternDetectionMode ; public static getPatternDetectionMode : ( id : number ) => any = Module . getPatternDetectionMode ; public static setMatrixCodeType : ( id : number , type : any ) => any = Module . setMatrixCodeType ; public static getMatrixCodeType : ( id : number ) => any = Module . getMatrixCodeType ; public static setLabelingMode : ( id : number , mode : any ) => any = Module . setLabelingMode ; public static getLabelingMode : ( id : number ) => any = Module . getLabelingMode ; public static setPattRatio : ( id : number , ratio : number ) => any = Module . setPattRatio ; public static getPattRatio : ( id : number ) => any = Module . getPattRatio ; public static setImageProcMode : ( id : number , mode : any ) => any = Module . setImageProcMode ; public static getImageProcMode : ( id : number ) => any = Module . getImageProcMode ; public static markerCount = 0 ; public static multiMarkerCount = 0 ; public static cameraCount = 0 ; public static getMarkerInfo ( ) { return Module . markerInfo ; } public static deleteCamera ( id ) { throw Error ( "deleteCamera not implemented" ) ; } public static loadCamera ( url , callback , onerror ) { const filename = "/camera_param_" + ARToolKit . cameraCount ++ ; const writeCallback = ( ) => { const id = Module . _loadCamera ( filename ) ; if ( callback ) { callback ( id ) ; } } ; if ( typeof url === "object" ) { ARToolKit . writeByteArrayToFS ( filename , url , writeCallback ) ; } else if ( url . indexOf ( "\n" ) > - 1 ) { ARToolKit . writeStringToFS ( filename , url , writeCallback ) ; } else { ARToolKit . ajax ( url , filename , writeCallback ) ; } } public static getFrameMalloc ( ) { return Module . frameMalloc ; } public static addMarker ( arId , url , callback , onError ) { const filename = "/marker_" + ARToolKit . markerCount ++ ; ARToolKit . ajax ( url , filename , ( ) => { const id = Module . _addMarker ( arId , filename ) ; if ( callback ) { callback ( id ) ; } } ) ; } public static addNFTMarker ( arId , url , callback , onError ) { const mId = ARToolKit . markerCount ++ ; const prefix = "/markerNFT_" + mId ; const filename1 = prefix + ".fset" ; const filename2 = prefix + ".iset" ; const filename3 = prefix + ".fset3" ; ARToolKit . ajax ( url + ".fset" , filename1 , ( ) => { ARToolKit . ajax ( url + ".iset" , filename2 , ( ) => { ARToolKit . ajax ( url + ".fset3" , filename3 , ( ) => { const id = Module . _addNFTMarker ( arId , prefix ) ; if ( callback ) { callback ( id ) ; } } ) ; } ) ; } ) ; } public static bytesToString ( array ) { return String . fromCharCode . apply ( String , array ) ; } public static parseMultiFile ( bytes ) { const str = this . bytesToString ( bytes ) ; const lines = str . split ( "\n" ) ; const files = [ ] ; let state = 0 ; lines . forEach ( ( line ) => { line = line . trim ( ) ; if ( ! line || line . startsWith ( "#" ) ) { return ; } switch ( state ) { case 0 : state = 1 ; return ; case 1 : if ( ! line . match ( /^\d+$/ ) ) { files . push ( line ) ; } case 2 : case 3 : case 4 : state ++ ; return ; case 5 : state = 1 ; return ; } } ) ; return files ; } public static addMultiMarker ( arId , url , callback , onError ) { const filename = "/multi_marker_" + ARToolKit . multiMarkerCount ++ ; ARToolKit . ajax ( url , filename , ( bytes ) => { let files = this . parseMultiFile ( bytes ) ; const ok = ( ) => { const markerID = Module . _addMultiMarker ( arId , filename ) ; const markerNum = Module . getMultiMarkerNum ( arId , markerID ) ; if ( callback ) { callback ( markerID , markerNum ) ; } } ; if ( ! files . length ) { return ok ( ) ; } const path = url . split ( "/" ) . slice ( 0 , - 1 ) . join ( "/" ) ; files = files . map ( file => { return [ path + "/" + file , file ] ; } ) ; ARToolKit . ajaxDependencies ( files , ok ) ; } ) ; } public static writeStringToFS ( filename , string , callback ) { const byteArray = new Uint8Array ( string . length ) ; for ( let i = 0 ; i < byteArray . length ; i ++ ) { byteArray [ i ] = string . charCodeAt ( i ) & 0xff ; } ARToolKit . writeByteArrayToFS ( filename , byteArray , callback ) ; } public static writeByteArrayToFS ( filename , byteArray , callback ) { Module . FS . writeFile ( filename , byteArray , { encoding : "binary" } ) ; callback ( byteArray ) ; } public static ajax ( url , filename , callback ) { const oReq = new XMLHttpRequest ( ) ; oReq . open ( "GET" , url , true ) ; oReq . responseType = "arraybuffer" ; oReq . onload = ( ) => { const arrayBuffer = oReq . response ; const byteArray = new Uint8Array ( arrayBuffer ) ; ARToolKit . writeByteArrayToFS ( filename , byteArray , callback ) ; } ; oReq . send ( ) ; } public static ajaxDependencies ( files , callback ) { const next = files . pop ( ) ; if ( next ) { ARToolKit . ajax ( next [ 0 ] , next [ 1 ] , ( ) => { ARToolKit . ajaxDependencies ( files , callback ) ; } ) ; } else { callback ( ) ; } } } export default ARToolKit ;