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(); }
/// <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); } }
private void panel1_Paint(object sender, PaintEventArgs e) { if (CurrentDiagram == null) { return; } CurrentDiagram.Draw(e.Graphics); }
private void timer1_Tick(object sender, EventArgs e) { if (CurrentDiagram != null) { CurrentDiagram.ForceStep(); panel1.Invalidate(); } }
private void toolStripButton5_Click(object sender, EventArgs e) { if (CurrentDiagram == null) { return; } var d = CurrentDiagram.Clone(); AddAndSelectDiagram(d); }
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(); } }
private void btnAddRelated_Click(object sender, EventArgs e) { if (DragObjects == null || DragObjects.Count == 0) { return; } CurrentDiagram.AddRelated(DragObjects[0] as TableVisual); panel1.Invalidate(); }
/// <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); } } } } }
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)); }
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); }
private void btnHideTable_Click(object sender, EventArgs e) { if (DragObjects == null) { return; } foreach (var obj in DragObjects) { CurrentDiagram.Hide(obj); } DragObjects = null; panel1.Invalidate(); }
/// <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); } } }
private void newDiagramToolStripMenuItem_Click(object sender, EventArgs e) { CurrentDiagram.ResetDiagram(); UpdateScreen(true); MessageBoxText = "Diagram reset and all objects destroyed."; }
// 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); } }
/// <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); }