Пример #1
0
        public async Task Initialize(IHyperArgsSink store, string metadataSetId, int smallestPageSize)
        {
            this.HyperStore = store;

            if (metadataSetId == null)
            {
                MetadataSetLoadFailed.Value = true;
                return;
            }

            MetadataSetId = new HyperDocumentId(metadataSetId, typeof(HyperMetadataSet));

            var metadataSetFilter = await store.ExecuteAsync(new RetrieveHyperDocumentArgs(MetadataSetId));

            if (metadataSetFilter != null)
            {
                this._smallestPageSize = smallestPageSize;

                PageSize = smallestPageSize;

                this._metadataSet = metadataSetFilter.GetPayload <HyperMetadataSet>();
                this.DashApiPort  = await GetDashApiPort();

                await LoadTotalPages();
                await LoadHyperTags();

                await InitializeMetadatasetEdgeDates();
            }
            else
            {
                MetadataSetLoadFailed.Value = true;
            }
        }
Пример #2
0
        public async Task <HyperMission> GetMissionAsync(
            string missionId,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (_netStore == null)
            {
                throw new ApplicationException("Node does not exist.");
            }
            if (string.IsNullOrWhiteSpace(missionId))
            {
                throw new ArgumentException(nameof(missionId));
            }

            var retrieveHyperDocumentArgs = new RetrieveHyperDocumentArgs()
            {
                DocumentId = HyperDocumentId.Create <HyperMission>(missionId)
            };

            var hyperDocument = await _netStore.ExecuteAsync(retrieveHyperDocumentArgs);

            var mission = hyperDocument.GetPayload <HyperMission>();

            if (mission.Id == missionId)
            {
                return(mission);
            }

            throw new ApplicationException("Missing mission");
        }
Пример #3
0
        private async Task Populate()
        {
            IsLoadedData = false;

            if (HyperStore == null || string.IsNullOrWhiteSpace(MissionId))
            {
                return;
            }

            var documentId  = HyperDocumentId.Create <HyperMission>(MissionId);
            var argTagonomy = new RetrieveHyperDocumentArgs(documentId);
            var doc         = await HyperStore.ExecuteAsync(argTagonomy);

            if (argTagonomy.ExecutionResult.IsNotSuccess)
            {
                return;
            }

            var data = doc?.GetPayload <HyperMission>();

            Source = new MissionItemVm(data, HyperStore);
            await Source.UpdateStatus();

            Source.OnToastMessage = OnToastMessage;

            SelectedPhase = Source.Mission?.Phases.FirstOrDefault();

            IsLoadedData = true;
        }
Пример #4
0
        public async Task DeleteTheme(StyleTheme data)
        {
            var args = new DeleteHyperDocumentArgs(HyperDocumentId.Create <StyleTheme>(data.Id));
            var isDeleteSuccessful = await HyperStore.ExecuteAsync(args);

            if (isDeleteSuccessful)
            {
                DataList.RemoveAll(it => it.Id == data.Id);
            }
        }
Пример #5
0
        public async Task <DashboardData> GetDashboard(string dashboardId)
        {
            var documentId = HyperDocumentId.Create <DashboardData>(dashboardId);
            var args       = new RetrieveHyperDocumentArgs(documentId);
            var doc        = await HyperStore.ExecuteAsync(args);

            if (args.ExecutionResult.IsNotSuccess)
            {
                return(null);
            }

            var dashboard = doc?.GetPayload <DashboardData>();

            return(dashboard);
        }
Пример #6
0
        public ZoneOverlayEntry ToDomainModel()
        {
            var domain = new ZoneOverlayEntry();

            BaseOverlayEntryJsModel.MapBasePropertiesToDomainModel(domain, this);

            domain.Points        = this.Points;
            domain.Alias         = this.Alias;
            domain.MetadataSetId = this.MetadataSetId != null?HyperDocumentId.Create <HyperMetadataSet>(this.MetadataSetId) : (HyperDocumentId?)null;

            domain.FixedCameraEnhancementId = this.FixedCameraEnhancementId != null?HyperDocumentId.Create <FixedCameraEnhancedData>(this.FixedCameraEnhancementId) : (HyperDocumentId?)null;

            domain.View = this.View;
            return(domain);
        }
