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); }
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(); }