Beispiel #1
0
        /// <summary>
        /// 复制图元
        /// </summary>
        /// <returns>复制的图元</returns>
        public override SlotContainer Clone()
        {
            InnerChart innerChart = new InnerChart(location, elementSize);

            CopyData(this, innerChart);

            return(innerChart);
        }
Beispiel #2
0
        /// <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;
        }
Beispiel #3
0
 /// <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;
 }
Beispiel #4
0
        /// <summary>
        /// 复制图元
        /// </summary>
        /// <returns>复制的图元</returns>
        public override SlotContainer Clone()
        {
            InnerChart innerChart = new InnerChart(location, elementSize);
            CopyData(this, innerChart);

            return innerChart;
        }
Beispiel #5
0
        /// <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;
        }
Beispiel #6
0
        /// <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();
        }
Beispiel #7
0
        /// <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);
                }
            }
        }