コード例 #1
0
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            if (CurrentDiagram == null)
            {
                return;
            }

            ProbeDrag = true;
            DragStart = e.Location;

            var multiSelect = ModifierKeys.HasFlag(Keys.Control) || ModifierKeys.HasFlag(Keys.Shift);
            var hit         = CurrentDiagram.HitTest(e.Location);

            if (hit == null && !multiSelect)
            {
                CurrentDiagram.ClearSelected();
                DragObjects = null;
                dX          = e.X;
                dY          = e.Y;
                orgOffsetX  = CurrentDiagram.OffsetX;
                orgOffsetY  = CurrentDiagram.OffsetY;
            }
            else if (hit != null)
            {
                hit.Select(multiSelect);
                var p = CurrentDiagram.OZ(hit.X, hit.Y);
                dX          = e.X - p.X;
                dY          = e.Y - p.Y;
                DragObjects = CurrentDiagram.ZOrder.Where(obj => obj.Selected).ToList();
            }

            panel1.Invalidate();

            ValidateButtons();
        }
コード例 #2
0
        /// <summary>
        /// Updates the diagram view on the screen.
        /// <param name="clear">Clear the screen before redrawing?</param>
        /// </summary>
        public void UpdateScreen(bool clear)
        {
            try
            {
                SKSurface surf = CurrentDiagram.UpdateView(clear);
                using (SKImage screen = surf.Snapshot())
                    using (SKData data = screen.Encode(SKEncodedImageFormat.Png, 100))
                        using (Stream stream = data.AsStream())
                        {
                            // The above using statement chain converts the SKSurface into a stream,
                            // which can be used to make a Windows Forms-compatible Bitmap.
                            Bitmap img = new Bitmap(stream, false);
                            if (DiagramView.Image != null)
                            {
                                DiagramView.Image.Dispose();
                            }
                            DiagramView.Image = img;
                        }

                if (clear && !MessageBoxText.Contains(" Diagram view cleared and redrawn."))
                {
                    MessageBoxText += " Diagram view cleared and redrawn.";
                }
            }
            catch (Exception e)
            {
                Log.LogMessageError("Uncaught exception.");
                ErrorLogger.ShowErrorMessageBox(e);
            }
        }
コード例 #3
0
 private void panel1_Paint(object sender, PaintEventArgs e)
 {
     if (CurrentDiagram == null)
     {
         return;
     }
     CurrentDiagram.Draw(e.Graphics);
 }
コード例 #4
0
 private void timer1_Tick(object sender, EventArgs e)
 {
     if (CurrentDiagram != null)
     {
         CurrentDiagram.ForceStep();
         panel1.Invalidate();
     }
 }
コード例 #5
0
        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            if (CurrentDiagram == null)
            {
                return;
            }
            var d = CurrentDiagram.Clone();

            AddAndSelectDiagram(d);
        }
コード例 #6
0
        private void btnAdd_Click(object sender, EventArgs e)
        {
            var addTableDlg = new AddTablesDialog();

            if (addTableDlg.Show(CurrentDiagram) == DialogResult.OK)
            {
                CurrentDiagram.EnsureVisible(addTableDlg.SelectedTables, true);
                panel1.Invalidate();
            }
        }
コード例 #7
0
        private void btnAddRelated_Click(object sender, EventArgs e)
        {
            if (DragObjects == null || DragObjects.Count == 0)
            {
                return;
            }
            CurrentDiagram.AddRelated(DragObjects[0] as TableVisual);

            panel1.Invalidate();
        }
