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
JavaScript
"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;