Пример #7
0
        public async Task <HyperMission> GetHyperMissionAsync()
        {
            if (string.IsNullOrEmpty(Request.MissionId))
            {
                throw new ArgumentException(nameof(Request.MissionId));
            }

            var retrieveHyperDocumentArgs = new RetrieveHyperDocumentArgs()
            {
                DocumentId = HyperDocumentId.Create <HyperMission>(Request.MissionId)
            };

            var hyperDocument = await _netStore.ExecuteAsync(retrieveHyperDocumentArgs);

            var mission = hyperDocument.GetPayload <HyperMission>();

            return(mission);
        }
Пример #8
0
        private async Task PopulateData()
        {
            if (HyperStore == null || string.IsNullOrWhiteSpace(WorkflowId))
            {
                return;
            }

            var documentId = HyperDocumentId.Create <HyperWorkflow>(WorkflowId);
            var args       = new RetrieveHyperDocumentArgs(documentId);
            var doc        = await HyperStore.ExecuteAsync(args);

            if (args.ExecutionResult.IsNotSuccess)
            {
                return;
            }

            Source = doc?.GetPayload <HyperWorkflow>();
        }
Пример #9
0
        public async Task <StyleTheme> GetThemeAsync()
        {
            if (string.IsNullOrWhiteSpace(this.Source.Theme?.Id))
            {
                return(null);
            }

            var documentId = HyperDocumentId.Create <StyleTheme>(this.Source.Theme?.Id);
            var args       = new RetrieveHyperDocumentArgs(documentId);
            var doc        = await HyperStore.ExecuteAsync(args);

            if (args.ExecutionResult.IsNotSuccess)
            {
                return(null);
            }

            var theme = doc?.GetPayload <StyleTheme>();

            return(theme);
        }
        public async Task <DashboardData> GetDashboardAsync()
        {
            if (string.IsNullOrWhiteSpace(this.Widget.Dashboard?.Id))
            {
                return(null);
            }

            var documentId = HyperDocumentId.Create <DashboardData>(this.Widget.Dashboard?.Id);
            var args       = new RetrieveHyperDocumentArgs(documentId);
            var doc        = await HyperStore.ExecuteAsync(args);

            if (args.ExecutionResult.IsNotSuccess)
            {
                return(null);
            }

            var dashboard = doc?.GetPayload <DashboardData>();

            return(dashboard);
        }
        public async Task <HyperMission> LoadMission(HyperMetadataSet metadataset)
        {
            var missionId = metadataset?.MissionIds?.FirstOrDefault().Id;

            if (string.IsNullOrWhiteSpace(missionId))
            {
                return(null);
            }

            var retrieveHyperDocumentArgs = new RetrieveHyperDocumentArgs()
            {
                DocumentId = HyperDocumentId.Create <HyperMission>(missionId)
            };

            var hyperDocument = await _netStore.ExecuteAsync(retrieveHyperDocumentArgs);

            var mission = hyperDocument.GetPayload <HyperMission>();

            return(mission);
        }
Пример #12
0
        private async Task PopulateData()
        {
            if (HyperStore == null || string.IsNullOrWhiteSpace(TagonomyId))
            {
                return;
            }

            var documentId  = HyperDocumentId.Create <Tagonomy>(TagonomyId);
            var argTagonomy = new RetrieveHyperDocumentArgs(documentId);
            var doc         = await HyperStore.ExecuteAsync(argTagonomy);

            if (argTagonomy.ExecutionResult.IsNotSuccess)
            {
                return;
            }

            Source = doc?.GetPayload <Tagonomy>();

            RefreshNavigation();
        }
        private async Task PopulateData()
        {
            if (HyperStore == null || string.IsNullOrWhiteSpace(TagonomyId))
            {
                return;
            }

            var documentId  = HyperDocumentId.Create <Tagonomy>(TagonomyId);
            var argTagonomy = new RetrieveHyperDocumentArgs(documentId);
            var doc         = await HyperStore.ExecuteAsync(argTagonomy);

            if (argTagonomy.ExecutionResult.IsNotSuccess)
            {
                return;
            }

            _rootTagonomy = doc?.GetPayload <Tagonomy>();

            _unprocessedSourceTagonomies.Clear();
            _processedSourceTagonomies.Clear();


            var args = new FindHyperDocumentsArgs(typeof(Tagonomy), true);

            _allTagonomies = ((await this.HyperStore.ExecuteAsyncThrows(args)) ?? new Node.Common.HyperDocument[0])
                             .Select(x => x.GetPayload <Tagonomy>())
                             .ToArray();

            _unprocessedSourceTagonomies.Add(_rootTagonomy.Id, _rootTagonomy);

            while (_unprocessedSourceTagonomies.Any())
            {
                foreach (var unprocTagonomie in _unprocessedSourceTagonomies.Select(x => x.Value).ToArray())
                {
                    var linkingNodesInner = GetLinkingNodes(unprocTagonomie);
                    ProcessLinkingNodes(linkingNodesInner, unprocTagonomie, true);
                }
            }

            GoBackwards();
        }
