Example #1
0
        private void toolStripButton4_Click(object sender, EventArgs e)
        {
            OpenFileDialog of = new OpenFileDialog();

            of.Filter = "RaspiDevice Files (*.rd) | *.rd";

            if (of.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                RaspiDeviceFile data = importer.DeserializeDeviceFile(File.ReadAllText(of.FileName));

                foreach (var v in designer1.Document.Elements.OfType <Dalssoft.DiagramNet.BaseElement>().ToArray())
                {
                    designer1.Document.DeleteElement(v);
                }

                linkedIOS.Clear();
                elements.Clear();

                Dictionary <string, Dalssoft.DiagramNet.BaseElement> groups = new Dictionary <string, Dalssoft.DiagramNet.BaseElement>();

                foreach (var item in data.Elements)
                {
                    var elem = importer.ElementsByType[item.InternalClassName];
                    var rect = GenericElement.GetGenericElement(elem);
                    elem      = rect.Tag as RaspiImporter.BaseElement;
                    elem.Name = item.Name;
                    groups.Add(elem.Name, rect);
                    elements.Add(rect.Tag as RaspiImporter.BaseElement);
                    designer1.Document.AddElement(rect);

                    var props = item.GetType().GetProperties();

                    foreach (var prop in props)
                    {
                        prop.SetValue(elem, prop.GetValue(item));
                    }
                }

                foreach (var pos in data.Positions)
                {
                    groups[pos.ElementName].Location = new Point(pos.X, pos.Y);
                }

                foreach (var link in data.Links)
                {
                    var inputElement  = groups[link.InputDevice] as RectangleGroup;
                    var outputElement = groups[link.OutputDevice] as RectangleGroup;

                    var input  = (inputElement.Tag as RaspiImporter.BaseElement).Inputs.Where(i => i.InputName == link.InputName).FirstOrDefault();
                    var output = (outputElement.Tag as RaspiImporter.BaseElement).Outputs.Where(o => o.OutputName == link.OutputName).FirstOrDefault();

                    var inputLinkNode  = (inputElement.Children[input.InputName] as NodeElement).Connectors[link.InputLinkOnLeft ?  1 : 0];
                    var outputLinkNode = (outputElement.Children[output.OutputName] as NodeElement).Connectors[link.OutputLinkOnLeft ? 1 : 0];

                    var lnk = designer1.Document.AddLink(inputLinkNode, outputLinkNode);

                    Guid g = Guid.NewGuid();

                    var lnkI = new BaseElementLink {
                        Input = input, Output = output
                    };

                    linkedIOS.Add(g.ToString(), lnkI);

                    lnk.Tag = lnkI;
                }
            }
        }
Example #2
0
        void designer1_ElementsWillConnect(object sender, Designer.ElementsLinkedArgs e)
        {
            NodeElement node1 = e.Element1 as NodeElement;
            NodeElement node2 = e.Element2 as NodeElement;

            ConnectorElement connector1 = e.Connector1;
            ConnectorElement connector2 = e.Connector2;


            ElementInputType  input  = null;
            ElementOutputType output = null;

            bool inputOnRight  = false;
            bool outputOnRight = false;

            BaseLinkElement outputLink = null;

            if (e.Element1.Tag is ElementInputType)
            {
                inputOnRight = node1.Connectors[1] == connector1;
                input        = (ElementInputType)e.Element1.Tag;
            }

            if (e.Element2.Tag is ElementInputType)
            {
                inputOnRight = node2.Connectors[1] == connector2;
                input        = (ElementInputType)e.Element2.Tag;
            }

            if (e.Element1.Tag is ElementOutputType)
            {
                outputOnRight = node1.Connectors[1] == connector1;
                output        = (ElementOutputType)e.Element1.Tag;
            }

            if (e.Element2.Tag is ElementOutputType)
            {
                outputOnRight = node2.Connectors[1] == connector2;
                output        = (ElementOutputType)e.Element2.Tag;
            }

            if (input == null)
            {
                e.Cancel = true;
                MessageBox.Show("Cannot connect two outputs");
                return;
            }

            if (output == null)
            {
                e.Cancel = true;
                MessageBox.Show("Cannot connect two inputs");
                return;
            }

            if (input.InputType != output.OutputType)
            {
                e.Cancel = true;
                MessageBox.Show("Cannot connect an input of type " + input.InputType + " to an output of type " + output.OutputType);
                return;
            }

            Guid g = Guid.NewGuid();

            var lnk = new BaseElementLink {
                Input = input, InputOnLeft = !inputOnRight, Output = output, OutputOnLeft = !outputOnRight
            };

            linkedIOS.Add(g.ToString(), lnk);

            e.NewLink.Tag = lnk;
        }