/// <summary> /// 更新插槽容器所在的区域 /// </summary> /// <param name="slotContainer">当前插槽容器</param> private void ChangeRegion(SlotContainer slotContainer) { bool added = false; // 是否已经添加到区域中 foreach (RegionData regionData in regionDataList) { if (regionData.Contains(slotContainer) && !regionData.IsInRegion(slotContainer.InvalidRectangle)) { regionData.Remove(slotContainer); } if (!regionData.Contains(slotContainer) && regionData.IsInRegion(slotContainer.InvalidRectangle)) { regionData.Add(slotContainer); added = true; } } if (!added) { backupRegionData.Add(slotContainer); } // 更新相关连接线所在的区域 foreach (ConnectorContainer line in slotContainer.GetConnectedLine()) { ChangeRegion(line); } }
/// <summary> /// 删除图元 /// </summary> /// <param name="graphElement">要删除的图元</param> /// <return>是否删除成功</return> protected bool DeleteGraphElement(GraphElement graphElement) { Helper helper = Helper.GetHelper(); GraphManager graphManager = data as GraphManager; FlowChartManager flowChartManager = graphManager.CurrentFlowChartManager; DataManager dataManager = flowChartManager.CurrentDataManager; bool deleteSuccess = false; // 是否删除成功 // 执行逻辑操作 LogicBaseManager logicManager = helper.GetLogicManager(flowChartManager.CurrentChartMode); logicManager.DoLogicOperation(flowChartManager, LogicType.BeforeDelete, graphElement); if (graphElement is SlotContainer) // 要删除的图元是插槽容器 { SlotContainer slotContainer = graphElement as SlotContainer; List <GraphElement> graphElementList = new List <GraphElement>(); // 解除绑定连接线控制点 foreach (ConnectorContainer line in slotContainer.GetConnectedLine()) { graphElementList.Add(line); } slotContainer.UnBind(); // 执行逻辑操作 logicManager.DoLogicOperation(flowChartManager, LogicType.AfterDelete, graphElementList); graphManager.SlotContainerList.Remove(slotContainer); // 从插槽容器索引链表中删除 deleteSuccess = true; } else if (graphElement is ConnectorContainer) // 要删除的图元是连接线控制点容器 { ConnectorContainer connectorContainer = graphElement as ConnectorContainer; List <GraphElement> graphElementList = new List <GraphElement>(); SlotContainer inSlotContainer = connectorContainer.InSlotContainer; if (inSlotContainer != null) { connectorContainer.UnbindInSlotContainer(); } SlotContainer outSlotContainer = connectorContainer.OutSlotContainer; if (outSlotContainer != null) { graphElementList.Add(outSlotContainer); connectorContainer.UnbindOutSlotContainer(); } // 执行逻辑操作 logicManager.DoLogicOperation(flowChartManager, LogicType.AfterDelete, graphElementList); graphManager.ConnectorContainerList.Remove(connectorContainer); // 从连接线控制点索引容器中删除 deleteSuccess = true; } else if (graphElement is ConnectorGraphElement) // 要删除的图元是连接线控制点 { ConnectorGraphElement connector = graphElement as ConnectorGraphElement; ConnectorContainer connectorContainer = connector.Line; List <GraphElement> graphElementList = new List <GraphElement>(); SlotContainer inSlotContainer = connectorContainer.InSlotContainer; if (inSlotContainer != null) { connectorContainer.UnbindInSlotContainer(); } SlotContainer outSlotContainer = connectorContainer.OutSlotContainer; if (outSlotContainer != null) { graphElementList.Add(outSlotContainer); connectorContainer.UnbindOutSlotContainer(); } // 执行逻辑操作 logicManager.DoLogicOperation(flowChartManager, LogicType.AfterDelete, graphElementList); graphManager.ConnectorContainerList.Remove(connectorContainer); // 从连接线控制点索引容器中删除 deleteSuccess = true; } else if (graphElement is SlotGraphElement) // 要删除的图元是插槽 { SlotGraphElement slot = graphElement as SlotGraphElement; if (slot.CanDelete && (slot.IsInSlot || slot.SlotContainer.OutSlotCount > 1)) // 插槽可以删除 { SlotContainer slotContainer = slot.SlotContainer; slotContainer.RemoveSlot(slot); deleteSuccess = true; } else { MessageBox.Show("该插槽不能删除", "图元删除", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (graphElement is RemarkGraphElement) // 要删除的图元是注释结点 { RemarkGraphElement remarkGraphElement = graphElement as RemarkGraphElement; SlotContainer slotContainer = remarkGraphElement.Owner as SlotContainer; slotContainer.RemarkNode = null; remarkGraphElement.Owner = null; remarkGraphElement = null; deleteSuccess = true; } if (deleteSuccess) // 释放图元所占的资源 { dataManager.DeleteData(graphElement); graphElement.Release(); } return(deleteSuccess); }