/// <summary>
        /// Create a set of minimal options
        /// </summary>
        public static DocumentShelfOptions CreateDefault()
        {
            var opt = new DocumentShelfOptions();

            //
            //  basic record
            //

            var rec = new DocumentShelfOptionsRecord();

            rec.ForceVersion = DocumentEntity.SubmodelVersion.Default;
            opt.Records.Add(rec);

            // V1.0
            var preDefs = new AasxPredefinedConcepts.DefinitionsVDI2770.SetOfDefsVDI2770(
                new AasxPredefinedConcepts.DefinitionsVDI2770());
            var semIdDocumentation = preDefs.SM_VDI2770_Documentation?.semanticId?.GetAsExactlyOneKey();

            if (semIdDocumentation != null)
            {
                rec.AllowSubmodelSemanticId.Add(semIdDocumentation);
            }

            // V1.1
            rec.AllowSubmodelSemanticId.Add(
                AasxPredefinedConcepts.VDI2770v11.Static.SM_ManufacturerDocumentation.GetSemanticKey());

            //
            // further models for CAD
            //

            rec = new DocumentShelfOptionsRecord()
            {
                UsageInfo = "Some manufacturers use manufacturer documentation to provide models for " +
                            "Computer Aided Design (CAD) and further engineering tools."
            };
            opt.Records.Add(rec);

            rec.AllowSubmodelSemanticId.Add(new AdminShellV20.Key(
                                                AdminShell.Key.Submodel, false, AdminShell.Identification.IRI,
                                                "smart.festo.com/AAS/Submodel/ComputerAidedDesign/1/0"));

            return(opt);
        }
Exemplo n.º 2
0
        private void ParseSubmodelToListItems(
            AdminShell.Submodel subModel, AasxPluginDocumentShelf.DocumentShelfOptions options,
            int selectedDocClass, AasxLanguageHelper.LangEnum selectedLanguage, ViewModel.ListType selectedListType)
        {
            try
            {
                // influence list view rendering, as well
                if (selectedListType == ViewModel.ListType.Bars)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForBar"];
                    ScrollMainContent.ItemsPanel   = (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForBar"];
                }

                if (selectedListType == ViewModel.ListType.Grid)
                {
                    ScrollMainContent.ItemTemplate = (DataTemplate)ScrollMainContent.Resources["ItemTemplateForGrid"];
                    ScrollMainContent.ItemsPanel   =
                        (ItemsPanelTemplate)ScrollMainContent.Resources["ItemsPanelForGrid"];
                }

                // clean table
                ScrollMainContent.ItemsSource = null;

                // access
                if (subModel?.semanticId == null || options == null)
                {
                    return;
                }

                // make sure for the right Submodel
                DocumentShelfOptionsRecord foundRec = null;
                foreach (var rec in options.LookupAllIndexKey <DocumentShelfOptionsRecord>(
                             subModel?.semanticId?.GetAsExactlyOneKey()))
                {
                    foundRec = rec;
                }

                if (foundRec == null)
                {
                    return;
                }

                // right now: hardcoded check for mdoel version
                var modelVersion = DocumentEntity.SubmodelVersion.Default;
                var defs11       = AasxPredefinedConcepts.VDI2770v11.Static;
                if (subModel.semanticId.Matches(defs11?.SM_ManufacturerDocumentation?.GetSemanticKey()))
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V11;
                }
                if (foundRec.ForceVersion == DocumentEntity.SubmodelVersion.V10)
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V10;
                }
                if (foundRec.ForceVersion == DocumentEntity.SubmodelVersion.V11)
                {
                    modelVersion = DocumentEntity.SubmodelVersion.V11;
                }

                // set checkbox
                this.CheckBoxLatestVersion.IsChecked = modelVersion == DocumentEntity.SubmodelVersion.V11;

                // set usage info
                var useinf = foundRec.UsageInfo;
                TextBlockUsageInfo.Text   = useinf;
                PanelUsageInfo.Visibility = useinf.HasContent() ? Visibility.Visible : Visibility.Collapsed;

                // what defaultLanguage
                string defaultLang = null;
                if (theViewModel != null && theViewModel.TheSelectedLanguage > AasxLanguageHelper.LangEnum.Any)
                {
                    defaultLang = AasxLanguageHelper.LangEnumToISO639String[(int)theViewModel.TheSelectedLanguage];
                }

                // make new list box items
                var its = new List <DocumentEntity>();
                if (modelVersion != DocumentEntity.SubmodelVersion.V11)
                {
                    its = ListOfDocumentEntity.ParseSubmodelForV10(
                        thePackage, subModel, options, defaultLang, selectedDocClass, selectedLanguage);
                }
                else
                {
                    its = ListOfDocumentEntity.ParseSubmodelForV11(
                        thePackage, subModel, defs11, defaultLang, selectedDocClass, selectedLanguage);
                }

                // post process
                foreach (var ent in its)
                {
                    // make viewbox to host __later__ created image!
                    var vb = new Viewbox();
                    vb.Stretch       = Stretch.Uniform;
                    ent.ImgContainer = vb;

                    // if a preview file exists, try load directly, but not interfere
                    // we delayed load logic, as these images might get more detailed
                    if (ent.PreviewFile?.Path?.HasContent() == true)
                    {
                        var inputFn = ent.PreviewFile.Path;

                        // from package?
                        if (CheckIfPackageFile(inputFn))
                        {
                            inputFn = thePackage.MakePackageFileAvailableAsTempFile(ent.PreviewFile.Path);
                        }

                        ent.LoadImageFromPath(inputFn);
                    }

                    // delayed load logic
                    // can already put a generated image into the viewbox?
                    if (referableHashToCachedBitmap != null &&
                        referableHashToCachedBitmap.ContainsKey(ent.ReferableHash))
                    {
                        var img = new Image();
                        img.Source             = referableHashToCachedBitmap[ent.ReferableHash];
                        ent.ImgContainer.Child = img;
                    }
                    else
                    {
                        // trigger generation of image

                        // check if already in list
                        DocumentEntity foundDe = null;
                        foreach (var de in theDocEntitiesToPreview)
                        {
                            if (ent.ReferableHash == de.ReferableHash)
                            {
                                foundDe = de;
                            }
                        }

                        lock (theDocEntitiesToPreview)
                        {
                            if (foundDe != null)
                            {
                                theDocEntitiesToPreview.Remove(foundDe);
                            }
                            theDocEntitiesToPreview.Add(ent);
                        }
                    }

                    // attach events and add
                    ent.DoubleClick += DocumentEntity_DoubleClick;
                    ent.MenuClick   += DocumentEntity_MenuClick;
                    ent.DragStart   += DocumentEntity_DragStart;
                }

                // finally set
                ScrollMainContent.ItemsSource = its;
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Exception when parse/ display Submodel");
            }
        }