Пример #14
0
        private async Task LoadHyperMissionAsync()
        {
            if (_request == null || string.IsNullOrEmpty(_request.MissionId))
            {
                return;
            }

            var retrieveHyperDocumentArgs = new RetrieveHyperDocumentArgs()
            {
                DocumentId = HyperDocumentId.Create <HyperMission>(_request.MissionId)
            };

            var hyperDocument = await _netStore.ExecuteAsync(retrieveHyperDocumentArgs);

            var mission = hyperDocument.GetPayload <HyperMission>();

            if (mission != null)
            {
                Mission = mission;
            }
        }
Пример #15
0
        /// <summary>
        /// Generates a heatmap based on subset of tags using Fixed Camera Preset with homography.
        /// </summary>
        /// <param name="tags">Subset of tags to use.</param>
        /// <param name="fixedCameraPresetId">Id of Fixed Camera Preset to take homography configuration from.</param>
        /// <param name="renderingMode">If enabled, heatmap masks will be rendered, otherwise real pixels from corresponding frames will be rendered in overlap.</param>
        /// <param name="cutOff">If we should cutoff the image by homography or just render a polygon line over.</param>
        public async Task <UniImage> GenerateFromTagsAsync(List <HyperTag> tags, HyperDocumentId fixedCameraPresetId, bool cutOff = false, int tagGroupsLimit = 30)
        {
            if (tags == null || tags.Count < 1)
            {
                return(null);
            }

            var configuration = await RetrieveHyperDocumentArgs.RetrieveAsyncThrows <FixedCameraEnhancedData>(_hyperStore, fixedCameraPresetId);

            if (configuration == null)
            {
                return(null);
            }

            var tagsWithHyperId = tags.Select(x => new
            {
                Tag     = x,
                HyperId = x.GetElement <IHyperTagHyperIds>().HyperId
            }).ToArray();

            tagsWithHyperId = tagsWithHyperId.OrderBy(x => x.HyperId).ToArray();

            var hyperId = tagsWithHyperId.First().HyperId;

            if (!_keepWorking || _ct.IsCancellationRequested)
            {
                return(null);
            }

            await UpdateImageDataAsync(hyperId);

            if (!_keepWorking || _ct.IsCancellationRequested)
            {
                return(null);
            }

            SKImage maskedImage = null;

            if (_settings.RenderingMode == RenderingMode.Masks)
            {
                _globalMatrix = new uint[_height, _width];

                foreach (var tag in tags)
                {
                    var tagExtraction = ProcessMaskedTag(tag);
                    if (tagExtraction != null)
                    {
                        ProcessMaskOverlapsIntoMatrix(tagExtraction.Image, tagExtraction.Rect);
                    }
                }

                maskedImage = RenderMask(_lastImage);
            }
            else if (_settings.RenderingMode == RenderingMode.LowerPointOfGeometry)
            {
                var framePoints = new List <HeatmapRenderHelper.HeatPoint>();

                foreach (var tag in tags)
                {
                    ProcessGeometryTag(tag, framePoints);
                }

                var mask = HeatmapRenderHelper.RenderToSkImage(framePoints, _width, _height);
                maskedImage = BlendTwoImages(SKBitmap.Decode(_lastImage.Data), mask, SKBlendMode.Plus);
            }
            else if (_settings.RenderingMode == RenderingMode.RealImage)
            {
                var tagsBySlice = tagsWithHyperId.GroupBy(x => x.HyperId).OrderBy(x => x.Key).ToArray();

                var sourceBitmap = SKBitmap.Decode(_lastImage.Data);

                foreach (var tagsForSlice in tagsBySlice.Take(tagGroupsLimit))
                {
                    if (!_keepWorking || _ct.IsCancellationRequested)
                    {
                        return(null);
                    }

                    var args = new RetrieveFragmentFramesArgs
                    {
                        AssetId         = tagsForSlice.Key.AssetId.Value,
                        TrackId         = tagsForSlice.Key.TrackId.Value,
                        FragmentId      = tagsForSlice.Key.FragmentId.Value,
                        SliceIds        = new HyperSliceId[] { tagsForSlice.Key.SliceId.Value },
                        FabricServiceId = this._settings.FabricServiceId
                    };

                    var result = await _hyperStore.ExecuteAsync(args) ?? new RetrieveFragmentFramesArgs.SliceResult[0];

                    if (result.Length == 0)
                    {
                        continue;
                    }

                    var frame         = result[0].Image;
                    var frameSkBitmap = SKBitmap.Decode(frame.Data);

                    _globalMatrix = new uint[_height, _width];

                    foreach (var tag in tagsForSlice.Select(x => x.Tag))
                    {
                        if (!_keepWorking || _ct.IsCancellationRequested)
                        {
                            return(null);
                        }

                        var tagExtraction = ProcessMaskedTag(tag);
                        if (tagExtraction != null)
                        {
                            ProcessMaskTransparencyIntoMatrix(tagExtraction.Image, tagExtraction.Rect);
                        }
                    }

                    var sourcePixelsAddr = sourceBitmap.GetPixels();
                    var destPixelsAddr   = frameSkBitmap.GetPixels();

                    byte MixColors(byte color1, byte color2, byte transparencyValue)
                    {
                        var transparency2 = (double)1 / 255 * transparencyValue;
                        var transparency1 = 1 - transparency2;

                        var result = (byte)((color1 * transparency1) + (color2 * transparency2));

                        return(result);
                    }

                    unsafe
                    {
                        byte *sourcePtr = (byte *)sourcePixelsAddr.ToPointer();
                        byte *destPtr   = (byte *)destPixelsAddr.ToPointer();

                        for (int row = 0; row < sourceBitmap.Height; row++)
                        {
                            for (int col = 0; col < sourceBitmap.Width; col++)
                            {
                                var transpValue = _globalMatrix[row, col];

                                if (transpValue == 0)                                 // Do not modify anything
                                {
                                    sourcePtr += 4;
                                    destPtr   += 4;
                                }
                                else
                                {
                                    var destBlue  = *destPtr++;                    // blue
                                    var destGreen = *destPtr++;                    // green
                                    var destRed   = *destPtr++;                    // red
                                    destPtr++;                                     // skip alpha

                                    var sourceBlue  = *sourcePtr;
                                    var sourceGreen = *(sourcePtr + 1);
                                    var sourceRed   = *(sourcePtr + 2);

                                    var mixedBlue  = MixColors(sourceBlue, destBlue, (byte)transpValue);
                                    var mixedGreen = MixColors(sourceGreen, destGreen, (byte)transpValue);
                                    var mixedRed   = MixColors(sourceRed, destRed, (byte)transpValue);

                                    *sourcePtr++ = mixedBlue;                        // blue
                                    *sourcePtr++ = mixedGreen;                       // green
                                    *sourcePtr++ = mixedRed;                         // red
                                    sourcePtr++;                                     // skip alpha
                                }
                            }
                        }
                    }
                }

                maskedImage = SKImage.FromBitmap(sourceBitmap);
            }

            if (maskedImage == null)
            {
                return(null);
            }

            if (cutOff)
            {
                return(RenderWithCrop(maskedImage, configuration));
            }
            else
            {
                return(RenderWithNoCutoff(maskedImage, configuration));
            }
        }
Пример #16
0
 public override Task VisualizeInCrossModuleAsync(IModuleVm moduleVm, IHyperArgsSink hyperStore, CrossModuleVisualizationRequest request, HyperDocumentId moduleContainerId, string pageTitle, bool?showInExternalBrowser)
 {
     throw new NotImplementedException();
 }