public void SerializeTileData(TileData data, Stream stream)
        {
            var node  = new TWXmlNode(TWXmlNode.CreateXmlDocument(), "TileData");
            var guide = node.CreateChildNode("Guid");

            XMLSerializer.WriteGuid(guide, data.Guid);
            var mesh = node.CreateChildNode("Mesh");

            XMLSerializer.WriteGuid(mesh, data.Mesh.Guid);

            var dimensions = node.CreateChildNode("Dimensions");

            XMLSerializer.WriteVector3(dimensions, data.Dimensions);

            var facetypes = node.CreateChildNode("Faces");

            for (int i = 0; i < data.FaceTypes.Length; i++)
            {
                if (data.FaceTypes[i] == null)
                {
                    continue;
                }
                var faceNode = facetypes.CreateChildNode("Face");
                var face     = (TileFace)(i + 1);
                faceNode.AddAttribute("Face", face.ToString());

                XMLSerializer.WriteGuid(faceNode.CreateChildNode("Type"), data.FaceTypes[i].GetRoot().Guid);
                XMLSerializer.WriteBoolean(faceNode.CreateChildNode("Winding"), data.GetTotalWinding(face));
            }

            node.XmlDocument.Save(stream);
        }
        public SnapInformation CreateFromTile(TileData data)
        {
            SnapInformation information = new SnapInformation();

            for (int i = 0; i < 6; i++)
            {
                var tileFace = (TileFace)(i + 1);
                if (data.GetFaceType(tileFace) == null)
                {
                    continue;
                }
                var faceType = data.GetFaceType(tileFace);

                SnapPoint point = GetPoint(data, tileFace, faceType, data.GetTotalWinding(tileFace));
                point.TileFaceType = faceType;

                information.addSnapObject(point);
            }

            return(information);
        }