/// <summary> /// —оздает новый экземпл¤р класса <see cref="Macro"/>, загружа¤ его из файла. /// </summary> /// <param name="filename">»м¤ файла.</param> public Macro(string filename) { try { Elems = new List <MacroElem>(0); XmlDocument document = new XmlDocument(); document.Load(filename); Name = document.ChildNodes[1].ChildNodes[0].Attributes[0].Value; Discr = document.ChildNodes[1].ChildNodes[0].Attributes[1].Value; PicFileName = document.ChildNodes[1].ChildNodes[0].Attributes[2].Value; string[] PicSizeValues = document.ChildNodes[1].ChildNodes[0].Attributes[3].Value.Split('_'); PicSize = new SizeF(float.Parse(PicSizeValues[0], CultureInfo.InvariantCulture), float.Parse(PicSizeValues[1], CultureInfo.InvariantCulture)); CreatedVersion = new Version( int.Parse(document.ChildNodes[1].ChildNodes[1].Attributes[0].Value), int.Parse(document.ChildNodes[1].ChildNodes[1].Attributes[1].Value), int.Parse(document.ChildNodes[1].ChildNodes[1].Attributes[2].Value), int.Parse(document.ChildNodes[1].ChildNodes[1].Attributes[3].Value)); Elems = new List <MacroElem>(); for (int i = 2; i <= document.ChildNodes[1].ChildNodes.Count - 1; i++) { MacroElemType type = MacroElem.ShortedTypeToNormal(ExOperators.GetEnum <MacroElemTypeShorted>(document.ChildNodes[1].ChildNodes[i].Attributes[0].Value)); int toolmove = int.Parse(document.ChildNodes[1].ChildNodes[i].Attributes[1].Value); string[] MoveToPointS = document.ChildNodes[1].ChildNodes[i].Attributes[2].Value.Split('_'); PointF MoveToPoint = new PointF(float.Parse(MoveToPointS[0], CultureInfo.InvariantCulture), float.Parse(MoveToPointS[1], CultureInfo.InvariantCulture)); string[] MoveRelativeS = document.ChildNodes[1].ChildNodes[i].Attributes[3].Value.Split('_'); PointF MoveRelative = new PointF(float.Parse(MoveRelativeS[0], CultureInfo.InvariantCulture), float.Parse(MoveRelativeS[1], CultureInfo.InvariantCulture)); float Delay = float.Parse(document.ChildNodes[1].ChildNodes[i].Attributes[4].Value, CultureInfo.InvariantCulture); Elems.Add(new MacroElem() { Delay = Delay, MoveRelative = MoveRelative, MoveToPoint = MoveToPoint, ToolMove = toolmove, Type = type }); } } catch (Exception e) { throw new FileLoadException("Unknown error", e); } }
/// <summary> /// —охран¤ет макрос в файл с разширением .pcmacros. /// </summary> /// <param name="filename">»м¤ файла дл¤ сохранени¤.</param> public void Save(string filename) { XmlTextWriter textWritter = new XmlTextWriter(filename, Encoding.UTF8); textWritter.WriteStartDocument(); textWritter.WriteStartElement("MACRO"); textWritter.WriteEndElement(); textWritter.Close(); XmlDocument doc = new XmlDocument(); doc.Load(filename); XmlNode el = doc.CreateElement("S"); doc.DocumentElement.AppendChild(el); AppendAttrToNode(doc, el, "N", Name); AppendAttrToNode(doc, el, "D", Discr); AppendAttrToNode(doc, el, "PN", PicFileName); AppendAttrToNode(doc, el, "PS", string.Format("{0}_{1}", PicSize.Width, PicSize.Height)); XmlNode vers = doc.CreateElement("V"); AppendAttrToNode(doc, vers, "MV", CreatedVersion.Major.ToString()); AppendAttrToNode(doc, vers, "MnrV", CreatedVersion.Minor.ToString()); AppendAttrToNode(doc, vers, "BNr", CreatedVersion.Build.ToString()); AppendAttrToNode(doc, vers, "R", CreatedVersion.Revision.ToString()); doc.DocumentElement.AppendChild(vers); foreach (var a in Elems) { XmlNode node = doc.CreateElement("ME"); doc.DocumentElement.AppendChild(node); AppendAttrToNode(doc, node, "T", MacroElem.NormalToShorted(a.Type).ToString()); AppendAttrToNode(doc, node, "TM", a.ToolMove.ToString()); AppendAttrToNode(doc, node, "MTP", string.Format("{0}_{1}", a.MoveToPoint.X, a.MoveToPoint.Y)); AppendAttrToNode(doc, node, "MR", string.Format("{0}_{1}", a.MoveRelative.X, a.MoveRelative.Y)); AppendAttrToNode(doc, node, "D", a.Delay.ToString(CultureInfo.InvariantCulture)); } doc.Save(filename); }