コード例 #8
0
        /// <summary>
        /// Включает/выключает показ коннекторов указанного типа на диаграмме
        /// </summary>
        /// <param name="linkType"></param>
        /// <param name="visibility"></param>
        public void SetConnectorVisibility(LinkType linkType, bool visibility = true)
        {
            // проходимся по элементам диаграммы
            foreach (EA.DiagramObject diagramObject in CurrentDiagram.DiagramObjects)
            {
                // Получаем элемент
                EA.Element diagramElement = EARepository.GetElementByID(diagramObject.ElementID);

                // Получаем коннекторы элемента
                foreach (EA.Connector connector in diagramElement.Connectors)
                {
                    // Получаем тип коннектора
                    try
                    {
                        LinkType curLinkType = LTHelper.GetConnectorType(connector);
                        if (linkType != curLinkType)
                        {
                            continue;
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.OutA("Не удалось определить тип коннектора " + ex.StackTrace, new EA.Connector[] { connector });
                        continue;
                    }

                    // проверяем, что коннектор может быть потенциально показан на диаграмме, т.е, что оба его элемента на диаграмме
                    EA.Element       secondElement   = EARepository.GetElementByID((connector.ClientID == diagramElement.ElementID) ? connector.SupplierID : connector.ClientID);
                    EA.DiagramObject secondElementDA = CurrentDiagram.GetDiagramObjectByID(secondElement.ElementID, "");
                    if (secondElementDA == null)
                    {
                        continue;
                    }

                    // Теперь смотрим на настройки видимости коннектора
                    if (LibraryHelper.IsLibrary(connector))
                    {
                        LinkType connectorlinkType = LTHelper.GetConnectorType(connector);
                        if (linkType == connectorlinkType)
                        {
                            EA.DiagramLink connectorLink = DiagramLinkHelper.GetDLForConnector(connector);
                            if (connectorLink == null)
                            {
                                connectorLink = DiagramLinkHelper.CreateDiagramLink(connector);
                                connectorLink.Update();
                            }

                            DiagramLinkHelper.SetDiagramLinkVisibility(connectorLink, visibility);
                        }
                    }
                }
            }
        }
コード例 #9
0
ファイル: Form1.cs プロジェクト: pErsten/KPcharp
 private void buttonAdministrativeAll_Click(object sender, EventArgs e)
 {
     panelAdministrativeTariffSetup.Visible = true;
     panelAdministrativeGeneral.Visible     = false;
     comboBoxDatePicker.SelectedIndex       = comboBoxDatePicker.FindStringExact($"{StartMonthDate:MM/yyyy}");
     comboBoxStartPicker.Enabled            = false;
     comboBoxValuePicker.SelectedIndex      = comboBoxValuePicker.FindStringExact("Замовлені тарифи");
     currentDiagram = CurrentDiagram.AllTrans;
     myChart.Series.Clear();
     myChart.Series.Add(seriesOfDoughnut);
     chartArea.BackColor = Color.LightSeaGreen;
     AllTransportGraphFill();
     ButtonColorChange(Color.DimGray, Color.DimGray, Color.DimGray, Color.FromArgb(255, 128, 0));
 }
コード例 #10
0
ファイル: Form1.cs プロジェクト: pErsten/KPcharp
 private void buttonAdministrativeOneTrans_Click(object sender, EventArgs e)
 {
     panelAdministrativeTariffSetup.Visible = true;
     panelAdministrativeGeneral.Visible     = false;
     currentDiagram = CurrentDiagram.OneTrans;
     myChart.Series.Clear();
     myChart.Series.Add(seriesOfColumns);
     comboBoxDatePicker.SelectedIndex  = comboBoxDatePicker.FindStringExact($"{StartMonthDate:MM/yyyy}");
     comboBoxValuePicker.SelectedIndex = comboBoxValuePicker.FindStringExact("Замовлені тарифи");
     comboBoxStartPicker.Enabled       = false;
     chartArea.BackColor = Color.PowderBlue;
     OneTransportGraphFill();
     ButtonColorChange(Color.DimGray, Color.DimGray, Color.Red, Color.DimGray);
 }
コード例 #11
0
        private void btnHideTable_Click(object sender, EventArgs e)
        {
            if (DragObjects == null)
            {
                return;
            }
            foreach (var obj in DragObjects)
            {
                CurrentDiagram.Hide(obj);
            }
            DragObjects = null;

            panel1.Invalidate();
        }
コード例 #12
0
        /// <summary>
        /// Устанавливает видимость для нетипизированных коннекторов на диаграмме
        /// </summary>
        public void SetConnectorVisibility_Untyped(bool visibility = true)
        {
            // проходимся по элементам диаграммы
            foreach (EA.DiagramObject diagramObject in CurrentDiagram.DiagramObjects)
            {
                // Получаем элемент
                EA.Element diagramElement = EARepository.GetElementByID(diagramObject.ElementID);

                // Получаем коннекторы элемента
                foreach (EA.Connector connector in diagramElement.Connectors)
                {
                    // Проверяем тип коннектора
                    if (LibraryHelper.IsLibrary(connector))
                    {
                        continue;
                    }

                    // проверяем, что коннектор может быть потенциально показан на диаграмме, т.е, что оба его элемента на диаграмме
                    EA.Element       secondElement   = EARepository.GetElementByID((connector.ClientID == diagramElement.ElementID) ? connector.SupplierID : connector.ClientID);
                    EA.DiagramObject secondElementDA = CurrentDiagram.GetDiagramObjectByID(secondElement.ElementID, "");
                    if (secondElementDA == null)
                    {
                        continue;
                    }

                    // Получаем линк коннектора на диаграмме
                    EA.DiagramLink connectorLink = DiagramLinkHelper.GetDLForConnector(connector);
                    if (connectorLink == null)
                    {
                        continue;
                    }

                    // Устанавливаем видимость
                    DiagramLinkHelper.SetDiagramLinkVisibility(connectorLink, visibility);
                }
            }
        }
コード例 #13
0
 private void newDiagramToolStripMenuItem_Click(object sender, EventArgs e)
 {
     CurrentDiagram.ResetDiagram();
     UpdateScreen(true);
     MessageBoxText = "Diagram reset and all objects destroyed.";
 }
コード例 #14
0
        // When clicking on the diagram.
        private void DiagramView_Click(object sender, EventArgs e)
        {
            MouseEventArgs args          = (MouseEventArgs)e;
            Point          clickLocation = args.Location;

            // Grid snap for atoms and texts.
            if (GridSettingForm.Settings.GridWidth > 0 && GridSettingForm.Settings.GridHeight > 0 &&
                (new DiagramAction[] {
                DiagramAction.PlaceAtom, DiagramAction.PlaceText, DiagramAction.PlaceAtomCarbon, DiagramAction.PlaceAtomHydrogen, DiagramAction.PlaceAtomNitrogen, DiagramAction.PlaceAtomOxygen
            }.Contains(SelectedTool)))
            {
                // Get grid settings from settings object.
                int w = GridSettingForm.Settings.GridWidth, h = GridSettingForm.Settings.GridHeight;
                int xo = GridSettingForm.Settings.GridXOffset, yo = GridSettingForm.Settings.GridYOffset;
                int ux = clickLocation.X - xo, uy = clickLocation.Y - yo;

                // Find closest grid intersections.
                int[][] pairs =
                {
                    new int[] { ux - (ux % w),       uy - (uy % h)       },
                    new int[] { ux + (w - (ux % w)), uy - (uy % h)       },
                    new int[] { ux - (ux % w),       uy + (h - (uy % h)) },
                    new int[] { ux + (w - (ux % w)), uy + (h - (uy % h)) }
                };

                // Get distances to intersections.
                double[] distances = new double[pairs.Length];
                for (int i = 0; i < pairs.Length; i++)
                {
                    int dx, dy;
                    dx = pairs[i][0] - ux;
                    dy = pairs[i][1] - uy;

                    distances[i] = Math.Sqrt(dx * dx + dy * dy);  // via Pythagoras' Theorem.
                }

                // Get minimum distance and index of minimum distance.
                int    mindex;
                double minstance;
                mindex    = 0;
                minstance = distances[0];
                for (int i = 1; i < distances.Length; i++)
                {
                    if (distances[i] < minstance)
                    {
                        minstance = distances[i];
                        mindex    = i;
                    }
                }

                // Move selection to placement.
                clickLocation.X = pairs[mindex][0] + xo;
                clickLocation.Y = pairs[mindex][1] + yo;
            }

            // Finding nearby objects for object anchoring.
            List <DiagramObject> objects = new List <DiagramObject>();
            List <DiagramObject> atoms   = new List <DiagramObject>();
            List <DiagramObject> texts   = new List <DiagramObject>();

            foreach (DiagramObject obj in CurrentDiagram.Objects)
            {
                if (obj.IsMouseIntersect(clickLocation))
                {
                    objects.Add(obj);
                }
            }
            foreach (DiagramObject obj in objects)
            {
                if (obj.ObjectID == DiagramObject.ObjectTypeID.Atom)
                {
                    atoms.Add(obj);
                }
            }
            foreach (DiagramObject obj in objects)
            {
                if (obj.ObjectID == DiagramObject.ObjectTypeID.Text)
                {
                    texts.Add(obj);
                }
            }
            int anchor = -1;  // For object anchoring.

            try
            {
                // CurrentDiagram.AddDiagramObject(new Atom("C", clickLocation.X, clickLocation.Y));
                switch (SelectedTool)
                {
                case DiagramAction.Select:
                    foreach (DiagramObject obj in objects)
                    {
                        if (args.Button == MouseButtons.Right)
                        {
                            CurrentDiagram.RemoveDiagramObject(obj.DiagramID);
                            MessageBoxText = $"Object of ID {obj.DiagramID} deleted.";
                            break;
                        }
                        else
                        {
                            if (SelectedObject != obj)
                            {
                                SelectedObject = obj;

                                EditingForm eForm = new EditingForm(obj);
                                eForm.Show();

                                break;
                            }
                        }
                    }
                    break;

                case DiagramAction.PlaceAtom:
                    var par = CurrentObject.GetInternalParameters();

                    par["X"] = (float)clickLocation.X;
                    par["Y"] = (float)clickLocation.Y;

                    Atom a = new Atom();
                    a.EditInternalParameters(par);

                    CurrentDiagram.AddDiagramObject(a);
                    break;

                case DiagramAction.PlaceAtomCarbon:
                    CurrentDiagram.AddDiagramObject(new Atom("C", clickLocation.X, clickLocation.Y));
                    break;

                case DiagramAction.PlaceAtomNitrogen:
                    CurrentDiagram.AddDiagramObject(new Atom("N", clickLocation.X, clickLocation.Y, new SKColor(0, 128, 0)));
                    break;

                case DiagramAction.PlaceAtomOxygen:
                    CurrentDiagram.AddDiagramObject(new Atom("O", clickLocation.X, clickLocation.Y, new SKColor(255, 0, 0)));
                    break;

                case DiagramAction.PlaceAtomHydrogen:
                    CurrentDiagram.AddDiagramObject(new Atom("H", clickLocation.X, clickLocation.Y, new SKColor(128, 128, 128)));
                    break;

                case DiagramAction.PlaceSingleBond:
                    if (atoms.Count > 0)
                    {
                        anchor = atoms[0].DiagramID;
                    }
                    CurrentObject     = new Bond(clickLocation.X, clickLocation.Y, 0, 0, 1.5f, null, Bond.BondType.Single, Bond.BondStyle.Plain, anchor);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceBondEnd;
                    break;

                case DiagramAction.PlaceDoubleBond:
                    if (atoms.Count > 0)
                    {
                        anchor = atoms[0].DiagramID;
                    }
                    CurrentObject     = new Bond(clickLocation.X, clickLocation.Y, 0, 0, 1.5f, null, Bond.BondType.Double, Bond.BondStyle.Plain, anchor);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceBondEnd;
                    break;

                case DiagramAction.PlaceTripleBond:
                    if (atoms.Count > 0)
                    {
                        anchor = atoms[0].DiagramID;
                    }
                    CurrentObject     = new Bond(clickLocation.X, clickLocation.Y, 0, 0, 1.5f, null, Bond.BondType.Triple, Bond.BondStyle.Plain, anchor);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceBondEnd;
                    break;

                case DiagramAction.PlaceAromaticBond:
                    if (atoms.Count > 0)
                    {
                        anchor = atoms[0].DiagramID;
                    }
                    CurrentObject     = new Bond(clickLocation.X, clickLocation.Y, 0, 0, 1.5f, null, Bond.BondType.Aromatic, Bond.BondStyle.Plain, anchor);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceBondEnd;
                    break;

                case DiagramAction.PlaceBondEnd:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Bond)
                    {
                        int ach = ((Bond)CurrentObject).AnchorID1;
                        if (atoms.Count > 0)
                        {
                            foreach (var atom in atoms)
                            {
                                if (atom.DiagramID != ach)
                                {
                                    anchor = atom.DiagramID;
                                    break;
                                }
                                else
                                {
                                    anchor = -1;
                                }
                            }
                        }

                        var parameters = CurrentObject.GetInternalParameters();
                        parameters["X2"]        = (float)clickLocation.X;
                        parameters["Y2"]        = (float)clickLocation.Y;
                        parameters["AnchorID2"] = anchor;
                        CurrentObject.EditInternalParameters(parameters);

                        CurrentDiagram.AddDiagramObject(CurrentObject);
                        ToolGroup.Enabled = true;

                        switch (((Bond)CurrentObject).TypeOfBond)
                        {
                        case Bond.BondType.Single:
                            SelectedTool = DiagramAction.PlaceSingleBond;
                            break;

                        case Bond.BondType.Double:
                            SelectedTool = DiagramAction.PlaceDoubleBond;
                            break;

                        case Bond.BondType.Triple:
                            SelectedTool = DiagramAction.PlaceTripleBond;
                            break;

                        case Bond.BondType.Aromatic:
                            SelectedTool = DiagramAction.PlaceAromaticBond;
                            break;
                        }
                        // CurrentObject = null;
                    }
                    break;

                case DiagramAction.PlaceLineStart:
                    CurrentObject     = new Line(clickLocation.X, clickLocation.Y, 0, 0, null, 1.5f, null, Line.LineType.Line);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceLineEnd;
                    break;

                case DiagramAction.PlaceLineEnd:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                    {
                        var parameters = CurrentObject.GetInternalParameters();
                        parameters["X2"] = (float)clickLocation.X;
                        parameters["Y2"] = (float)clickLocation.Y;
                        CurrentObject.EditInternalParameters(parameters);

                        CurrentDiagram.AddDiagramObject(CurrentObject);
                        ToolGroup.Enabled = true;

                        SelectedTool = DiagramAction.PlaceLineStart;
                        // CurrentObject = null;
                    }
                    break;

                case DiagramAction.PlaceCurveStart:
                    CurrentObject     = new Line(clickLocation.X, clickLocation.Y, 0, 0, null, 1.5f, null, Line.LineType.Curve, Line.LineStyle.Plain);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceCurveControlPoint;
                    break;

                case DiagramAction.PlaceCurveControlPoint:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                    {
                        var            parameters = CurrentObject.GetInternalParameters();
                        List <float[]> cpts       = (List <float[]>)parameters["ControlPoints"];

                        cpts.Add(new float[] { clickLocation.X, clickLocation.Y });

                        CurrentObject.EditInternalParameters(parameters);

                        if (cpts.Count == 2)
                        {
                            SelectedTool = DiagramAction.PlaceCurveEnd;
                        }
                    }
                    break;

                case DiagramAction.PlaceCurveEnd:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                    {
                        var parameters = CurrentObject.GetInternalParameters();
                        parameters["X2"] = (float)clickLocation.X;
                        parameters["Y2"] = (float)clickLocation.Y;
                        CurrentObject.EditInternalParameters(parameters);

                        CurrentDiagram.AddDiagramObject(CurrentObject);
                        ToolGroup.Enabled = true;

                        SelectedTool = DiagramAction.PlaceCurveStart;
                        // CurrentObject = null;
                    }
                    break;

                case DiagramAction.PlaceStraightArrowStart:
                    CurrentObject     = new Line(clickLocation.X, clickLocation.Y, 0, 0, null, 1.5f, null, Line.LineType.Line, Line.LineStyle.Plain, Line.EndType.Plain, Line.EndType.Arrow);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceStraightArrowEnd;
                    break;

                case DiagramAction.PlaceStraightArrowEnd:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                    {
                        var parameters = CurrentObject.GetInternalParameters();
                        parameters["X2"] = (float)clickLocation.X;
                        parameters["Y2"] = (float)clickLocation.Y;
                        CurrentObject.EditInternalParameters(parameters);

                        CurrentDiagram.AddDiagramObject(CurrentObject);
                        ToolGroup.Enabled = true;

                        SelectedTool = DiagramAction.PlaceStraightArrowStart;
                        // CurrentObject = null;
                    }
                    break;

                case DiagramAction.PlaceCurvedArrowStart:
                    CurrentObject     = new Line(clickLocation.X, clickLocation.Y, 0, 0, null, 1.5f, null, Line.LineType.Curve, Line.LineStyle.Plain, Line.EndType.Plain, Line.EndType.Arrow);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceCurvedArrowControlPoint;
                    break;

                case DiagramAction.PlaceCurvedArrowControlPoint:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                    {
                        var            parameters = CurrentObject.GetInternalParameters();
                        List <float[]> cpts       = (List <float[]>)parameters["ControlPoints"];

                        cpts.Add(new float[] { clickLocation.X, clickLocation.Y });

                        CurrentObject.EditInternalParameters(parameters);

                        if (cpts.Count == 2)
                        {
                            SelectedTool = DiagramAction.PlaceCurvedArrowEnd;
                        }
                    }
                    break;

                case DiagramAction.PlaceCurvedArrowEnd:
                    if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                    {
                        var parameters = CurrentObject.GetInternalParameters();
                        parameters["X2"] = (float)clickLocation.X;
                        parameters["Y2"] = (float)clickLocation.Y;
                        CurrentObject.EditInternalParameters(parameters);

                        CurrentDiagram.AddDiagramObject(CurrentObject);
                        ToolGroup.Enabled = true;

                        SelectedTool = DiagramAction.PlaceCurvedArrowStart;
                        // CurrentObject = null;
                    }
                    break;

                case DiagramAction.ChargeIncrease:
                    foreach (DiagramObject obj in objects)
                    {
                        if (obj.ObjectID == DiagramObject.ObjectTypeID.Atom)
                        {
                            var p = ((Atom)obj).GetInternalParameters();
                            p["Charge"] = (int)p["Charge"] + 1;
                            obj.EditInternalParameters(p);
                            break;
                        }
                    }
                    break;

                case DiagramAction.ChargeDecrease:
                    foreach (DiagramObject obj in objects)
                    {
                        if (obj.ObjectID == DiagramObject.ObjectTypeID.Atom)
                        {
                            var p = ((Atom)obj).GetInternalParameters();
                            p["Charge"] = (int)p["Charge"] - 1;
                            obj.EditInternalParameters(p);
                            break;
                        }
                    }
                    break;

                case DiagramAction.PlaceSharpLineStart:
                    CurrentObject     = new Line(clickLocation.X, clickLocation.Y, 0, 0, null, 1.5f, null, Line.LineType.Sharp, Line.LineStyle.Plain);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceSharpLineControlPoint;
                    break;

                case DiagramAction.PlaceSharpLineControlPoint:
                    if (args.Button == MouseButtons.Right)
                    {
                        if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                        {
                            var parameters = CurrentObject.GetInternalParameters();
                            parameters["X2"] = (float)clickLocation.X;
                            parameters["Y2"] = (float)clickLocation.Y;
                            CurrentObject.EditInternalParameters(parameters);

                            CurrentDiagram.AddDiagramObject(CurrentObject);
                            ToolGroup.Enabled = true;
                        }

                        SelectedTool = DiagramAction.PlaceSharpLineStart;
                    }
                    else
                    {
                        if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                        {
                            var            parameters = CurrentObject.GetInternalParameters();
                            List <float[]> cpts       = (List <float[]>)parameters["ControlPoints"];

                            cpts.Add(new float[] { clickLocation.X, clickLocation.Y });

                            CurrentObject.EditInternalParameters(parameters);
                        }
                    }
                    break;

                case DiagramAction.PlaceSharpArrowStart:
                    CurrentObject     = new Line(clickLocation.X, clickLocation.Y, 0, 0, null, 1.5f, null, Line.LineType.Sharp, Line.LineStyle.Plain, Line.EndType.Plain, Line.EndType.Arrow);
                    ToolGroup.Enabled = false;
                    SelectedTool      = DiagramAction.PlaceSharpArrowControlPoint;
                    break;

                case DiagramAction.PlaceSharpArrowControlPoint:
                    if (args.Button == MouseButtons.Right)
                    {
                        if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                        {
                            var parameters = CurrentObject.GetInternalParameters();
                            parameters["X2"] = (float)clickLocation.X;
                            parameters["Y2"] = (float)clickLocation.Y;
                            CurrentObject.EditInternalParameters(parameters);

                            CurrentDiagram.AddDiagramObject(CurrentObject);
                            ToolGroup.Enabled = true;
                        }

                        SelectedTool = DiagramAction.PlaceSharpArrowStart;
                    }
                    else
                    {
                        if (CurrentObject.ObjectID == DiagramObject.ObjectTypeID.Line)
                        {
                            var            parameters = CurrentObject.GetInternalParameters();
                            List <float[]> cpts       = (List <float[]>)parameters["ControlPoints"];

                            cpts.Add(new float[] { clickLocation.X, clickLocation.Y });

                            CurrentObject.EditInternalParameters(parameters);
                        }
                    }
                    break;

                case DiagramAction.PlaceText:
                    CurrentDiagram.AddDiagramObject(new Text("Edit object to edit text.", clickLocation.X, clickLocation.Y));
                    break;

                default:
                    break;
                }

                UpdateScreen(true);
            } catch (Exception err)
            {
                ErrorLogger.ShowErrorMessageBox(err);
            }
        }
