UNPKG

nativescript-ar

Version:

NativeScript Augmented Reality plugin. ARKit on iOS and (with the help of Sceneform) ARCore on Android.

196 lines (195 loc) 8.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var image_source_1 = require("tns-core-modules/image-source"); var utils = require("tns-core-modules/utils/utils"); var TNSArFragmentForImageDetection = (function (_super) { __extends(TNSArFragmentForImageDetection, _super); function TNSArFragmentForImageDetection() { var _this = _super.call(this) || this; _this.arSceneViewPromises = []; return global.__native(_this); } TNSArFragmentForImageDetection.prototype.getSessionConfiguration = function (session) { var _this = this; var config = new com.google.ar.core.Config(session); this.config = config; this.session = session; config.setFocusMode(com.google.ar.core.Config.FocusMode.AUTO); config.setUpdateMode(com.google.ar.core.Config.UpdateMode.LATEST_CAMERA_IMAGE); this.setupAugmentedImageDatabase(config, session); this.arSceneViewPromises.forEach(function (resolve) { resolve(_super.prototype.getArSceneView.call(_this)); }); return config; }; TNSArFragmentForImageDetection.prototype.getImageDetectionSceneView = function () { var _this = this; return new Promise(function (resolve, reject) { var arSceneView = _super.prototype.getArSceneView.call(_this); if (arSceneView) { resolve(arSceneView); return; } _this.arSceneViewPromises.push(resolve); }); }; TNSArFragmentForImageDetection.prototype.onCreateView = function (inflater, container, savedInstanceState) { var frameLayout = _super.prototype.onCreateView.call(this, inflater, container, savedInstanceState); _super.prototype.getPlaneDiscoveryController.call(this).hide(); _super.prototype.getPlaneDiscoveryController.call(this).setInstructionView(null); _super.prototype.getArSceneView.call(this).getPlaneRenderer().setEnabled(false); return frameLayout; }; TNSArFragmentForImageDetection.prototype.setupAugmentedImageDatabase = function (config, session) { this.augmentedImageDatabase = new com.google.ar.core.AugmentedImageDatabase(session); config.setAugmentedImageDatabase(this.augmentedImageDatabase); return true; }; TNSArFragmentForImageDetection.prototype.addImagesInFolder = function (name, imageWidthMeters) { var width = imageWidthMeters || -1; var context = utils.ad.getApplicationContext(); var assetManager = context.getAssets(); var list = assetManager.list(name); if (list.length === 0) { name = name + '.arresourcegroup'; list = assetManager.list(name); } var path; var file; for (var i = 0; i < list.length; i++) { file = list[i]; path = name + "/" + file; if (path.indexOf('.imgdb') > 0) { this.loadImgDatabase(path); return; } } for (var i = 0; i < list.length; i++) { file = list[i]; path = name + "/" + file; if (file.toLowerCase() === "contents.json") { try { width = this.readContentWidth(path); } catch (e) { console.error(e); } } } for (var i = 0; i < list.length; i++) { file = list[i]; path = name + "/" + file; if (path.indexOf('.jpg') > 0 || path.indexOf('.png') > 0) { var assetName = path.split('/').pop().split('.').slice(0, -1).join('.'); this.addImage(path, assetName, width); } else { var length_1 = assetManager.list(path).length; if (length_1) { this.addImagesInFolder(path, width); } } } }; TNSArFragmentForImageDetection.prototype.loadImgDatabase = function (asset) { try { var context = utils.ad.getApplicationContext(); var assetManager = context.getAssets(); var is = assetManager.open(asset); this.augmentedImageDatabase = com.google.ar.core.AugmentedImageDatabase.deserialize(this.session, is); this.config.setAugmentedImageDatabase(this.augmentedImageDatabase); this.session.configure(this.config); return; } catch (e) { console.error(e); } }; TNSArFragmentForImageDetection.prototype.readContentWidth = function (asset) { var context = utils.ad.getApplicationContext(); var assetManager = context.getAssets(); var text = ""; var bufferedReader = new java.io.BufferedReader(new java.io.InputStreamReader(assetManager.open(asset))); var output; while ((output = bufferedReader.readLine()) != null) { text += output; } var data = JSON.parse(text); if (data && data.properties && data.properties.width) { var width = data.properties.width; if (data.properties.unit) { var unit = data.properties.unit; if (unit === "centimeters") { width = width / 100; } if (unit === "feet") { width = width / 3.28084; } if (unit === "inches") { width = width / 39.37008; } if (unit === "yards") { width = width / 1.09361; } } console.log("using asset width: " + width + "m"); return width; } throw 'unable to find width in Contents.json'; }; TNSArFragmentForImageDetection.prototype.addBitmap = function (augmentedImageBitmap, name, imageWidthMeters) { if (augmentedImageBitmap == null) { console.log('error loading asset: ' + name); return; } var index = -1; if (imageWidthMeters > 0) { index = this.augmentedImageDatabase.addImage(name, augmentedImageBitmap, imageWidthMeters); } else { index = this.augmentedImageDatabase.addImage(name, augmentedImageBitmap); } if (index === -1) { console.error('Failed to add asset: ' + name); } this.config.setAugmentedImageDatabase(this.augmentedImageDatabase); this.session.configure(this.config); }; TNSArFragmentForImageDetection.prototype.addImage = function (asset, name, imageWidthMeters) { var _this = this; android.os.AsyncTask.execute(new java.lang.Runnable({ run: function () { var width = imageWidthMeters || -1; if (!name) { name = asset.split('/').pop().split('.').slice(0, -1).join('.'); } var context = utils.ad.getApplicationContext(); var assetManager = context.getAssets(); if (asset.indexOf("://") >= 0) { image_source_1.fromUrl(asset).then(function (image) { _this.addBitmap(image.android, name, width); }).catch(console.error); return; } var image = null; try { var is = assetManager.open(asset); image = android.graphics.BitmapFactory.decodeStream(is); _this.addBitmap(image, name, width); return; } catch (e) { } try { image = image_source_1.fromFileOrResource(asset); _this.addBitmap(image.android, name, width); return; } catch (e) { } } })); }; return TNSArFragmentForImageDetection; }(com.google.ar.sceneform.ux.ArFragment)); exports.TNSArFragmentForImageDetection = TNSArFragmentForImageDetection;