private PortDesc ensurePortAdded(NodeDesc ndesc, PortDesc pdesc) { if (ndesc.ownedPortIdToPortDesc.ContainsKey(pdesc.id)) { var epd = ndesc.ownedPortIdToPortDesc[pdesc.id]; if (epd.direction == Dir.UNKNOWN) { epd.direction = pdesc.direction; } if (epd.direction != pdesc.direction) { epd.direction = Dir.BIDIR; } if (epd.type != pdesc.type) { throw new Exception("Port conflict. Tried to merge: " + pdesc.ToString() + " with existing " + epd.ToString()); } return(epd); } else { ndesc.ownedPortIdToPortDesc.Add(pdesc.id, pdesc); return(pdesc); } }
private void btn_upload_Click(object sender, EventArgs e) { ArduinoSketchUploaderOptions options = new ArduinoSketchUploaderOptions(); //options.ArduinoModel = ArduinoUploader.Hardware.ArduinoModel.UnoR3; options.ArduinoModel = ArduinoUploader.Hardware.ArduinoModel.NanoR3; options.FileName = this.lbl_file.Text; PortDesc selectedPort = (PortDesc)this.cmb_ports.SelectedItem; options.PortName = selectedPort.DeviceId; ArduinoSketchUploader uploader = new ArduinoSketchUploader(options, null, null); this.lbl_msg.Text = "Uploading ..."; uploader.UploadSketch(); this.lbl_msg.Text = "Upload Completed."; }
private void drawGraph() { var uiGraphAsset = ebxDataContainers.instances[assetGuid]; var assetName = uiGraphAsset.data.get("Name").castTo <ASimpleValue>().Val; Graph graph = new Graph(assetName); AArray nodes = uiGraphAsset.data.get("Nodes").castTo <AArray>(); var splitNodes = new HashSet <string>(); var portsGuidToPortDesc = new Dictionary <string, PortDesc>(); /* target port guid, source vertex name */ var jumpNodeEdges = new List <Tuple <string, string> >(); int nodeNextIdx = 0; int portNextIdx = 0; foreach (var nodeRef in nodes.elements) { var nodeInRef = nodeRef.castTo <AIntRef>(); var nodeAStruct = ebxDataContainers.instances[nodeInRef.instanceGuid].data; var nodeName = nodeAStruct.get("Name").castTo <ASimpleValue>().Val; bool isRoot = Convert.ToBoolean(nodeAStruct.get("IsRootNode").castTo <ASimpleValue>().Val); var nodeContainer = ebxDataContainers.instances[nodeInRef.instanceGuid]; var nodeType = nodeContainer.data.name; var nodeLabel = "N" + nodeNextIdx.ToString() + ": " + nodeName + "\n[" + nodeType + "]"; nodeNextIdx += 1; var nodeNode = graph.AddNode(nodeLabel); var ports = ebxDataContainers.getIntRefedObjsByTypeFor(nodeInRef.instanceGuid, "UINodePort"); foreach (var dataContainer in ports) { var portName = dataContainer.data.get("Name").castTo <ASimpleValue>().Val; var portDesc = new PortDesc(portNextIdx, portName, nodeLabel); portNextIdx += 1; if (!portsGuidToPortDesc.ContainsKey(dataContainer.guid)) { portsGuidToPortDesc.Add(dataContainer.guid, portDesc); } } /* handling special nodes */ if (nodeContainer.hasPartial("JumpNode")) { var targetPortGuid = nodeAStruct.get("TargetPort").castTo <AIntRef>().instanceGuid; jumpNodeEdges.Add(new Tuple <string, string>(targetPortGuid, nodeLabel)); } else if (nodeContainer.hasPartial("SplitterNode")) { splitNodes.Add(nodeLabel); } /* some visual formatting */ nodeNode.Attr.LabelMargin = 3; nodeNode.Attr.Padding = 2; nodeNode.Attr.Shape = Shape.Box; if (isRoot) { nodeNode.Attr.FillColor = Color.PaleVioletRed; } else if (nodeContainer.hasPartial("InstanceOutputNode")) { nodeNode.Attr.FillColor = Color.LightBlue; } else if (nodeContainer.hasPartial("InstanceInputNode")) { nodeNode.Attr.FillColor = Color.MediumPurple; } else { nodeNode.Attr.FillColor = Color.LightGreen; } } /* draw ordinary edges */ var connections = uiGraphAsset.data.get("Connections").castTo <AArray>(); foreach (var connRef in connections.elements) { var conn = ebxDataContainers.instances[connRef.castTo <AIntRef>().instanceGuid].data; var srcGuid = conn.get("SourcePort").castTo <AIntRef>().instanceGuid; var targetGuid = conn.get("TargetPort").castTo <AIntRef>().instanceGuid; var srcPortDesc = portsGuidToPortDesc[srcGuid]; var targetPortDesc = portsGuidToPortDesc[targetGuid]; var connLabel = ""; if (srcPortDesc.portName.Length > 0 || targetPortDesc.portName.Length > 0) { connLabel = srcPortDesc.portName + " -> " + targetPortDesc.portName; } var edge = graph.AddEdge(srcPortDesc.nodeLabel, connLabel, targetPortDesc.nodeLabel); edge.Attr.Weight = 10; srcPortDesc.refCount += 1; targetPortDesc.refCount += 1; } /* draw special edges */ foreach (var jumpEdge in jumpNodeEdges) { var sourceNode = jumpEdge.Item2; var targetPortGuid = jumpEdge.Item1; var targetPortDesc = portsGuidToPortDesc[targetPortGuid]; var edge = graph.AddEdge(sourceNode, "", targetPortDesc.nodeLabel); targetPortDesc.refCount += 1; /* visual formatting */ edge.Attr.Weight = 1; edge.Attr.AddStyle(Style.Dotted); edge.Attr.Color = Color.OrangeRed; } foreach (var portDesc in portsGuidToPortDesc.Values) { if (portDesc.refCount < 1) { var portLabel = "P" + portDesc.portIdx + ": " + portDesc.portName; var portNode = graph.AddNode(portLabel); var portEdge = graph.AddEdge(portDesc.nodeLabel, "", portLabel); /* visual formatting */ portNode.Attr.FillColor = Color.Orange; portNode.Attr.Shape = Shape.Box; portEdge.Attr.ArrowheadAtSource = ArrowStyle.None; portEdge.Attr.ArrowheadAtTarget = ArrowStyle.None; } } this.SuspendLayout(); /* bind graph to viewer; must be bound for RemoveNode/Edge to work */ viewer.Graph = graph; /* remove split nodes */ if (hideSplittersCheckbox.Checked) { var nodesToRemove = new List <Node>(); var edgesToRemove = new List <Edge>(); foreach (var splitNode in splitNodes) { var node = graph.FindNode(splitNode); foreach (var inEdge in node.InEdges) { var inNode = inEdge.SourceNode; foreach (var outEdge in node.OutEdges) { var newEdge = graph.AddEdge(inNode.Id, outEdge.LabelText, outEdge.TargetNode.Id); foreach (var style in outEdge.Attr.Styles) { newEdge.Attr.AddStyle(style); } newEdge.Attr.Color = outEdge.Attr.Color; edgesToRemove.Add(outEdge); } edgesToRemove.Add(inEdge); } nodesToRemove.Add(node); } foreach (var node in nodesToRemove) { graph.RemoveNode(node); } } /* some visual formatting */ var layoutSettings = new SugiyamaLayoutSettings(); graph.LayoutAlgorithmSettings = layoutSettings; this.ResumeLayout(); /* assign it once again... */ viewer.Graph = graph; }