コード例 #15
0
        /// <summary>
        /// Функция добавляет или замещает элемент на диаграмме, если указано - внутри указанного элемента
        /// </summary>
        /// <param name="element"></param>
        /// <param name="parentElement"></param>
        public EA.DiagramObject PutElementOnDiagram(EA.Element element)
        {
            ElementDesignerHelper.CallLevel++;
            EA.DiagramObject elementDA;

            try
            {
                Logger.Out(element.Name);
                Logger.Out("размещаем элемент ", new EA.Element[] { element });

                var diagramObjects = CurrentDiagram.DiagramObjects;

                elementDA = CurrentDiagram.GetDiagramObjectByID(element.ElementID, ""); // Получаем элемент на диаграмме
                if (elementDA == null)                                                  // если элемента нет - создаём
                {
                    Logger.Out("элемента нет на диаграмме, создаём ");


                    elementDA           = CurrentDiagram.DiagramObjects.AddNew("", "");
                    elementDA.ElementID = element.ElementID;

                    // устанавливаем размер объекта
                    Size elementSize = ElementDesignerHelper.GetDefaultDASize(elementDA);
                    EADOHelper.ApplySizeToDA(elementDA, elementSize, false);
                    int elementID = elementDA.ElementID;

                    Point newDAPoint = ElementDesignerHelper.GetFirstFreePoinForDA(elementDA);
                    EADOHelper.ApplyPointToDA(elementDA, newDAPoint, false);

                    elementDA.Update();
                    CurrentDiagram.Update();
                    CurrentDiagram.DiagramObjects.Refresh();

                    Logger.Out(element.Name + ":создан элемент ", new EA.DiagramObject[] { elementDA });
                }
                else
                {
                    Logger.Out("элемент уже на диаграмме", new EA.DiagramObject[] { elementDA });
                }

                // Подгоняем ZOrder
                //SetElementZorder(elementDA);

                /*
                 * // Проверяем наличие на диаграмме (непосредственных) элементов дочерней иерархии
                 * // Еесли есть такие - вписываем их в текущий элемент
                 * List<EA.DiagramObject> childDAList = EAHelper.GetNearestChildrenDA(element);
                 * Logger.Out("получен список присутсвующих на диагр. дочерних ", childDAList.ToArray());
                 * foreach (var childDA in childDAList)
                 * {
                 *  FitElementInElement(childDA, elementDA);
                 * }
                 *
                 *
                 * // Проверяем наличие на диаграмме элемента родительской иерархии
                 * // При наличии вписываем элемент в него
                 * List<EA.DiagramObject> parentDAList = EAHelper.GetDeployParentHierarchyDA(element);
                 * Logger.Out("получен список родительской иерархии на диаграмме", parentDAList.ToArray());
                 * if (parentDAList.Count > 0)
                 * {
                 *  var nearestParentDA = parentDAList[0];
                 *  FitElementInElement(elementDA, nearestParentDA);
                 * }
                 */
            }
            finally
            {
                ElementDesignerHelper.CallLevel--;
            }

            return(elementDA);
        }