private void CheckObjectsInterMachines() { for (int i = 0; i < Trees.Count - 1; i++) { BasicObjectsTree tree1 = Trees[i]; for (int j = i + 1; j < Trees.Count; j++) { BasicObjectsTree tree2 = Trees[j]; var list = tree1.UsedObjects.Keys.Intersect(tree2.UsedObjects.Keys); foreach (DrawableObject obj in list) { MessagesList.Add(new CheckMessage(CheckMessage.MessageTypes.Error, string.Format("Object '{0}' is shared between '{1}' and '{2}' machines.", obj.Name, tree1.Root.Name, tree2.Root.Name), obj)); } } } }
public MachineStatus(GeneratorData data, IMachine mach, BasicObjectsTree tree, bool markStart = true) : base(mach as IBasicGlobal, data) { Owner = null; Node = mach; Tree = tree; if (markStart) { mach.Origin.SimulationMark = SimulationMark.ExecutingObject; } CurrentState = mach.Root; if (mach.Father is BasicMachine bmach) { foreach (BasicState bstate in bmach.States) { if (bstate != mach) { bstate.SimulationMark = SimulationMark.None; } } } }
private void BuildBasicObjectsTrees() { Trees = new List <BasicObjectsTree>(); GlobalObjects = new List <IBasicGlobal>(); BasicStatesList = new List <BasicState>(); foreach (IGlobal global in Book.Globals) { switch (global) { case Origin origin: if (origin.Father == null) { var basicObjectsTree = new BasicObjectsTree(origin.OwnerDraw.OwnerSheet, origin); Trees.Add(basicObjectsTree); if (!basicObjectsTree.AddStatesToList(BasicStatesList)) { MessagesList.Add(new CheckMessage(CheckMessage.MessageTypes.Error, "There is one or more states used in diferent state machines.", null)); } GlobalObjects.Add(basicObjectsTree); } break; case Relation indir: GlobalObjects.Add(RelationsList.Find(bi => bi.Relation == indir)); break; case Equation eq: GlobalObjects.Add(EquationsList.Find(be => be.Equation == eq)); break; } } if (Trees.Count == 0) { MessagesList.Add(new CheckMessage(CheckMessage.MessageTypes.Error, "There is not a valid state machine to check.", null)); } }
public SubMachineStatus(MachineStatus owner, IMachine mach, BasicObjectsTree tree, bool markStart = true) : base(owner.Data, mach, tree, markStart) { Owner = owner; }
bool ProccessDirs(string scriptsPath, string destPath) { bool res; try { foreach (string subdir in Directory.GetDirectories(scriptsPath)) { string dirName = Path.GetFileName(subdir); string finalDirName, finalPath = destPath; switch (dirName) { case "@project": finalDirName = dirName.Replace("@project", Name); finalPath = Path.Combine(destPath, finalDirName); Directory.CreateDirectory(finalPath); break; case "@machine": foreach (BasicObjectsTree tree in Data.Trees) { activeMachine = tree; finalDirName = dirName.Replace("@project", tree.Name); finalPath = Path.Combine(destPath, tree.Name); Directory.CreateDirectory(finalPath); foreach (string filePath in Directory.GetFiles(subdir)) { string fileName = Path.GetFileName(filePath); res = ProccessScript(filePath, finalPath, fileName); if (!res) { return(false); } } } ProccessDirs(subdir, finalPath); continue; default: finalDirName = dirName; break; } activeMachine = null; foreach (string filePath in Directory.GetFiles(subdir)) { string fileName = Path.GetFileName(filePath); res = ProccessScript(filePath, finalPath, fileName); if (!res) { return(false); } } ProccessDirs(subdir, finalPath); } } catch (Exception) { return(false); } return(true); }