/// <summary> /// 复制图元 /// </summary> /// <returns>复制的图元</returns> public override SlotContainer Clone() { InnerChart innerChart = new InnerChart(location, elementSize); CopyData(this, innerChart); return(innerChart); }
/// <summary> /// 创建缩略的图元 /// </summary> /// <param name="graphType">图元类型</param> /// <param name="centerLocation">图元中心位置</param> /// <param name="elementSize">图元大小</param> /// <param name="moveSize">图元的移动大小</param> /// <returns>图元对象</returns> private GraphElement CreateAbbreviateGraphElement(GraphType graphType, Point centerLocation) { GraphElement abbreviateGraphElement = null; switch (graphType) { case GraphType.ConditionNode: // 条件结点 { abbreviateGraphElement = new ConditionGraphElement(centerLocation - graphSetting.ConditionNodeMoveOffset, graphSetting.ConditionNodeElementSize); moveOffset = graphSetting.ConditionNodeMoveOffset; break; } case GraphType.ActionNode: // 动作结点 { abbreviateGraphElement = new ActionGraphElement(centerLocation - graphSetting.ActionNodeMoveOffset, graphSetting.ActionNodeElementSize); moveOffset = graphSetting.ActionNodeMoveOffset; break; } case GraphType.EventNode: // 事件结点 { abbreviateGraphElement = new EventGraphElement(centerLocation - graphSetting.EventNodeMoveOffset, graphSetting.EventNodeElementSize); moveOffset = graphSetting.EventNodeMoveOffset; break; } case GraphType.AIStateNode: // AI状态结点 { abbreviateGraphElement = new AIStateGraphElement(centerLocation - graphSetting.AIStateNodeMoveOffset, graphSetting.AIStateNodeElementSize); moveOffset = graphSetting.AIStateNodeMoveOffset; break; } case GraphType.AIActionNode: // AI动作结点 { abbreviateGraphElement = new AIActionGraphElement(centerLocation - graphSetting.AIActionNodeMoveOffset, graphSetting.AIActionsNodeElementSize); moveOffset = graphSetting.AIActionNodeMoveOffset; break; } case GraphType.AIActionsNode: // AI动作组结点 { abbreviateGraphElement = new AIActionsGraphElement(centerLocation - graphSetting.AIActionsNodeMoveOffset, graphSetting.AIActionsNodeElementSize); moveOffset = graphSetting.AIActionsNodeMoveOffset; break; } case GraphType.InnerChart: // 子绘图结点 { abbreviateGraphElement = new InnerChart(centerLocation - graphSetting.InnerChartMoveOffset, graphSetting.InnerChartElementSize); moveOffset = graphSetting.InnerChartMoveOffset; break; } case GraphType.InterfaceNode: // 接口结点 { abbreviateGraphElement = new InterfaceGraphElement(centerLocation - graphSetting.InterfaceNodeMoveOffset, graphSetting.InterfaceNodeElementSize); moveOffset = graphSetting.InterfaceNodeMoveOffset; break; } } if (abbreviateGraphElement != null) { abbreviateGraphElement.Refresh(); } return abbreviateGraphElement; }
/// <summary> /// 刷新子绘图连接线的数据 /// </summary> /// <param name="innerChart">子绘图</param> protected virtual void RefreshInnerChartLine(InnerChart innerChart) { DocumentManager documentManager = DocumentManager.GetDocumentManager(); FlowChartManager flowChartManager = documentManager.CurrentFlowChartManager; GraphManager graphManager = flowChartManager.CurrentGraphManager; DataManager dataManager = flowChartManager.CurrentDataManager; }
/// <summary> /// 复制图元 /// </summary> /// <returns>复制的图元</returns> public override SlotContainer Clone() { InnerChart innerChart = new InnerChart(location, elementSize); CopyData(this, innerChart); return innerChart; }
/// <summary> /// 执行命令 /// </summary> /// <param name="o">当前对象</param> /// <returns>是否执行成功</returns> public override bool Execute(object o) { bool success = true; object[] args = o as object[]; int id = graphManager.AllocateGraphElementID(); Point p = (Point)args[0]; string typeString = args[1] as string; GraphSetting graphSetting = GraphSetting.GetGraphSetting(); // 保存命令执行前的数据 if (firstCommand) // 只有第一条命令保存执行前的数据 { SaveBeforeExecute(flowChartManager.GetArguments()); } switch (typeString) { case "ConditionNode": // 条件结点 { ConditionGraphElement conditionGraphElement = new ConditionGraphElement(p, graphSetting.ConditionNodeElementSize); InitSlotContainer(conditionGraphElement, id, "条件结点"); break; } case "ActionNode": // 动作结点 { ActionGraphElement actionGraphElement = new ActionGraphElement(p, graphSetting.ActionNodeElementSize); InitSlotContainer(actionGraphElement, id, "动作结点"); break; } case "EventNode": // 事件结点 { EventGraphElement eventGraphElement = new EventGraphElement(p, graphSetting.EventNodeElementSize); InitSlotContainer(eventGraphElement, id, "事件结点"); break; } case "AIStateNode": // ai状态结点 { AIStateGraphElement aiStateGraphElement = new AIStateGraphElement(p, graphSetting.AIStateNodeElementSize); InitSlotContainer(aiStateGraphElement, id, "AI状态结点"); break; } case "AIActionNode": // ai动作结点 { AIActionGraphElement aiActionGraphElement = new AIActionGraphElement(p, graphSetting.AIActionNodeElementSize); InitSlotContainer(aiActionGraphElement, id, "AI动作结点"); break; } case "AIActionsNode": // ai动作组结点 { AIActionsGraphElement aiActionsGraphElement = new AIActionsGraphElement(p, graphSetting.AIActionsNodeElementSize); InitSlotContainer(aiActionsGraphElement, id, "AI动作组结点"); break; } case "InnerChart": // 子绘图结点 { InnerChart innerChart = new InnerChart(p, graphSetting.InnerChartElementSize); InitSlotContainer(innerChart, id, "子绘图结点"); break; } case "InterfaceNode": // 接口结点 { InterfaceGraphElement interfaceGraphElement = new InterfaceGraphElement(p, graphSetting.InterfaceNodeElementSize); InitSlotContainer(interfaceGraphElement, id, "接口结点"); break; } } if (success) // 保存命令执行后的数据 { flowChartManager.ContentChanged = true; SaveAfterExecute(flowChartManager.GetArguments()); } return success; }
/// <summary> /// 刷新插槽信息 /// </summary> /// <param name="innerChart">子绘图结点</param> /// <param name="inIDList">入口插槽ID链表</param> /// <param name="outIDList">出口插槽ID链表</param> /// <param name="inSlotInfo">入口插槽信息</param> /// <param name="outSlotInfo">出口插槽信息</param> private void RefreshSlotInfo(InnerChart innerChart, List<int> inIDList, List<int> outIDList, Hashtable inSlotInfo, Hashtable outSlotInfo) { StringBuilder descriptionInfo = new StringBuilder(); descriptionInfo.AppendLine("<bold>入口插槽"); // 刷新插槽信息 inIDList.Sort(); List<SlotGraphElement> slotList = innerChart.GetInSlotList(); for (int i = 0; i < inIDList.Count; i++) { string nodeID = inIDList[i].ToString(); string nodeName = inSlotInfo[nodeID] as string; slotList[i].Tag = nodeID; slotList[i].TooltipText = nodeName; descriptionInfo.AppendLine(string.Format("{0}:{1}", i, nodeName)); } outIDList.Sort(); slotList = innerChart.GetOutSlotList(); descriptionInfo.AppendLine("<split>"); descriptionInfo.AppendLine("<bold>出口插槽"); for (int i = 0; i < outIDList.Count; i++) { string nodeID = outIDList[i].ToString(); string nodeName = outSlotInfo[nodeID] as string; slotList[i].Tag = nodeID; descriptionInfo.AppendLine(string.Format("{0}:{1}", i, nodeName)); } // 刷新提示信息 tooltipText = descriptionInfo.ToString(); }
/// <summary> /// 更新插槽数量 /// </summary> /// <param name="innerChart">子绘图结点</param> /// <param name="inSlotCount">入口插槽数量</param> /// <param name="outSlotCount">出口插槽数量</param> /// <param name="showMessage">是否显示消息</param> private void UpdateSlotCount(InnerChart innerChart, int inSlotCount, int outSlotCount, bool showMessage) { // 更新插槽信息 if (innerChart.InSlotCount != inSlotCount || innerChart.OutSlotCount != outSlotCount) { innerChart.InSlotCount = inSlotCount; innerChart.OutSlotCount = outSlotCount; innerChart.LockInSlot(); innerChart.LockOutSlot(); if (showMessage) { MessageBox.Show(string.Format("子绘图结点{0} (ID:{1})的插槽参数更新,需要重新连接!", innerChart.Text, innerChart.ID), "子绘图更新", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }