/// <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); }
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"); } }