private void ViewShowLinks() { frmFlowChart.State.ShowLinks = ((IBarCheckableCommand)barManager1.Commands["View.ShowLinks"]).Checked; foreach (Arrow arrow in frmFlowChart.FlowChart.Arrows) { EditorLink link = arrow.Tag as EditorLink; if (link != null) { link.UpdateVisibility(); } else { frmFlowChart.State.ClientProtocol.LogMessage(out requestId, "EditorLink missing for Arrow (Text: " + arrow.Text + ".)", SysCAD.Log.MessageType.Error); } } }
internal void CreateLink(ModelLink modelLink, GraphicLink graphicLink) { if (flowChart.InvokeRequired) { flowChart.BeginInvoke(new CreateLinkDelegate(CreateLink), new object[] { modelLink, graphicLink }); } else { bool isVisible = false; { EditorNode destinationNode, originNode; if ( (editorNodes.TryGetValue(graphicLink.Origin, out originNode)) && (editorNodes.TryGetValue(graphicLink.Destination, out destinationNode)) ) { isVisible = ((originNode.Visible) || (destinationNode.Visible)); } } Box textBox = null; { SysCAD.Protocol.Rectangle textArea = graphicLink.TagArea; if (textArea.IsEmpty) // We haven't got a TagArea stored in the item yet. { SysCAD.Protocol.Point pointOrigin = new SysCAD.Protocol.Point(); SysCAD.Protocol.Point pointDestination = new SysCAD.Protocol.Point(); SysCAD.Protocol.Point pointCenter = new SysCAD.Protocol.Point(); if (graphicLink.ControlPoints != null && graphicLink.ControlPoints.Count > 1) { pointOrigin = graphicLink.ControlPoints[0]; pointDestination = graphicLink.ControlPoints[graphicLink.ControlPoints.Count - 1]; pointCenter = new SysCAD.Protocol.Point((pointDestination.X + pointOrigin.X) / 2.0F, (pointDestination.Y + pointOrigin.Y) / 2.0F); } textArea = new SysCAD.Protocol.Rectangle(pointCenter.X, pointCenter.Y + 4.0, 20.0, 4.0); } textBox = flowChart.CreateBox((float)textArea.X, (float)textArea.Y, (float)textArea.Width, (float)textArea.Height); textBox.RotationAngle = (float)graphicLink.TagAngle; textBox.FillColor = System.Drawing.Color.FromArgb(1, System.Drawing.Color.Black); textBox.FrameColor = System.Drawing.Color.FromArgb(1, System.Drawing.Color.Black); textBox.RotateContents = true; textBox.Style = BoxStyle.Shape; textBox.Shape = ShapeTemplate.FromId("Rectangle"); textBox.EnabledHandles = Handles.ResizeTopLeft | Handles.ResizeTopRight | Handles.ResizeBottomRight | Handles.ResizeBottomLeft | Handles.ResizeTopCenter | Handles.ResizeMiddleRight | Handles.ResizeBottomCenter | Handles.ResizeMiddleLeft | Handles.Move; textBox.Text = graphicLink.Tag; } Arrow arrow = flowChart.CreateArrow(new PointF(0.0F, 0.0F), new PointF(10.0F, 10.0F)); arrow.CustomDraw = CustomDraw.Additional; { switch (modelLink.LinkClass) { case "Pipe-1": break; case "CtrlLink": arrow.PenColor = System.Drawing.Color.Gray; break; default: arrow.PenColor = System.Drawing.Color.Red; break; } EditorNode origin = null; EditorNode destination = null; origin = Item(graphicLink.Origin); destination = Item(graphicLink.Destination); if (origin == null) { clientProtocol.LogMessage(out requestId, "Origin Guid " + graphicLink.Origin + " not found for link " + graphicLink.Tag, SysCAD.Log.MessageType.Error); return; } if (destination == null) { clientProtocol.LogMessage(out requestId, "Destination Guid " + graphicLink.Destination + " not found for link " + graphicLink.Tag, SysCAD.Log.MessageType.Error); return; } SysCAD.Protocol.Point pointOrigin = new SysCAD.Protocol.Point(); SysCAD.Protocol.Point pointDestination = new SysCAD.Protocol.Point(); if (graphicLink.ControlPoints != null && graphicLink.ControlPoints.Count > 1) { pointOrigin = graphicLink.ControlPoints[0]; pointDestination = graphicLink.ControlPoints[graphicLink.ControlPoints.Count - 1]; } if (origin != null) { if (origin.HiddenBox != null) arrow.Origin = origin.HiddenBox; else arrow.Origin = origin.ModelBox; } if (destination != null) { if (destination.HiddenBox != null) arrow.Destination = destination.HiddenBox; else arrow.Destination = destination.ModelBox; } if ((modelLink.OriginPort != null) && ((origin.ModelBox.Tag as EditorNode).anchorTagToInt.ContainsKey(modelLink.OriginPort + graphicLink.OriginPortID.ToString()))) arrow.OrgnAnchor = (origin.ModelBox.Tag as EditorNode).anchorTagToInt[modelLink.OriginPort + graphicLink.OriginPortID.ToString()]; else { Console.WriteLine("(origin.ModelBox.Tag as EditorNode).modelNode : " + (origin.ModelBox.Tag as EditorNode).ModelNode.Guid.ToString() + " : " + (origin.ModelBox.Tag as EditorNode).ModelNode.NodeClass.ToString() + " : " + (origin.ModelBox.Tag as EditorNode).ModelNode.Tag.ToString()); Console.WriteLine("modelLink.OriginPort : " + modelLink.OriginPort); Console.WriteLine("graphicLink.OriginPortID.ToString() : " + graphicLink.OriginPortID.ToString()); Console.WriteLine("anchorTagToInt Key:Value pairs:"); foreach (string key in (origin.ModelBox.Tag as EditorNode).anchorTagToInt.Keys) { Console.WriteLine(" " + key + " : " + (origin.ModelBox.Tag as EditorNode).anchorTagToInt[key].ToString()); } Console.WriteLine(); Console.WriteLine(); arrow.DestAnchor = -1; } if ((modelLink.DestinationPort != null) && ((destination.ModelBox.Tag as EditorNode).anchorTagToInt.ContainsKey(modelLink.DestinationPort + graphicLink.DestinationPortID.ToString()))) arrow.DestAnchor = (destination.ModelBox.Tag as EditorNode).anchorTagToInt[modelLink.DestinationPort + graphicLink.DestinationPortID.ToString()]; else { Console.WriteLine("(destination.ModelBox.Tag as EditorNode).modelNode : " + (destination.ModelBox.Tag as EditorNode).ModelNode.Guid.ToString() + " : " + (destination.ModelBox.Tag as EditorNode).ModelNode.NodeClass.ToString() + " : " + (destination.ModelBox.Tag as EditorNode).ModelNode.Tag.ToString()); Console.WriteLine("modelLink.DestinationPort : " + modelLink.DestinationPort); Console.WriteLine("graphicLink.DestinationPortID.ToString() : " + graphicLink.DestinationPortID.ToString()); Console.WriteLine("anchorTagToInt Key:Value pairs:"); foreach (string key in (destination.ModelBox.Tag as EditorNode).anchorTagToInt.Keys) { Console.WriteLine(" " + key + " : " + (destination.ModelBox.Tag as EditorNode).anchorTagToInt[key].ToString()); } Console.WriteLine(); Console.WriteLine(); arrow.DestAnchor = -1; } String originTag = ""; if (origin != null) originTag = origin.Tag; String destinationTag = ""; if (destination != null) destinationTag = destination.Tag; String originPort = ""; if (modelLink.OriginPort != null) originPort = modelLink.OriginPort; String destinationPort = ""; if (modelLink.DestinationPort != null) destinationPort = modelLink.DestinationPort; arrow.ToolTip = "Tag:" + graphicLink.Tag + "\nSrc: " + originTag + ":" + originPort + "\nDst: " + destinationTag + ":" + destinationPort; arrow.ArrowHead = ArrowHead.Triangle; arrow.Style = ArrowStyle.Cascading; if (graphicLink.ControlPoints != null && graphicLink.ControlPoints.Count > 1) { SetControlPoints(arrow, graphicLink.ControlPoints); } if (graphicLink.ControlPoints[0].X == graphicLink.ControlPoints[1].X) { arrow.CascadeOrientation = Orientation.Auto; } else { arrow.CascadeOrientation = Orientation.Auto; } } EditorLink editorLink = new EditorLink(this, graphicLink, modelLink); editorLink.Arrow = arrow; editorLink.TextBox = textBox; editorLink.UpdateVisibility(); arrow.Tag = editorLink; textBox.Tag = editorLink; editorLinks.Add(editorLink.Guid, editorLink); NewElementSelection(); } }