// metoda pro uložení diagramu do obrázku png private void SavePNG_Click(object sender, RoutedEventArgs e) { DiagramUtils diagramUtils = new DiagramUtils(); var diagramBmp = diagramUtils.MakeBitmap(diagram.Panel); diagramUtils.SavePngDialog(diagramBmp, defaultFilename: "ClassDiagram.png"); }
// metoda pro serializaci datového modelu grafu do kotr xml private void Save_Click(object sender, RoutedEventArgs e) { if ((diagram.NodesSource as ObservableCollection <ClassDiagramNodeData>).Count == 0) { return; } var model = diagram.Model as GraphLinksModel <ClassDiagramNodeData, String, String, ClassDiagramLinkData>; if (model == null) { return; } XElement root = model.Save <ClassDiagramNodeData, ClassDiagramLinkData>(Constants.UML_CD_XML_ROOT_STRING, Constants.UML_CD_XML_NODE_STRING, Constants.UML_CD_XML_LINK_STRING); root.SetAttributeValue(Constants.UML_CD_XML_VALIDATION_ATTRIBUTE_STRING, ValidationComboBox.SelectedIndex); DiagramUtils diagramUtils = new DiagramUtils(); diagramUtils.SaveDiagramDialog(root, "ClassDiagram.kotr"); }
// metoda pro deserializaci datového modelu grafu z kotr xml private void Load_Click(object sender, RoutedEventArgs e) { var diagramModel = diagram.Model as GraphLinksModel <ClassDiagramNodeData, String, String, ClassDiagramLinkData>; if (diagramModel == null) { return; } DiagramUtils diagramUtils = new DiagramUtils(); var diagramXml = diagramUtils.LoadDiagramDialog(); try { if (diagramXml == null) { return; } if (diagramXml.Name != Constants.UML_CD_XML_ROOT_STRING) { throw new ProcessManagerException("This file cannot be imported, because it contains different diagram type data."); } //vypnu validaci z UPMM(protože diagram může být uložený jako nevalidovaný) var validationAttribute = diagramXml.Attribute(Constants.UML_CD_XML_VALIDATION_ATTRIBUTE_STRING); if (validationAttribute != null) { ValidationComboBox.SelectedIndex = Int32.Parse(validationAttribute.Value); } else { ValidationComboBox.SelectedIndex = 0; } //zkontroluju, jestli všechny uzly, které mají IRI mají svůj elemnet v načteném profilu procesu var loadedModel = new GraphLinksModel <ClassDiagramNodeData, string, string, ClassDiagramLinkData>(); loadedModel.Load <ClassDiagramNodeData, ClassDiagramLinkData>(diagramXml, Constants.UML_CD_XML_NODE_STRING, Constants.UML_CD_XML_LINK_STRING); string[] categories = { "Class" }; int countOfMissing = 0; foreach (string IRI in (loadedModel.NodesSource as ObservableCollection <ClassDiagramNodeData>).Where(x => categories.Contains(x.Category)).Select(x => x.IRI)) { if (!SoftwareProcessProfile.Any(x => x.IRI == IRI)) { countOfMissing++; } } if (countOfMissing > 0) { throw new ProcessManagerException("Diagram can't be loaded, because it does not match your OWL profile."); } else { //pokud všechny uzly s IRI mají své IRI v profilu, přidám diagram, diagramModel.Load <ClassDiagramNodeData, ClassDiagramLinkData>(diagramXml, Constants.UML_CD_XML_NODE_STRING, Constants.UML_CD_XML_LINK_STRING); } } catch (Exception ex) { new Utils().ShowExceptionMessageBox(ex); } }