コード例 #1
0
        private Stage CreateStage(XElement xml)
        {
            Stage stage = new Stage(xml);

            switch (stage.Type)
            {
            case "Data":
                stage = new DataItem(xml);
                break;

            case "Action":
                stage = new ActionStage(xml);
                break;

            case "Code":
                stage = new CodeStage(xml);
                break;

            case "Exception":
                stage = new ExceptionStage(xml);
                break;

            case "WaitStart":
                stage = new WaitStartStage(xml);
                break;

            case "WaitEnd":
                stage = new WaitEndStage(xml);
                break;

            case "Start":
                stage = new StartStage(xml);
                break;

            case "End":
                stage = new EndStage(xml);
                break;

            case "Process":
                stage = new SubProcessStage(xml);
                break;

            case "Navigate":
                stage = new NavigateStage(xml);
                break;

            case "Read":
                stage = new ReadStage(xml);
                break;

            case "Write":
                stage = new WriteStage(xml);
                break;

            case "SubSheet":
                stage = new SubPageStage(xml);
                break;
            }
            return(stage);
        }
コード例 #2
0
        public void Parse()
        {
            ReadStage stage = ReadStage.Header;

            Bone tempbone = new Bone();

            HierarchyItem hierarchyitem = new HierarchyItem();

            StreamReader sread = new StreamReader(this._path);

            while (!sread.EndOfStream)
            {
                string buffer = sread.ReadLine();
                buffer = buffer.TrimStart();
                buffer = buffer.TrimEnd();

                if ('#' == buffer[0])  // 注释
                {
                    continue;
                }

                string[] splitbuff = buffer.Split();
                switch (stage)
                {
                    #region Parse
                case ReadStage.Header:
                    switch (splitbuff[0])
                    {
                        #region Header
                    case ":version":
                        break;

                    case ":name":
                        break;

                    case ":units":
                        break;

                    case "mass":            // of :units
                        break;

                    case "length":          // of :units
                        goto case "mass";

                    case "angle":           // of :units
                        goto case "mass";

                    case ":documentation":
                        break;

                    case ":root":
                        stage = ReadStage.Root;
                        break;

                    default:
                        break;
                        #endregion
                    }
                    break;

                case ReadStage.Root:
                    switch (splitbuff[0])
                    {
                        #region Root
                    case "order":
                        break;

                    case "axis":
                        break;

                    case "position":
                        break;

                    case "orientation":
                        break;

                    case ":bonedata":
                        stage = ReadStage.Bonedata;
                        break;
                        #endregion
                    }
                    break;

                case ReadStage.Bonedata:
                    switch (splitbuff[0])
                    {
                        #region Bonedata
                    case "begin":
                        break;

                    case "id":
                        break;

                    case "name":
                        tempbone.Name = splitbuff[1];
                        break;

                    case "direction":
                        tempbone.Direction = new string[] {
                            splitbuff[1],
                            splitbuff[2],
                            splitbuff[3]
                        };
                        break;

                    case "length":
                        tempbone.Length = splitbuff[1];
                        break;

                    case "axis":
                        tempbone.Axis = new string[] {
                            splitbuff[1],
                            splitbuff[2],
                            splitbuff[3]
                        };
                        break;

                    case "dof":
                        List <string> dofnames = new List <string>();
                        for (int i = 1; i < splitbuff.Length; ++i)
                        {
                            dofnames.Add(splitbuff[i]);
                        }
                        tempbone.Dofs = dofnames.ToArray();
                        break;

                    case "limits":
                        break;

                    case "end":
                        _bones.Add(tempbone.Clone());
                        tempbone = new Bone();
                        break;

                    case ":hierarchy":
                        stage = ReadStage.Hierarchy;
                        break;

                    default:
                        break;
                        #endregion
                    }
                    break;

                case ReadStage.Hierarchy:
                    switch (splitbuff[0])
                    {
                        #region Hierarchy
                    case "begin":
                        break;

                    case "end":
                        break;

                    default:
                        hierarchyitem.Parent = splitbuff[0];

                        for (int i = 1; i < splitbuff.Length; ++i)
                        {
                            hierarchyitem.Children.Add(splitbuff[i]);
                        }

                        _hierarchyitems.Add(hierarchyitem.Clone());
                        hierarchyitem.Children.Clear();
                        break;
                        #endregion
                    }
                    break;

                default:
                    break;
                    #endregion
                }
            }

            sread.Close();
        }