Beispiel #1
0
        private async Task MariusCvStitch()
        {
            _currentMapping = _dataExchangeService.Payload["CurrentMapping"] as Mapping;

            await _downloadCache.GetAndCacheFile(_currentMapping.Measurements.First().ImageUrl);

            var img1Path = _currentMapping.Measurements.First().ImageUrl;
            var img2Path = _currentMapping.Measurements.ElementAt(1).ImageUrl;

            var imageStitcher = Mvx.Resolve<IImageStitcher>();
            var panoBytes = await imageStitcher.StitchImages(new List<string>() { img1Path, img2Path });

            Directory.CreateDirectory($"/data/data/de.marius.depthviewer/files/_Caches/Pictures.MvvmCross/");
            var docsDirPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            var path = Path.Combine(docsDirPath, $"s{DateTime.Now.Millisecond}s.jpg");

            System.IO.File.WriteAllBytes(path, panoBytes);

            InvokeOnMain(() =>
            {
                var stitchNode = _scene.CreateChild("StitchedNode");
                stitchNode.Position = new Vector3(0, 0, -2);
                stitchNode.SetScale(1.0f);
                //await PlaceSpriteInNode(path, stitchNode);
                // Display in sprite
                var sprite = new Sprite2D();
                var imgFile = new File(Context, path, FileMode.Read);
                sprite.Load(imgFile);

                StaticSprite2D staticSprite2D = stitchNode.CreateComponent<StaticSprite2D>();
                //staticSprite2D.Color = (new Color(NextRandom(1.0f), NextRandom(1.0f), NextRandom(1.0f), 1.0f));
                staticSprite2D.BlendMode = BlendMode.Alpha;
                staticSprite2D.Sprite = sprite;
            });
        }
        public async Task<Mapping> GetMapping(string mappingId)
        {
            Mapping result = null;
            try
            {
                var mappingParseObject = await ParseObject.GetQuery(typeof(Mapping).Name).Include("measurements").GetAsync(mappingId);
                var measurementsParseObjects = mappingParseObject.Get<List<object>>("measurements");
                var localMeasurements = new List<Measurement>();
                foreach (var measurement in measurementsParseObjects)
                {
                    var newLocalMeasurement = await GetMeasurement(measurement as ParseObject);
                    localMeasurements.Add(newLocalMeasurement);
                }

                result = new Mapping(mappingId, new List<Measurement>(localMeasurements), mappingParseObject.CreatedAt.Value);
            }
            catch (Exception ex)
            {
#if AZURE
                Trace.TraceError("ImageProcessingController.GetMappingPano(): " + ex.Message);
                Debug.WriteLine("ImageProcessingController.GetMappingPano(): " + ex.Message);
#endif
                result = null;
            }

            return result;
        }
        protected override async void InitFromBundle(IMvxBundle parameters)
        {
            base.InitFromBundle(parameters);

            try
            {
                if (parameters.Data.ContainsKey("Id"))
                {
                    var id = "";
                    if (parameters.Data.TryGetValue("Id", out id))
                    {
                        _currentMapping = _mappingServices.GetMapping(id).Result;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception in MappingViewModel.InitFromBundle(): "+ex);
                //Close(this);
            }
        }
        public async Task<List<Mapping>> GetAllMappings()
        {
            var mappings = new List<Mapping>();

            var getAllMappingsQuery = ParseObject.GetQuery("Mapping").Include("measurements");
            var results = await getAllMappingsQuery.FindAsync();

            // Get all local mappings to cross compare
            var localMappingService = Mvx.Resolve<ILocalMappingServices>();
            var localMappingIds = (await localMappingService.GetAllLocalMappings()).Select(m => m.Id);

            foreach (var mapping in results)
            {
                var measurements = mapping.Get<List<object>>("measurements");
                var localMeasurements = new List<Measurement>();
                foreach (var measurement in measurements)
                {
                    var newLocalMeasurement = await GetMeasurement(measurement as ParseObject);
                    localMeasurements.Add(newLocalMeasurement);
                }

                var mappingId = mapping.ObjectId;
                var newLocalMapping = new Mapping(mappingId, new List<Measurement>(localMeasurements), mapping.CreatedAt.Value);
                newLocalMapping.IsSavedLocally = localMappingIds.Contains(mappingId);
                mappings.Add(newLocalMapping);
            }

            return mappings;

        }
        public async Task<Mapping> GetMapping(string mappingId)
        {
            Mapping result = null;
            try
            {
                var mappingParseObject = await ParseObject.GetQuery(typeof(Mapping).Name).Include("measurements").GetAsync(mappingId);
                var measurementsParseObjects = mappingParseObject.Get<List<object>>("measurements");
                var localMeasurements = new List<Measurement>();
                foreach (var measurement in measurementsParseObjects)
                {
                    var newLocalMeasurement = await GetMeasurement(measurement as ParseObject);
                    localMeasurements.Add(newLocalMeasurement);
                }

                result = new Mapping(mappingId, new List<Measurement>(localMeasurements), mappingParseObject.CreatedAt.Value);
            }
            catch (Exception)
            {
                result = null;
            }

            return result;
        }
        public Task DeleteLocalMapping(Mapping mapping)
        {
            return Task.Run(() =>
            {
                try
                {
                    // Delete serialized Mapping object
                    var path = Path.Combine(_mappingsDir, mapping.Id + ".json");
                    _fileStore.DeleteFile(path);

                    // Delete its cached images
                    foreach (var measurement in mapping.Measurements)
                    {
                        Mvx.Resolve<IMvxFileDownloadCache>().Clear(measurement.ImageUrl);
                    }
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine("Exception deleting {0}: {1}", mapping.Id, ex);
                }
            });
        }
        public async Task PersistMapping(Mapping mapping)
        {
            // Persist the Mapping instance as a json
            var jsonMapping = JsonConvert.SerializeObject(mapping);
            var path = Path.Combine(_mappingsDir, mapping.Id + ".json");
            await _fileStoreAsync.WriteFileAsync(path, jsonMapping);

            // Cache the measurement images
            foreach (var measurement in mapping.Measurements)
            {
                await Task.Run(async () =>
                {
                    var downloadTcs = new TaskCompletionSource<string>();
                    Mvx.Resolve<IMvxFileDownloadCache>().RequestLocalFilePath(measurement.ImageUrl, s =>
                    {
                        var downloadPath = Path.Combine(_baseDir, s);
                        downloadTcs.SetResult(true.ToString());
                        Debug.WriteLine("File cached to:{0}", downloadPath);
                    }, exception =>
                    {
                        Debug.WriteLine("Ex: " + exception);
                        downloadTcs.SetException(exception);
                    });

                    await downloadTcs.Task;
                });
            }
        }
Beispiel #8
0
        async Task CreateScene()
        {
            // Create a top-level _scene, must add the Octree
            // to visualize any 3D content.
            _scene = new Scene();
            _scene.CreateComponent<Octree>();
            _scene.CreateComponent<DebugRenderer>();

            // Get parameter payload
            _currentMapping = _dataExchangeService.Payload["CurrentMapping"] as Mapping;
            if (_currentMapping == null)
            {
                await Task.Delay(1000).ConfigureAwait(true);
                _currentMapping = _dataExchangeService.Payload["CurrentMapping"] as Mapping;
            }

            // Add boxes and images
            await PlaceBoxes();
            PlaceImages();

            // Zone
            var zoneNode = _scene.CreateChild(name: "zoneNode");
            zoneNode.Position = new Vector3(0, 0, 0);

            var zone = zoneNode.CreateComponent<Zone>();
            zone.SetBoundingBox(new BoundingBox(-1000, 1000));
            zone.AmbientColor = new Color(0.1f, 0.2f, 0.4f);
            //zone.FogColor = new Color(0.1f, 0.2f, 0.3f);
            //zone.FogStart = 10;
            //zone.FogEnd = 100;


            // Camera
            CameraNode = _scene.CreateChild("Camera");
            Camera camera = CameraNode.CreateComponent<Camera>();
            CameraNode.Position = new Vector3(0f, 0f, 0);
            camera.Fov = 90f;

            // Add a light to the camera node
            var cameraLight = CameraNode.CreateComponent<Light>();
            cameraLight.Range = 200;
            cameraLight.LightType = LightType.Point;
            cameraLight.Color = Color.Yellow;


            // Viewport
            Renderer.SetViewport(0, new Viewport(_scene, camera, null));
            Renderer.DrawDebugGeometry(true);
        }