/// <summary> /// Set Enclosure flag /// </summary> /// <param name="obj">ActiveMapViewChangedEventArgs</param> private void OnActiveMapViewChanged(ActiveMapViewChangedEventArgs obj) { if (obj == null || obj.IncomingView == null || obj.IncomingView.Map == null) { FrameworkApplication.State.Deactivate(EnableEnclosure); return; } QueuedTask.Run(() => { using UtilityNetwork un = GetUtilityNetworkFromActiveMap(); using DiagramManager dm = un?.GetDiagramManager(); try { DiagramTemplate dt = dm?.GetDiagramTemplate(csTemplateName); if (dt == null) { FrameworkApplication.State.Deactivate(EnableEnclosure); } else { FrameworkApplication.State.Activate(EnableEnclosure); } } catch { FrameworkApplication.State.Deactivate(EnableEnclosure); } }); }
public DataTable BuildDiagramLinks(int assessmentId) { var dm = new DiagramManager(db); var diagramXml = dm.GetDiagramXml(assessmentId); var edges = dm.ProcessDigramEdges(diagramXml, assessmentId); var links = dm.GetDiagramLinks(edges); var datatable = new DataTable(); datatable.Columns.Add("Label", typeof(System.String)); datatable.Columns.Add("Subnet Names", typeof(System.String)); datatable.Columns.Add("Layer", typeof(System.String)); datatable.Columns.Add("Visible", typeof(System.String)); foreach (var l in links) { var row = datatable.NewRow(); row["Label"] = l.value; row["Subnet Names"] = string.Empty; row["Layer"] = l.layerName; row["Visible"] = l.visible; datatable.Rows.Add(row); } datatable.TableName = "Links"; return(datatable); }
public DataTable BuildDiagramZones(int assessmentId) { var dm = new DiagramManager(db); var diagramXml = dm.GetDiagramXml(assessmentId); var vertices = dm.ProcessDiagramVertices(diagramXml, assessmentId); var zones = dm.GetDiagramZones(vertices); var datatable = new DataTable(); datatable.Columns.Add("Type", typeof(System.String)); datatable.Columns.Add("Label", typeof(System.String)); datatable.Columns.Add("Sal", typeof(System.String)); datatable.Columns.Add("Layer", typeof(System.String)); datatable.Columns.Add("Visible", typeof(System.String)); foreach (var z in zones) { var row = datatable.NewRow(); row["Type"] = z.zoneType; row["Label"] = z.label; row["Sal"] = z.SAL; row["Layer"] = z.layerName; row["Visible"] = z.visible; datatable.Rows.Add(row); } datatable.TableName = "Zones"; return(datatable); }
public DiagramControl() { DiagramManager = new DiagramManager(this); DesignerItems = new ObservableCollection <DesignerItem>(); DesignerItems.CollectionChanged += (s, e) => { if (Suppress) { return; } //GetDataInfo(); if (e.Action == NotifyCollectionChangedAction.Add) { var items = e.NewItems.Cast <DesignerItem>().ToList(); if (!items.Any()) { return; } foreach (var designerItem in items) { designerItem.ContextMenu = DesignerItem.GetItemContextMenu(this); } } }; }
private void DiagramManager_KeyDown(KeyboardEventArgs e) { if (e.AltKey || e.CtrlKey || e.ShiftKey || e.Code != DiagramManager.Options.DeleteKey) { return; } var somethingWasRemoved = false; foreach (var sm in DiagramManager.SelectedModels.ToList()) { if (sm.Locked) { continue; } if (sm is NodeModel node) { DiagramManager.RemoveNode(node, false); somethingWasRemoved = true; } else if (sm is LinkModel link) { DiagramManager.RemoveLink(link, false); somethingWasRemoved = true; } } if (somethingWasRemoved) { DiagramManager.Refresh(); } }
private void DiagramManager_SelectionChanged(SelectableModel model, bool selected) { if (!DiagramManager.Options.GroupingEnabled) { return; } if (!(model is NodeModel node)) { return; } if (node.Group == null) { return; } foreach (var n in node.Group.Nodes) { if (n == node || n.Selected == selected) { continue; } if (selected) { DiagramManager.SelectModel(n, false); } else { DiagramManager.UnselectModel(n); } } }
private void DiagramManager_Wheel(WheelEventArgs e) { if (!DiagramManager.Options.AllowZooming) { return; } var oldZoom = DiagramManager.Zoom; var deltaY = DiagramManager.Options.InverseZoom ? e.DeltaY * -1 : e.DeltaY; var newZoom = deltaY > 0 ? oldZoom * _scaleBy : oldZoom / _scaleBy; if (newZoom < 0) { return; } // Other algorithms (based only on the changes in the zoom) don't work for our case // This solution is taken as is from react-diagrams (ZoomCanvasAction) var clientWidth = DiagramManager.Container.Width; var clientHeight = DiagramManager.Container.Height; var widthDiff = clientWidth * newZoom - clientWidth * oldZoom; var heightDiff = clientHeight * newZoom - clientHeight * oldZoom; var clientX = e.ClientX - DiagramManager.Container.Left; var clientY = e.ClientY - DiagramManager.Container.Top; var xFactor = (clientX - DiagramManager.Pan.X) / oldZoom / clientWidth; var yFactor = (clientY - DiagramManager.Pan.Y) / oldZoom / clientHeight; var newPanX = DiagramManager.Pan.X - widthDiff * xFactor; var newPanY = DiagramManager.Pan.Y - heightDiff * yFactor; DiagramManager.Pan = new Point(newPanX, newPanY); DiagramManager.ChangeZoom(newZoom); }
public List <NetworkDiagram> GetInconsistentDiagrams(UtilityNetwork utilityNetwork) { // Get the DiagramManager from the utility network using (DiagramManager diagramManager = utilityNetwork.GetDiagramManager()) { List <NetworkDiagram> myList = new List <NetworkDiagram>(); // Loop through the network diagrams in the diagram manager foreach (NetworkDiagram diagram in diagramManager.GetNetworkDiagrams()) { NetworkDiagramInfo diagramInfo = diagram.GetDiagramInfo(); // If the diagram is not a system diagram and is in an inconsistent state, add it to our list if (!diagramInfo.IsSystem && diagram.GetConsistencyState() != NetworkDiagramConsistencyState.DiagramIsConsistent) { myList.Add(diagram); } else { diagram.Dispose(); // If we are not returning it we need to Dispose it } } return(myList); } }
public DataTable BuildDiagramText(int assessmentId) { var dm = new DiagramManager(db); var diagramXml = dm.GetDiagramXml(assessmentId); var textCells = dm.ProcessDiagramShapes(diagramXml, assessmentId); var texts = dm.GetDiagramText(textCells); var datatable = new DataTable(); datatable.Columns.Add("Label", typeof(System.String)); datatable.Columns.Add("Layer", typeof(System.String)); datatable.Columns.Add("Visible", typeof(System.String)); foreach (var t in texts) { var row = datatable.NewRow(); row["Label"] = t.value; row["Layer"] = t.layerName; row["Visible"] = t.visible; datatable.Rows.Add(row); } datatable.TableName = "Text"; return(datatable); }
public void ApplySpaceReactionLayout() { var copier = new LayoutCopyService(); // if only one organ is visible, in following Copy steps some wrong locations are calculated ShowChildren(DiagramModel); try { _view.BeginUpdate(); var reactionDiagramModel = getReactionBlockDiagramModel(); if (reactionDiagramModel != null && reactionDiagramModel.IsLayouted) { copier.Copy(reactionDiagramModel, DiagramModel); } var spaceDiagramModel = getSpaceBlockDiagramModel(); if (spaceDiagramModel != null && spaceDiagramModel.IsLayouted) { copier.Copy(spaceDiagramModel, DiagramModel); } DiagramManager.RefreshFromDiagramOptions(); DiagramModel.IsLayouted = true; } finally { _view.EndUpdate(); } Refresh(); //to avoid scrollbar error ResetViewSize(); }
public virtual void Refresh() { DiagramManager.RefreshDiagramFromModel(); DiagramManager.RefreshFromDiagramOptions(); refreshGrid(); _view.Refresh(); }
/// <summary> /// Get the UtilityNetwork from active Map /// </summary> /// <returns>UtilityNetwork</returns> internal static UtilityNetwork GetUtilityNetworkFromActiveMap() { var unLayers = MapView.Active?.Map?.GetLayersAsFlattenedList().OfType <UtilityNetworkLayer>(); if (unLayers == null || !unLayers.Any()) { var dlLayers = MapView.Active?.Map?.GetLayersAsFlattenedList().OfType <DiagramLayer>(); if (dlLayers == null) { return(null); } foreach (var dlLayer in dlLayers) { NetworkDiagram diagram = dlLayer.GetNetworkDiagram(); DiagramManager dm = diagram.DiagramManager; UtilityNetwork un = dm.GetNetwork <UtilityNetwork>(); if (un != null) { return(un); } } } foreach (var unLayer in unLayers) { UtilityNetwork un = unLayer.GetUtilityNetwork(); if (un != null) { return(un); } } return(null); }
protected override void BuildRenderTree(RenderTreeBuilder builder) { if (!_isVisible) { return; } var componentType = DiagramManager.GetComponentForModel(Node) ?? DiagramManager.Options.DefaultNodeComponent ?? (Node.Layer == RenderLayer.HTML ? typeof(NodeWidget) : typeof(SvgNodeWidget)); builder.OpenElement(0, Node.Layer == RenderLayer.HTML ? "div" : "g"); builder.AddAttribute(1, "class", "node"); if (Node.Layer == RenderLayer.HTML) { builder.AddAttribute(2, "style", $"top: {Node.Position.Y.ToInvariantString()}px; left: {Node.Position.X.ToInvariantString()}px"); } else { builder.AddAttribute(2, "transform", $"translate({Node.Position.X.ToInvariantString()} {Node.Position.Y.ToInvariantString()})"); } builder.AddAttribute(3, "onmousedown", EventCallback.Factory.Create <MouseEventArgs>(this, OnMouseDown)); builder.AddEventStopPropagationAttribute(4, "onmousedown", true); builder.AddAttribute(5, "onmouseup", EventCallback.Factory.Create <MouseEventArgs>(this, OnMouseUp)); builder.AddEventStopPropagationAttribute(6, "onmouseup", true); builder.AddElementReferenceCapture(7, value => _element = value); builder.OpenComponent(8, componentType); builder.AddAttribute(9, "Node", Node); builder.CloseComponent(); builder.CloseElement(); }
public string ImportCsetd([FromBody] DiagramRequest importRequest) { if (importRequest == null) { return("request payload not sent"); } // get the assessment ID from the JWT TokenManager tm = new TokenManager(); int userId = (int)tm.PayloadInt(Constants.Token_UserId); int? assessmentId = tm.PayloadInt(Constants.Token_AssessmentId); try { using (CSET_Context db = new CSET_Context()) { DiagramManager dm = new DiagramManager(db); return(dm.ImportOldCSETDFile(importRequest.DiagramXml, (int)assessmentId)); } } catch (Exception exc) { return(exc.ToString()); } }
public void getLayerVisibilityTest() { using (CSET_Context db = new CSET_Context()) { DiagramManager manager = new DiagramManager(db); manager.getLayerVisibility("kGJ--9y5AF0ObGW-ZAqX-1", 9); } }
protected override void BuildRenderTree(RenderTreeBuilder builder) { var componentType = DiagramManager.GetComponentForModel(Group) ?? typeof(DefaultGroupWidget); builder.OpenComponent(0, componentType); builder.AddAttribute(1, "Group", Group); builder.CloseComponent(); }
public void ProcessDiagramTest() { DiagramManager d = new DiagramManager(new CSET_Context()); string test = File.ReadAllText(@"TestItems\testdiagram.xml"); //change test to reference below if wanted StringReader reader = new StringReader(test); var vertices = d.ProcessDiagramVertices(reader, 2); }
public GroupModel(DiagramManager diagramManager, NodeModel[] children, byte padding = 30) { _diagramManager = diagramManager; _padding = padding; Size = Size.Zero; Children = children; Initialize(); }
void ManageDiagrams(TimeRow row, double epsilon, ref Image diagramRasterized, ref Image diagramDistance, ref Image scaleDistance, ref Chart pointDiagram, ref Chart lineDiagram, ref string AnalysisResult) { DiagramManager diagram = new DiagramManager(row, (float)epsilon); diagram.GenerateReccurentMatrix(); diagramRasterized = diagram.GetReccurentDiagram(_view.DiagramBox.Width, _view.DiagramBox.Height); diagramDistance = diagram.GetDistanceDiagram(_view.DistanceBox.Width, _view.DistanceBox.Height); scaleDistance = diagram.GetDistancePalette(_view.DistanceScaleBox.Width); bool[,] matrix = diagram.GetReccurentMatrix(); int side = matrix.GetLength(0); pointDiagram.Series[0].MarkerSize = side > 100 ? 2 : (int)(pointDiagram.Height / side * 0.9); pointDiagram.Series[0].Points.Clear(); int move = 0; int max = side * side + row.Row.Length - 1; int invokeVal = max / 10; for (int i = 0; i < side; i++) { for (int j = 0; j < side; j++) { if (matrix[i, j] == true) { pointDiagram.Series[0].Points.AddXY(i + 1, j + 1); } if ((move % invokeVal) == 0) { ProgressAction?.Invoke(10, move / invokeVal); } move++; } } lineDiagram.Series[0].Points.Clear(); for (int i = 0; i < row.Row.Length - 1; i++) { lineDiagram.Series[0].Points.AddXY((row[i]), row[i + 1]); if ((move % invokeVal) == 0) { ProgressAction?.Invoke(10, move / invokeVal); } move++; } //if (move < max) ProgressAction?.Invoke(10, move / invokeVal); AnalysisResult = "\n Analysis: \n RR: " + diagram.RR.ToString() + "\n DET: " + diagram.DET.ToString() + "\n L: " + diagram.L.ToString() + "\n DIV: " + diagram.DIV.ToString() + "\n ENTR: " + diagram.ENTR.ToString() + "\n RATIO: " + diagram.RATIO.ToString(); row.Dispose(); diagram.Dispose(); matrix = null; GC.Collect(); }
/// <summary> /// Get the Un Schema version /// </summary> /// <param name="diagram">NetworkDiagram</param> /// <returns>string</returns> /// <remarks>UN Version 3 and earlier use only Subnetwork name /// UN Version 4 and later use Supported subnetwork name for container /// UN Version 5 and later use Supporting subnetwork name for structure</remarks> internal static int GetSchemaVersion(NetworkDiagram diagram) { DiagramManager diagramManager = diagram.DiagramManager; UtilityNetwork utilityNetwork = diagramManager.GetNetwork <UtilityNetwork>(); UtilityNetworkDefinition unDefinition = utilityNetwork.GetDefinition(); return(Convert.ToInt32(unDefinition.GetSchemaVersion())); }
protected override void BuildRenderTree(RenderTreeBuilder builder) { var componentType = DiagramManager.GetComponentForModel(Node) ?? DiagramManager.Options.DefaultNodeComponent ?? (Node.Layer == RenderLayer.HTML ? typeof(NodeWidget) : typeof(SvgNodeWidget)); builder.OpenComponent(0, componentType); builder.AddAttribute(1, "Node", Node); builder.CloseComponent(); }
public IHttpActionResult GetTemplates() { var tm = new TokenManager(); var userId = tm.PayloadInt(Constants.Token_UserId); var dm = new DiagramManager(new CSET_Context()); var templates = dm.GetDiagramTemplates(); return(Ok(templates)); }
protected override void BuildRenderTree(RenderTreeBuilder builder) { var componentType = DiagramManager.GetComponentForModel(Link) ?? DiagramManager.Options.DefaultLinkComponent ?? typeof(LinkWidget); builder.OpenComponent(0, componentType); builder.AddAttribute(1, "Link", Link); builder.CloseComponent(); }
private void DiagramManager_MouseDown(Model model, MouseEventArgs e) { if (!(model is PortModel port) || port.Locked) { return; } _initialX = e.ClientX; _initialY = e.ClientY; _ongoingLink = DiagramManager.AddLink(port, null); }
public static void ReconnectLinksToClosestPorts(this DiagramManager diagramManager) { // Only refresh ports once var portsToRefresh = new HashSet <PortModel>(); foreach (var link in diagramManager.AllLinks.ToArray()) { if (link.TargetPort == null) { continue; } var sourcePorts = link.SourcePort.Parent.Ports; var targetPorts = link.TargetPort.Parent.Ports; // Find the ports with minimal distance var minDistance = double.MaxValue; var minSourcePort = link.SourcePort; var minTargetPort = link.TargetPort; foreach (var sourcePort in sourcePorts) { foreach (var targetPort in targetPorts) { var distance = sourcePort.Position.DistanceTo(targetPort.Position); if (distance < minDistance) { minDistance = distance; minSourcePort = sourcePort; minTargetPort = targetPort; } } } // Reconnect if (link.SourcePort != minSourcePort) { portsToRefresh.Add(link.SourcePort); portsToRefresh.Add(minSourcePort); link.SetSourcePort(minSourcePort); } if (link.TargetPort != minTargetPort) { portsToRefresh.Add(link.TargetPort); portsToRefresh.Add(minTargetPort); link.SetTargetPort(minTargetPort); } } foreach (var port in portsToRefresh) { port.Refresh(); } }
/// <summary> /// Get the UtilityNetwork from the layer /// </summary> /// <param name="layer">Layer</param> /// <returns>UtilityNetwork</returns> private static UtilityNetwork GetUtilityNetworkFromLayer(Layer layer) { if (layer == null) { return(null); } if (layer is UtilityNetworkLayer) { UtilityNetworkLayer utilityNetworkLayer = layer as UtilityNetworkLayer; return(utilityNetworkLayer.GetUtilityNetwork()); } else if (layer is SubtypeGroupLayer) { CompositeLayer compositeLayer = layer as CompositeLayer; UtilityNetwork un; foreach (var v in compositeLayer.Layers) { un = GetUtilityNetworkFromLayer(v); if (un != null) { return(un); } } } else if (layer is FeatureLayer) { FeatureLayer featureLayer = layer as FeatureLayer; using FeatureClass featureClass = featureLayer.GetFeatureClass(); if (featureClass.IsControllerDatasetSupported()) { IReadOnlyList <Dataset> controllerDatasets = featureClass.GetControllerDatasets(); foreach (Dataset controllerDataset in controllerDatasets) { if (controllerDataset is UtilityNetwork) { return(controllerDataset as UtilityNetwork); } } } } else if (layer is DiagramLayer dl) { NetworkDiagram diagram = dl.GetNetworkDiagram(); DiagramManager diagramManager = diagram.DiagramManager; return(diagramManager.GetNetwork <UtilityNetwork>()); } return(null); }
private void DiagramManager_MouseMove(Model model, MouseEventArgs e) { if (!DiagramManager.Options.AllowPanning || _initialPan == null) { return; } var deltaX = e.ClientX - _lastClientX - (DiagramManager.Pan.X - _initialPan.X); var deltaY = e.ClientY - _lastClientY - (DiagramManager.Pan.Y - _initialPan.Y); DiagramManager.UpdatePan(deltaX, deltaY); }
private void DiagramManager_KeyDown(KeyboardEventArgs e) { if (!DiagramManager.Options.GroupingEnabled) { return; } if (DiagramManager.SelectedModels.Count == 0) { return; } if (!e.CtrlKey || !e.AltKey || !e.Key.Equals("g", StringComparison.InvariantCultureIgnoreCase)) { return; } var selectedNodes = DiagramManager.SelectedModels .Where(m => m is NodeModel) .Select(m => (NodeModel)m) .ToArray(); var nodesWithGroup = selectedNodes.Where(n => n.Group != null).ToArray(); if (nodesWithGroup.Length > 0) { // Ungroup foreach (var group in nodesWithGroup.GroupBy(n => n.Group !).Select(g => g.Key)) { DiagramManager.Ungroup(group); } } else { // Group if (selectedNodes.Length < 2) { return; } if (selectedNodes.Any(n => n.Group != null)) { return; } if (selectedNodes.Select(n => n.Layer).Distinct().Count() > 1) { return; } DiagramManager.Group(selectedNodes); } }
private void DiagramManager_MouseMove(Model model, MouseEventArgs e) { if (_initialPan == null) { return; } var deltaX = e.ClientX - _lastClientX - (DiagramManager.Pan.X - _initialPan.X); var deltaY = e.ClientY - _lastClientY - (DiagramManager.Pan.Y - _initialPan.Y); DiagramManager.ChangePan(deltaX, deltaY); }
protected override void BuildRenderTree(RenderTreeBuilder builder) { var componentType = DiagramManager.GetComponentForModel(Link) ?? DiagramManager.Options.Links.DefaultLinkComponent ?? typeof(LinkWidget); builder.OpenElement(0, "g"); builder.AddAttribute(1, "class", "link"); builder.AddAttribute(2, "onmousedown", EventCallback.Factory.Create <MouseEventArgs>(this, OnMouseDown)); builder.AddEventStopPropagationAttribute(3, "onmousedown", true); builder.OpenComponent(4, componentType); builder.AddAttribute(5, "Link", Link); builder.CloseComponent(); builder.CloseElement(); }
/// <summary> /// OnDragDrop is used to create classes corresponding to the selection dragged /// from the Server Explorer /// </summary> private void OnDragDrop(object sender, DragEventArgs e) { // Check if the data present is in the DSRef format if (e.Data.GetDataPresent(DSRefNavigator.DataSourceReferenceFormat)) { try { // Create a navigator for the DSRef Consumer (and dispose it when finished) using(DSRefNavigator navigator = new DSRefNavigator(e.Data.GetData( DSRefNavigator.DataSourceReferenceFormat) as Stream)) { _output = new OutputWindowHelper(DTEHelper.GetDTE(Store)); // Get connection info of the connection of selected tables string providerType = null; IDbConnection connection = ServerExplorerHelper.GetConnection(navigator, out providerType); IDbHelper helper; switch(providerType) { case "System.Data.SqlClient.SqlConnection": helper = new SqlHelper(connection); break; case "System.Data.OracleClient.OracleConnection": case "Oracle.DataAccess.Client.OracleConnection": Log("Selecting Oracle Helper for provider " + providerType); helper = new OracleHelper(connection); break; case "MySql.Data.MySqlClient.MySqlConnection": helper = new MySqlHelper(connection); break; default: // TODO: Support other databases with native providers. Log( string.Format( @"Failed: ActiveWriter does not support model generation through {0}. Supported providers: System.Data.SqlClient.SqlConnection, System.Data.OracleClient.OracleConnection, Oracle.DataAccess.Client.OracleConnection, MySql.Data.MySqlClient.MySqlConnection. You can help us improve this functionality, though. See http://www.castleproject.org/others/contrib/index.html to access ActiveWriter source code under the contrib repository, and check Dsl\ServerExplorerSupport\IDbHelper.cs for the start.", providerType)); return; } // Get the root element where we'll add the classes Model model = Helper.GetModel(Store); if (model == null) { Log("Failed: Cannot get the model for the store."); return; } _manager = new DiagramManager(Store, model); _manager.OutputWindow = _output; // Create a transaction to add the clases. using(Transaction txAdd = model.Store.TransactionManager.BeginTransaction("Add classes")) { List<DSRefNode> tableList = new List<DSRefNode>(); // Get the tables from the Server Explorer selection // We'll iterate this list twice to use nodes' list to // determine if we have to generate relations for each // table or not. foreach(DSRefNode node in navigator.ChildTableNodes) { tableList.Add(node); } _manager.Tables = tableList; _relations = new List<Relation>(); foreach(DSRefNode node in tableList) { // Create the table and add it to the model ModelClass cls = _manager.NewClass(node.Owner, node.Name); PopulateClass(cls, connection, helper); _manager.AssignModel(cls); } // Create relations if (_relations != null && _relations.Count > 0) { HandleRelations(); } // Commit the transaction and add tables to the model txAdd.Commit(); } // TODO: Auto layout doesn't work well. Will check with future versions of DSL tools. // this.AutoLayoutShapeElements(this.NestedChildShapes); } } catch(Exception ex) { Debug.WriteLine(ex.Message); } finally { _manager = null; _relations = null; _output = null; } } }