/// <summary> /// inserts a step to "etape.xml". /// </summary> /// <param name="expert">The object holding the data</param> /// <returns></returns> private static bool Insert(Etape etape) { try { XmlDocument XmlDoc = new XmlDocument(); XPathNavigator Navigator; XPathNodeIterator Nodes; Int32 ID; /* Variable utilisée pour savoir quel est l'ID qu'il faut affecter au nouveau * noeud créé */ string rslt = Helper.service.LoadFile("etape.xml").ToString(); StreamWriter sw = new StreamWriter(System.Windows.Forms.Application.StartupPath + "\\temp.xml"); sw.Write(rslt); sw.Close(); XmlDoc.Load(System.Windows.Forms.Application.StartupPath + "\\temp.xml"); Navigator = XmlDoc.CreateNavigator(); /* Recherche du noeud MaxID pour déterminer quelle sera l'ID du nouveau * procedure. */ string ExpXPath = "//MaxID"; Nodes = Navigator.Select(Navigator.Compile(ExpXPath)); Nodes.MoveNext(); /* On place l'ID le plus élevé du document dans la variable ID */ ID = Nodes.Current.ValueAsInt; /* On incrémente la valeur du noeud MaxID car une fois notre nouveau noeud * créé, l'ID le plus élevé du document sera aussi incrémenté */ Nodes.Current.SetValue((ID + 1).ToString()); /* On se place sur le noeud ayant l'ID le plus élevé */ //ExpXPath = "//etape[@id='" + ID.ToString() + "']"; //Nodes = Navigator.Select(Navigator.Compile(ExpXPath)); if (Nodes.Count != 0) { //Nodes.MoveNext(); /* On crée le noeud principal (etape). */ Nodes.Current.MoveToPrevious(); //System.Windows.Forms.MessageBox.Show("Current.Previous: " + Nodes.Current.Name,"XMLStep.Insert"); Nodes.Current.InsertElementAfter("", "etape", "", ""); /* On se place sur le noeud ainsi créé. */ Nodes.Current.MoveToNext(XPathNodeType.Element); ID++; /* On incrémente ID pour que sa valeur soit identique à celle se * trouvant dans le noeud MaxID. */ /* Encodage des données */ Nodes.Current.CreateAttribute("", "id", "", ID.ToString()); Nodes.Current.AppendChildElement("", "libelle", "", etape.getName()); Nodes.Current.AppendChildElement("", "description", "", etape.getDescription()); int count = 0; //System.Windows.Forms.MessageBox.Show("3d obj "+etape.getObjectList().Count.ToString()); Nodes.Current.AppendChildElement("", "objets", "", ""); //Create node objets. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to libelle. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to description. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to objets. //System.Windows.Forms.MessageBox.Show("Before Loop:" + Nodes.Current.Name); foreach (Object3d obj in etape.getObjectList()) { //System.Windows.Forms.MessageBox.Show("count:" + count); Nodes.Current.AppendChildElement("", "objet", "", ""); //Create node objet. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to objet. //Move pass all the created object elements. for (int i = 0; i < count + 1; i++) { //Nodes.Current.MoveToFollowing(XPathNodeType.Element);//Move to objet. Nodes.Current.MoveToNext(); } //System.Windows.Forms.MessageBox.Show("for Loop:"+Nodes.Current.Name); Nodes.Current.CreateAttribute("", "id", "", obj.getId().ToString()); //Nodes.Current.CreateAttribute("", "nb", "", obj.getNb().ToString()); Nodes.Current.CreateAttribute("", "nb", "", count.ToString()); count++; Nodes.Current.AppendChildElement("", "position", "", ""); //Create node position. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to node position. //Transform axis float X, Y, Z; X = obj.getPosition().X; Y = obj.getPosition().Y; Z = obj.getPosition().Z; Helper.TransformAxis(ref X, ref Y, ref Z, Transformation.Translation, true); Nodes.Current.CreateAttribute("", "x", "", (X / translateFactor).ToString()); Nodes.Current.CreateAttribute("", "y", "", (Y / translateFactor).ToString()); Nodes.Current.CreateAttribute("", "z", "", (zFactor * Z / translateFactor).ToString()); Nodes.Current.MoveToParent(); //Move back to objet. Nodes.Current.AppendChildElement("", "rotation", "", ""); //Create node rotation. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to node position. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to node rotation. float angleRad = Helper.DegreesToRadians(Constante.stableAngle); Vector3 v = Vector3.Multiply(obj.getRotation(), 1 / angleRad); Vector3 N = Helper.Normalize(v); //System.Windows.Forms.MessageBox.Show("obj/angle: " + v.ToString() + "\nNorm: " + v1.ToString()); angleRad = angleRad / (N.X / v.X); //angle = Helper.RadiansToDegrees(angleRad); angle = Constante.stableAngle; if (obj.getRotation().X + obj.getRotation().Y + obj.getRotation().Z == 0) { Nodes.Current.CreateAttribute("", "angle", "", (0).ToString()); } else { Nodes.Current.CreateAttribute("", "angle", "", (angle).ToString()); } //System.Windows.Forms.MessageBox.Show("Befor: X: " + obj.getRotation().X); X = obj.getRotation().X; Y = obj.getRotation().Y; Z = obj.getRotation().Z; Helper.TransformAxis(ref X, ref Y, ref Z, Transformation.Rotation, true); //System.Windows.Forms.MessageBox.Show("After: X: " + obj.getRotation().X); Nodes.Current.CreateAttribute("", "x", "", (Helper.RadiansToDegrees(X) / angle).ToString()); Nodes.Current.CreateAttribute("", "y", "", (Helper.RadiansToDegrees(Y) / angle).ToString()); Nodes.Current.CreateAttribute("", "z", "", (Helper.RadiansToDegrees(Z) / angle).ToString()); Nodes.Current.MoveToParent(); //Move back to objet. Nodes.Current.AppendChildElement("", "scale", "", ""); //Create node scale. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to node position. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to node rotation. Nodes.Current.MoveToFollowing(XPathNodeType.Element); //Move to node scale. Nodes.Current.CreateAttribute("", "x", "", (obj.getScale().X *scaleFactor).ToString()); Nodes.Current.CreateAttribute("", "y", "", (obj.getScale().Y *scaleFactor).ToString()); Nodes.Current.CreateAttribute("", "z", "", (obj.getScale().Z *scaleFactor).ToString()); Nodes.Current.MoveToParent(); //Move back to objet. //System.Windows.Forms.MessageBox.Show("End "+Nodes.Current.Name); Nodes.Current.MoveToParent(); //Move back to objets. //System.Windows.Forms.MessageBox.Show("End "+Nodes.Current.Name); //System.Windows.Forms.MessageBox.Show(Nodes.Current.Name); //return false; } Nodes.Current.MoveToParent();//Move back to etape. //System.Windows.Forms.MessageBox.Show(Nodes.Current.Name); Nodes.Current.AppendChildElement("", "procedure", "", etape.getprocedure().getId().ToString()); //return false; //XmlDoc.Save((Stream)Helper.service.LoadFile("etape.xml"); //System.Windows.Forms.MessageBox.Show("Saving:"+ Helper.service.SaveXmlFile("etape.xml", XmlDoc).ToString(),"XMLStep.Insert"); Helper.service.SaveXmlFile("etape.xml", XmlDoc); } else { return(false); } } catch (System.IO.FileNotFoundException x) { } catch (Exception x) { System.Windows.Forms.MessageBox.Show(x.ToString()); } return(true); }
/// <summary> /// Modifies the etape Data. /// </summary> /// <param name="login">The id of the target Etape object.</param> /// <param name="admin">The object that holds the new data.</param> /// <returns></returns> public static bool Update(int id, Etape etape) { try { /* On utilise un XmlDocument et non un XPathDocument car ce dernier ne permet * pas l'édition des données XML. */ XmlDocument XmlDoc = new XmlDocument(); XPathNavigator Navigator; XPathNodeIterator Nodes; string rslt = Helper.service.LoadFile("etape.xml").ToString(); StreamWriter sw = new StreamWriter(System.Windows.Forms.Application.StartupPath + "\\temp.xml"); sw.Write(rslt); sw.Close(); XmlDoc.Load(System.Windows.Forms.Application.StartupPath + "\\temp.xml"); Navigator = XmlDoc.CreateNavigator(); string ExpXPath = "//etape[@id='" + id.ToString() + "']"; Nodes = Navigator.Select(Navigator.Compile(ExpXPath)); if (Nodes.Count != 0) { /* Encodage des nouvelles données */ Nodes.MoveNext(); Nodes.Current.MoveToFirstAttribute(); Nodes.Current.SetValue(id.ToString()); Nodes.Current.MoveToParent(); Nodes.Current.MoveToFirstChild(); //System.Windows.Forms.MessageBox.Show(Nodes.Current.Name.ToString() + " | " + Nodes.Current.Value.ToString()); Nodes.Current.SetValue(etape.getName()); Nodes.Current.MoveToNext(XPathNodeType.Element); Nodes.Current.SetValue(etape.getDescription()); Nodes.Current.MoveToNext(XPathNodeType.Element); //System.Windows.Forms.MessageBox.Show("Update: "+Nodes.Current.Name); { //Delete the set of objects. Nodes.Current.DeleteSelf(); //Recreate the objects. //System.Windows.Forms.MessageBox.Show("XMLStep.Update.Objects.Count: " + etape.getObjectList().Count.ToString()); if (etape.getObjectList().Count > 0) { InsertObjects(id, etape.getObjectList(), Nodes); } } Nodes.Current.MoveToFirstChild(); Nodes.Current.MoveToNext(); //Move to Libelle. Nodes.Current.MoveToNext(); //Move to Description. //System.Windows.Forms.MessageBox.Show("Update: " + Nodes.Current.Name); Nodes.Current.MoveToNext(XPathNodeType.Element); Nodes.Current.SetValue(etape.getprocedure().getId().ToString()); //System.Windows.Forms.MessageBox.Show("Update: " + Nodes.Current.Name); //return false; //XmlDoc.Save((Stream)Helper.service.LoadFile("etape.xml"); Helper.service.SaveXmlFile("etape.xml", XmlDoc); } else { return(false); } } catch (System.IO.FileNotFoundException x) { } catch (Exception x) { System.Windows.Forms.MessageBox.Show(x.ToString()); } return(true); }
/// <summary> /// Creates the file "etape.xml" and inserts the first step to it. /// </summary> /// <param name="expert">The object holding the data.</param> /// <returns></returns> private static bool FirstAdd(Etape etape) { try { XmlWriterSettings wSettings = new XmlWriterSettings(); wSettings.Indent = true; System.IO.MemoryStream ms = new System.IO.MemoryStream(); XmlWriter xw = XmlWriter.Create(ms, wSettings);// Write Declaration xw.WriteStartDocument(); // Write the root node xw.WriteStartElement("Etapes"); xw.WriteStartElement("etape"); xw.WriteStartAttribute("id"); xw.WriteString("0"); xw.WriteEndAttribute(); //---------------- xw.WriteStartElement("libelle"); xw.WriteString(etape.getName()); xw.WriteEndElement(); //----------------- xw.WriteStartElement("description"); xw.WriteString(etape.getDescription()); xw.WriteEndElement(); //----------------- xw.WriteStartElement("objets"); //System.Windows.Forms.MessageBox.Show("Step.Objects.Count: " + etape.getObjectList().Count, "XMLStep.FirstAdd"); for (int i = 0; i < etape.getObjectList().Count; i++) { Object3d obj = etape.getObjectList()[i]; xw.WriteStartElement("objet");//<objet> xw.WriteStartAttribute("id"); xw.WriteString(obj.getId().ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("nb"); xw.WriteString(i.ToString()); xw.WriteEndAttribute(); xw.WriteStartElement("position");//<position> //Transform axis float X, Y, Z; X = obj.getPosition().X; Y = obj.getPosition().Y; Z = obj.getPosition().Z; Helper.TransformAxis(ref X, ref Y, ref Z, Transformation.Translation, true); xw.WriteStartAttribute("x"); xw.WriteString((X / translateFactor).ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("y"); xw.WriteString((Y / translateFactor).ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("z"); xw.WriteString((zFactor * Z / translateFactor).ToString()); xw.WriteEndAttribute(); xw.WriteEndElement(); //</position> xw.WriteStartElement("rotation"); //<rotation> //Transform axis X = obj.getRotation().X; Y = obj.getRotation().Y; Z = obj.getRotation().Z; Helper.TransformAxis(ref X, ref Y, ref Z, Transformation.Rotation, true); float angleRad = Helper.DegreesToRadians(Constante.stableAngle); Vector3 v = Vector3.Multiply(obj.getRotation(), 1 / angleRad); Vector3 N = Helper.Normalize(v); //System.Windows.Forms.MessageBox.Show("obj/angle: " + v.ToString() + "\nNorm: " + v1.ToString()); angleRad = angleRad / (N.X / v.X); //angle = Helper.RadiansToDegrees(angleRad); angle = Constante.stableAngle; xw.WriteStartAttribute("angle"); if (obj.getRotation().X + obj.getRotation().Y + obj.getRotation().Z == 0) { xw.WriteString((0).ToString()); } else { xw.WriteString((angle).ToString()); } xw.WriteEndAttribute(); xw.WriteStartAttribute("x"); xw.WriteString((Helper.RadiansToDegrees(X) / angle).ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("y"); xw.WriteString((Helper.RadiansToDegrees(Y) / angle).ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("z"); xw.WriteString((Helper.RadiansToDegrees(Z) / angle).ToString()); xw.WriteEndAttribute(); xw.WriteEndElement(); //</rotation> xw.WriteStartElement("scale"); //<scale> xw.WriteStartAttribute("x"); xw.WriteString((obj.getScale().X *scaleFactor).ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("y"); xw.WriteString((obj.getScale().Y *scaleFactor).ToString()); xw.WriteEndAttribute(); xw.WriteStartAttribute("z"); xw.WriteString((obj.getScale().Z *scaleFactor).ToString()); xw.WriteEndAttribute(); xw.WriteEndElement(); //</scale> xw.WriteEndElement(); //</objet> } xw.WriteEndElement(); xw.WriteStartElement("procedure"); xw.WriteString(etape.getprocedure().getId().ToString()); xw.WriteEndElement(); //----------------- xw.WriteEndElement(); xw.WriteStartElement("MaxID"); xw.WriteString("0"); xw.WriteEndElement(); // Close the document xw.WriteEndDocument(); // Flush the write xw.Flush(); Byte[] buffer = new Byte[ms.Length]; buffer = ms.ToArray(); string xmlOutput = System.Text.Encoding.UTF8.GetString(buffer); //File.WriteAllText((Stream)Helper.service.LoadFile("etape.xml", xmlOutput); Helper.service.CreateXmlFile("etape.xml", xmlOutput); } catch (System.IO.FileNotFoundException x) { } catch (Exception x) { System.Windows.Forms.MessageBox.Show(x.ToString()); } return(true); }