/// <summary> /// Ищет на текущей диаграмме коннекторы для элементов, которые принадлежат к перечисленному ПО /// </summary> /// <param name=""></param> /// <returns></returns> public static List <ConnectorData> GetDAForSoftwareOnDiagram(List <string> selectedSoftware) { List <ConnectorData> result = new List <ConnectorData>(); foreach (EA.DiagramObject diagramObject in CurrentDiagram.DiagramObjects) { EA.Element element = EARepository.GetElementByID(diagramObject.ElementID); string elementSoftware = LibraryHelper.GetElementSoftwareName(element); if (selectedSoftware.Contains(elementSoftware)) { foreach (EA.Connector connector in element.Connectors) { EA.DiagramLink diagramLink = DiagramLinkHelper.GetDLFromConnector(connector.ConnectorID); if (diagramLink != null) { ConnectorData connectorData = new ConnectorData(connector); result.Add(connectorData); } } } } return(result); }
/// <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); } } } } }
/// <summary> /// Устанавливает видимость указанного типа коннекторов на диаграммме /// </summary> public void SetLinkTypeVisibility(LinkType LinkType, bool visibility = true) { foreach (EA.DiagramLink diagramLink in Context.CurrentDiagram.DiagramLinks) { EA.Connector connector = Context.EARepository.GetConnectorByID(diagramLink.ConnectorID); LinkType connectorLinkType = LTHelper.GetConnectorType(connector); switch (LinkType) { case LinkType.Deploy: if (connectorLinkType == LinkType.Deploy) { DiagramLinkHelper.SetDiagramLinkVisibility(diagramLink, visibility); } break; } } }
/// <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); } } }
public static EA.Connector CreateConnector(ConnectorData createNewLinkData, bool putOnDiagram = true) { EA.Connector newConnector = null; EA.Element firstElement = EARepository.GetElementByID(createNewLinkData.SourceElementID); EA.Element secondElement = EARepository.GetElementByID(createNewLinkData.TargetElementID); // Определяем тип создаваемого коннектора string creatingConnectorType; switch (createNewLinkData.LinkType) { case LinkType.Communication: case LinkType.Deploy: creatingConnectorType = "Dependency"; break; case LinkType.InformationFlow: creatingConnectorType = "InformationFlow"; break; case LinkType.SoftwareClassification: creatingConnectorType = "Generalization"; break; default: throw new Exception("Непредусмотренный тип коннектора при создании"); } // Создаём newConnector = firstElement.Connectors.AddNew("", creatingConnectorType); if (createNewLinkData.LinkType == LinkType.InformationFlow || createNewLinkData.LinkType == LinkType.Deploy) { newConnector.Direction = "Source -> Destination"; } else { newConnector.Direction = "Unspecified"; } newConnector.ClientID = firstElement.ElementID; newConnector.SupplierID = secondElement.ElementID; newConnector.Name = createNewLinkData.Name; newConnector.Notes = createNewLinkData.Notes; newConnector.Update(); EATVHelper.TaggedValueSet(newConnector, DAConst.DP_LibraryTag, ""); EATVHelper.TaggedValueSet(newConnector, DAConst.DP_LinkTypeTag, Enum.GetName(typeof(LinkType), createNewLinkData.LinkType)); EATVHelper.TaggedValueSet(newConnector, DAConst.DP_FlowIDTag, createNewLinkData.FlowID); EATVHelper.TaggedValueSet(newConnector, DAConst.DP_SegmentIDTag, createNewLinkData.SegmentID); //EAHelper.TaggedValueSet(newConnector, DAConst.DP_TempLinkTag, createNewLinkData.tempLink.ToString()); //EAHelper.TaggedValueSet(newConnector, DAConst.DP_TempLinkDiagramIDTag, createNewLinkData.tempLink ? createNewLinkData.tempLinkDiagramID : ""); newConnector.Update(); newConnector.TaggedValues.Refresh(); // Добавляем коннектор к кэш информации о коннекторах createNewLinkData.ConnectorID = newConnector.ConnectorID; Context.ConnectorData.Add(createNewLinkData.ConnectorID, createNewLinkData); if (putOnDiagram) { // Помещаем на диаграмму EA.DiagramLink diagramLink = DiagramLinkHelper.CreateDiagramLink(newConnector); } return(newConnector); }