diff options
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Serialization')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | 61 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs | 212 |
2 files changed, 153 insertions, 120 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index cd7a1ca..79619ee 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -1075,36 +1075,36 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1075 | 1075 | ||
1076 | ////////// Write ///////// | 1076 | ////////// Write ///////// |
1077 | 1077 | ||
1078 | public static void SOGToXml2(XmlTextWriter writer, SceneObjectGroup sog) | 1078 | public static void SOGToXml2(XmlTextWriter writer, SceneObjectGroup sog, Dictionary<string, object>options) |
1079 | { | 1079 | { |
1080 | writer.WriteStartElement(String.Empty, "SceneObjectGroup", String.Empty); | 1080 | writer.WriteStartElement(String.Empty, "SceneObjectGroup", String.Empty); |
1081 | SOPToXml2(writer, sog.RootPart, null); | 1081 | SOPToXml2(writer, sog.RootPart, null, options); |
1082 | writer.WriteStartElement(String.Empty, "OtherParts", String.Empty); | 1082 | writer.WriteStartElement(String.Empty, "OtherParts", String.Empty); |
1083 | 1083 | ||
1084 | sog.ForEachPart(delegate(SceneObjectPart sop) | 1084 | sog.ForEachPart(delegate(SceneObjectPart sop) |
1085 | { | 1085 | { |
1086 | if (sop.UUID != sog.RootPart.UUID) | 1086 | if (sop.UUID != sog.RootPart.UUID) |
1087 | SOPToXml2(writer, sop, sog.RootPart); | 1087 | SOPToXml2(writer, sop, sog.RootPart, options); |
1088 | }); | 1088 | }); |
1089 | 1089 | ||
1090 | writer.WriteEndElement(); | 1090 | writer.WriteEndElement(); |
1091 | writer.WriteEndElement(); | 1091 | writer.WriteEndElement(); |
1092 | } | 1092 | } |
1093 | 1093 | ||
1094 | static void SOPToXml2(XmlTextWriter writer, SceneObjectPart sop, SceneObjectPart parent) | 1094 | static void SOPToXml2(XmlTextWriter writer, SceneObjectPart sop, SceneObjectPart parent, Dictionary<string, object> options) |
1095 | { | 1095 | { |
1096 | writer.WriteStartElement("SceneObjectPart"); | 1096 | writer.WriteStartElement("SceneObjectPart"); |
1097 | writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); | 1097 | writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); |
1098 | writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); | 1098 | writer.WriteAttributeString("xmlns:xsd", "http://www.w3.org/2001/XMLSchema"); |
1099 | 1099 | ||
1100 | writer.WriteElementString("AllowedDrop", sop.AllowedDrop.ToString().ToLower()); | 1100 | writer.WriteElementString("AllowedDrop", sop.AllowedDrop.ToString().ToLower()); |
1101 | WriteUUID(writer, "CreatorID", sop.CreatorID); | 1101 | WriteUUID(writer, "CreatorID", sop.CreatorID, options); |
1102 | WriteUUID(writer, "FolderID", sop.FolderID); | 1102 | WriteUUID(writer, "FolderID", sop.FolderID, options); |
1103 | writer.WriteElementString("InventorySerial", sop.InventorySerial.ToString()); | 1103 | writer.WriteElementString("InventorySerial", sop.InventorySerial.ToString()); |
1104 | 1104 | ||
1105 | WriteTaskInventory(writer, sop.TaskInventory); | 1105 | WriteTaskInventory(writer, sop.TaskInventory, options); |
1106 | 1106 | ||
1107 | WriteUUID(writer, "UUID", sop.UUID); | 1107 | WriteUUID(writer, "UUID", sop.UUID, options); |
1108 | writer.WriteElementString("LocalId", sop.LocalId.ToString()); | 1108 | writer.WriteElementString("LocalId", sop.LocalId.ToString()); |
1109 | writer.WriteElementString("Name", sop.Name); | 1109 | writer.WriteElementString("Name", sop.Name); |
1110 | writer.WriteElementString("Material", sop.Material.ToString()); | 1110 | writer.WriteElementString("Material", sop.Material.ToString()); |
@@ -1137,7 +1137,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1137 | writer.WriteElementString("LinkNum", sop.LinkNum.ToString()); | 1137 | writer.WriteElementString("LinkNum", sop.LinkNum.ToString()); |
1138 | writer.WriteElementString("ClickAction", sop.ClickAction.ToString()); | 1138 | writer.WriteElementString("ClickAction", sop.ClickAction.ToString()); |
1139 | 1139 | ||
1140 | WriteShape(writer, sop.Shape); | 1140 | WriteShape(writer, sop.Shape, options); |
1141 | 1141 | ||
1142 | WriteVector(writer, "Scale", sop.Scale); | 1142 | WriteVector(writer, "Scale", sop.Scale); |
1143 | writer.WriteElementString("UpdateFlag", sop.UpdateFlag.ToString()); | 1143 | writer.WriteElementString("UpdateFlag", sop.UpdateFlag.ToString()); |
@@ -1151,16 +1151,16 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1151 | writer.WriteElementString("SalePrice", sop.SalePrice.ToString()); | 1151 | writer.WriteElementString("SalePrice", sop.SalePrice.ToString()); |
1152 | writer.WriteElementString("ObjectSaleType", sop.ObjectSaleType.ToString()); | 1152 | writer.WriteElementString("ObjectSaleType", sop.ObjectSaleType.ToString()); |
1153 | writer.WriteElementString("OwnershipCost", sop.OwnershipCost.ToString()); | 1153 | writer.WriteElementString("OwnershipCost", sop.OwnershipCost.ToString()); |
1154 | WriteUUID(writer, "GroupID", sop.GroupID); | 1154 | WriteUUID(writer, "GroupID", sop.GroupID, options); |
1155 | WriteUUID(writer, "OwnerID", sop.OwnerID); | 1155 | WriteUUID(writer, "OwnerID", sop.OwnerID, options); |
1156 | WriteUUID(writer, "LastOwnerID", sop.LastOwnerID); | 1156 | WriteUUID(writer, "LastOwnerID", sop.LastOwnerID, options); |
1157 | writer.WriteElementString("BaseMask", sop.BaseMask.ToString()); | 1157 | writer.WriteElementString("BaseMask", sop.BaseMask.ToString()); |
1158 | writer.WriteElementString("OwnerMask", sop.OwnerMask.ToString()); | 1158 | writer.WriteElementString("OwnerMask", sop.OwnerMask.ToString()); |
1159 | writer.WriteElementString("GroupMask", sop.GroupMask.ToString()); | 1159 | writer.WriteElementString("GroupMask", sop.GroupMask.ToString()); |
1160 | writer.WriteElementString("EveryoneMask", sop.EveryoneMask.ToString()); | 1160 | writer.WriteElementString("EveryoneMask", sop.EveryoneMask.ToString()); |
1161 | writer.WriteElementString("NextOwnerMask", sop.NextOwnerMask.ToString()); | 1161 | writer.WriteElementString("NextOwnerMask", sop.NextOwnerMask.ToString()); |
1162 | writer.WriteElementString("Flags", sop.Flags.ToString()); | 1162 | writer.WriteElementString("Flags", sop.Flags.ToString()); |
1163 | WriteUUID(writer, "CollisionSound", sop.CollisionSound); | 1163 | WriteUUID(writer, "CollisionSound", sop.CollisionSound, options); |
1164 | writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString()); | 1164 | writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString()); |
1165 | if (sop.MediaUrl != null) | 1165 | if (sop.MediaUrl != null) |
1166 | writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); | 1166 | writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); |
@@ -1168,10 +1168,13 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1168 | writer.WriteEndElement(); | 1168 | writer.WriteEndElement(); |
1169 | } | 1169 | } |
1170 | 1170 | ||
1171 | static void WriteUUID(XmlTextWriter writer, string name, UUID id) | 1171 | static void WriteUUID(XmlTextWriter writer, string name, UUID id, Dictionary<string, object> options) |
1172 | { | 1172 | { |
1173 | writer.WriteStartElement(name); | 1173 | writer.WriteStartElement(name); |
1174 | writer.WriteElementString("UUID", id.ToString()); | 1174 | if (options.ContainsKey("old-guids")) |
1175 | writer.WriteElementString("Guid", id.ToString()); | ||
1176 | else | ||
1177 | writer.WriteElementString("UUID", id.ToString()); | ||
1175 | writer.WriteEndElement(); | 1178 | writer.WriteEndElement(); |
1176 | } | 1179 | } |
1177 | 1180 | ||
@@ -1194,7 +1197,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1194 | writer.WriteEndElement(); | 1197 | writer.WriteEndElement(); |
1195 | } | 1198 | } |
1196 | 1199 | ||
1197 | static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv) | 1200 | static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv, Dictionary<string, object> options) |
1198 | { | 1201 | { |
1199 | if (tinv.Count > 0) // otherwise skip this | 1202 | if (tinv.Count > 0) // otherwise skip this |
1200 | { | 1203 | { |
@@ -1203,27 +1206,27 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1203 | foreach (TaskInventoryItem item in tinv.Values) | 1206 | foreach (TaskInventoryItem item in tinv.Values) |
1204 | { | 1207 | { |
1205 | writer.WriteStartElement("TaskInventoryItem"); | 1208 | writer.WriteStartElement("TaskInventoryItem"); |
1206 | 1209 | ||
1207 | WriteUUID(writer, "AssetID", item.AssetID); | 1210 | WriteUUID(writer, "AssetID", item.AssetID, options); |
1208 | writer.WriteElementString("BasePermissions", item.BasePermissions.ToString()); | 1211 | writer.WriteElementString("BasePermissions", item.BasePermissions.ToString()); |
1209 | writer.WriteElementString("CreationDate", item.CreationDate.ToString()); | 1212 | writer.WriteElementString("CreationDate", item.CreationDate.ToString()); |
1210 | WriteUUID(writer, "CreatorID", item.CreatorID); | 1213 | WriteUUID(writer, "CreatorID", item.CreatorID, options); |
1211 | writer.WriteElementString("Description", item.Description); | 1214 | writer.WriteElementString("Description", item.Description); |
1212 | writer.WriteElementString("EveryonePermissions", item.EveryonePermissions.ToString()); | 1215 | writer.WriteElementString("EveryonePermissions", item.EveryonePermissions.ToString()); |
1213 | writer.WriteElementString("Flags", item.Flags.ToString()); | 1216 | writer.WriteElementString("Flags", item.Flags.ToString()); |
1214 | WriteUUID(writer, "GroupID", item.GroupID); | 1217 | WriteUUID(writer, "GroupID", item.GroupID, options); |
1215 | writer.WriteElementString("GroupPermissions", item.GroupPermissions.ToString()); | 1218 | writer.WriteElementString("GroupPermissions", item.GroupPermissions.ToString()); |
1216 | writer.WriteElementString("InvType", item.InvType.ToString()); | 1219 | writer.WriteElementString("InvType", item.InvType.ToString()); |
1217 | WriteUUID(writer, "ItemID", item.ItemID); | 1220 | WriteUUID(writer, "ItemID", item.ItemID, options); |
1218 | WriteUUID(writer, "OldItemID", item.OldItemID); | 1221 | WriteUUID(writer, "OldItemID", item.OldItemID, options); |
1219 | WriteUUID(writer, "LastOwnerID", item.LastOwnerID); | 1222 | WriteUUID(writer, "LastOwnerID", item.LastOwnerID, options); |
1220 | writer.WriteElementString("Name", item.Name); | 1223 | writer.WriteElementString("Name", item.Name); |
1221 | writer.WriteElementString("NextPermissions", item.NextPermissions.ToString()); | 1224 | writer.WriteElementString("NextPermissions", item.NextPermissions.ToString()); |
1222 | WriteUUID(writer, "OwnerID", item.OwnerID); | 1225 | WriteUUID(writer, "OwnerID", item.OwnerID, options); |
1223 | writer.WriteElementString("CurrentPermissions", item.CurrentPermissions.ToString()); | 1226 | writer.WriteElementString("CurrentPermissions", item.CurrentPermissions.ToString()); |
1224 | WriteUUID(writer, "ParentID", item.ParentID); | 1227 | WriteUUID(writer, "ParentID", item.ParentID, options); |
1225 | WriteUUID(writer, "ParentPartID", item.ParentPartID); | 1228 | WriteUUID(writer, "ParentPartID", item.ParentPartID, options); |
1226 | WriteUUID(writer, "PermsGranter", item.PermsGranter); | 1229 | WriteUUID(writer, "PermsGranter", item.PermsGranter, options); |
1227 | writer.WriteElementString("PermsMask", item.PermsMask.ToString()); | 1230 | writer.WriteElementString("PermsMask", item.PermsMask.ToString()); |
1228 | writer.WriteElementString("Type", item.Type.ToString()); | 1231 | writer.WriteElementString("Type", item.Type.ToString()); |
1229 | 1232 | ||
@@ -1234,7 +1237,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1234 | } | 1237 | } |
1235 | } | 1238 | } |
1236 | 1239 | ||
1237 | static void WriteShape(XmlTextWriter writer, PrimitiveBaseShape shp) | 1240 | static void WriteShape(XmlTextWriter writer, PrimitiveBaseShape shp, Dictionary<string, object> options) |
1238 | { | 1241 | { |
1239 | if (shp != null) | 1242 | if (shp != null) |
1240 | { | 1243 | { |
@@ -1283,7 +1286,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1283 | writer.WriteElementString("ProfileShape", shp.ProfileShape.ToString()); | 1286 | writer.WriteElementString("ProfileShape", shp.ProfileShape.ToString()); |
1284 | writer.WriteElementString("HollowShape", shp.HollowShape.ToString()); | 1287 | writer.WriteElementString("HollowShape", shp.HollowShape.ToString()); |
1285 | 1288 | ||
1286 | WriteUUID(writer, "SculptTexture", shp.SculptTexture); | 1289 | WriteUUID(writer, "SculptTexture", shp.SculptTexture, options); |
1287 | writer.WriteElementString("SculptType", shp.SculptType.ToString()); | 1290 | writer.WriteElementString("SculptType", shp.SculptType.ToString()); |
1288 | writer.WriteStartElement("SculptData"); | 1291 | writer.WriteStartElement("SculptData"); |
1289 | byte[] sd; | 1292 | byte[] sd; |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs index c6d4e55..d214eba 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs | |||
@@ -45,6 +45,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
45 | { | 45 | { |
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 47 | ||
48 | #region old xml format | ||
48 | public static void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset) | 49 | public static void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset) |
49 | { | 50 | { |
50 | XmlDocument doc = new XmlDocument(); | 51 | XmlDocument doc = new XmlDocument(); |
@@ -98,11 +99,128 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
98 | file.Close(); | 99 | file.Close(); |
99 | } | 100 | } |
100 | 101 | ||
101 | public static string SaveGroupToXml2(SceneObjectGroup grp) | 102 | #endregion |
103 | |||
104 | #region XML2 serialization | ||
105 | |||
106 | // Called by archives (save oar) | ||
107 | public static string SaveGroupToXml2(SceneObjectGroup grp, Dictionary<string, object> options) | ||
108 | { | ||
109 | //return SceneObjectSerializer.ToXml2Format(grp); | ||
110 | using (MemoryStream mem = new MemoryStream()) | ||
111 | { | ||
112 | using (XmlTextWriter writer = new XmlTextWriter(mem, System.Text.Encoding.UTF8)) | ||
113 | { | ||
114 | SceneObjectSerializer.SOGToXml2(writer, grp, options); | ||
115 | writer.Flush(); | ||
116 | |||
117 | using (StreamReader reader = new StreamReader(mem)) | ||
118 | { | ||
119 | mem.Seek(0, SeekOrigin.Begin); | ||
120 | return reader.ReadToEnd(); | ||
121 | } | ||
122 | } | ||
123 | } | ||
124 | } | ||
125 | |||
126 | // Called by scene serializer (save xml2) | ||
127 | public static void SavePrimsToXml2(Scene scene, string fileName) | ||
128 | { | ||
129 | EntityBase[] entityList = scene.GetEntities(); | ||
130 | SavePrimListToXml2(entityList, fileName); | ||
131 | } | ||
132 | |||
133 | // Called by scene serializer (save xml2) | ||
134 | public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) | ||
135 | { | ||
136 | m_log.InfoFormat( | ||
137 | "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}", | ||
138 | primName, scene.RegionInfo.RegionName, fileName); | ||
139 | |||
140 | EntityBase[] entityList = scene.GetEntities(); | ||
141 | List<EntityBase> primList = new List<EntityBase>(); | ||
142 | |||
143 | foreach (EntityBase ent in entityList) | ||
144 | { | ||
145 | if (ent is SceneObjectGroup) | ||
146 | { | ||
147 | if (ent.Name == primName) | ||
148 | { | ||
149 | primList.Add(ent); | ||
150 | } | ||
151 | } | ||
152 | } | ||
153 | |||
154 | SavePrimListToXml2(primList.ToArray(), fileName); | ||
155 | } | ||
156 | |||
157 | // Called by REST Application plugin | ||
158 | public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) | ||
159 | { | ||
160 | EntityBase[] entityList = scene.GetEntities(); | ||
161 | SavePrimListToXml2(entityList, stream, min, max); | ||
162 | } | ||
163 | |||
164 | // Called here only. Should be private? | ||
165 | public static void SavePrimListToXml2(EntityBase[] entityList, string fileName) | ||
102 | { | 166 | { |
103 | return SceneObjectSerializer.ToXml2Format(grp); | 167 | FileStream file = new FileStream(fileName, FileMode.Create); |
168 | try | ||
169 | { | ||
170 | StreamWriter stream = new StreamWriter(file); | ||
171 | try | ||
172 | { | ||
173 | SavePrimListToXml2(entityList, stream, Vector3.Zero, Vector3.Zero); | ||
174 | } | ||
175 | finally | ||
176 | { | ||
177 | stream.Close(); | ||
178 | } | ||
179 | } | ||
180 | finally | ||
181 | { | ||
182 | file.Close(); | ||
183 | } | ||
184 | } | ||
185 | |||
186 | // Called here only. Should be private? | ||
187 | public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max) | ||
188 | { | ||
189 | XmlTextWriter writer = new XmlTextWriter(stream); | ||
190 | |||
191 | int primCount = 0; | ||
192 | stream.WriteLine("<scene>\n"); | ||
193 | |||
194 | foreach (EntityBase ent in entityList) | ||
195 | { | ||
196 | if (ent is SceneObjectGroup) | ||
197 | { | ||
198 | SceneObjectGroup g = (SceneObjectGroup)ent; | ||
199 | if (!min.Equals(Vector3.Zero) || !max.Equals(Vector3.Zero)) | ||
200 | { | ||
201 | Vector3 pos = g.RootPart.GetWorldPosition(); | ||
202 | if (min.X > pos.X || min.Y > pos.Y || min.Z > pos.Z) | ||
203 | continue; | ||
204 | if (max.X < pos.X || max.Y < pos.Y || max.Z < pos.Z) | ||
205 | continue; | ||
206 | } | ||
207 | |||
208 | //stream.WriteLine(SceneObjectSerializer.ToXml2Format(g)); | ||
209 | SceneObjectSerializer.SOGToXml2(writer, (SceneObjectGroup)ent, new Dictionary<string,object>()); | ||
210 | stream.WriteLine(); | ||
211 | |||
212 | primCount++; | ||
213 | } | ||
214 | } | ||
215 | |||
216 | stream.WriteLine("</scene>\n"); | ||
217 | stream.Flush(); | ||
104 | } | 218 | } |
105 | 219 | ||
220 | #endregion | ||
221 | |||
222 | #region XML2 deserialization | ||
223 | |||
106 | public static SceneObjectGroup DeserializeGroupFromXml2(string xmlString) | 224 | public static SceneObjectGroup DeserializeGroupFromXml2(string xmlString) |
107 | { | 225 | { |
108 | XmlDocument doc = new XmlDocument(); | 226 | XmlDocument doc = new XmlDocument(); |
@@ -222,94 +340,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
222 | } | 340 | } |
223 | } | 341 | } |
224 | 342 | ||
225 | public static void SavePrimsToXml2(Scene scene, string fileName) | 343 | #endregion |
226 | { | ||
227 | EntityBase[] entityList = scene.GetEntities(); | ||
228 | SavePrimListToXml2(entityList, fileName); | ||
229 | } | ||
230 | |||
231 | public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max) | ||
232 | { | ||
233 | EntityBase[] entityList = scene.GetEntities(); | ||
234 | SavePrimListToXml2(entityList, stream, min, max); | ||
235 | } | ||
236 | |||
237 | public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName) | ||
238 | { | ||
239 | m_log.InfoFormat( | ||
240 | "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}", | ||
241 | primName, scene.RegionInfo.RegionName, fileName); | ||
242 | |||
243 | EntityBase[] entityList = scene.GetEntities(); | ||
244 | List<EntityBase> primList = new List<EntityBase>(); | ||
245 | |||
246 | foreach (EntityBase ent in entityList) | ||
247 | { | ||
248 | if (ent is SceneObjectGroup) | ||
249 | { | ||
250 | if (ent.Name == primName) | ||
251 | { | ||
252 | primList.Add(ent); | ||
253 | } | ||
254 | } | ||
255 | } | ||
256 | |||
257 | SavePrimListToXml2(primList.ToArray(), fileName); | ||
258 | } | ||
259 | |||
260 | public static void SavePrimListToXml2(EntityBase[] entityList, string fileName) | ||
261 | { | ||
262 | FileStream file = new FileStream(fileName, FileMode.Create); | ||
263 | try | ||
264 | { | ||
265 | StreamWriter stream = new StreamWriter(file); | ||
266 | try | ||
267 | { | ||
268 | SavePrimListToXml2(entityList, stream, Vector3.Zero, Vector3.Zero); | ||
269 | } | ||
270 | finally | ||
271 | { | ||
272 | stream.Close(); | ||
273 | } | ||
274 | } | ||
275 | finally | ||
276 | { | ||
277 | file.Close(); | ||
278 | } | ||
279 | } | ||
280 | |||
281 | public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max) | ||
282 | { | ||
283 | XmlTextWriter writer = new XmlTextWriter(stream); | ||
284 | |||
285 | int primCount = 0; | ||
286 | stream.WriteLine("<scene>\n"); | ||
287 | |||
288 | foreach (EntityBase ent in entityList) | ||
289 | { | ||
290 | if (ent is SceneObjectGroup) | ||
291 | { | ||
292 | SceneObjectGroup g = (SceneObjectGroup)ent; | ||
293 | if (!min.Equals(Vector3.Zero) || !max.Equals(Vector3.Zero)) | ||
294 | { | ||
295 | Vector3 pos = g.RootPart.GetWorldPosition(); | ||
296 | if (min.X > pos.X || min.Y > pos.Y || min.Z > pos.Z) | ||
297 | continue; | ||
298 | if (max.X < pos.X || max.Y < pos.Y || max.Z < pos.Z) | ||
299 | continue; | ||
300 | } | ||
301 | |||
302 | //stream.WriteLine(SceneObjectSerializer.ToXml2Format(g)); | ||
303 | SceneObjectSerializer.SOGToXml2(writer, (SceneObjectGroup)ent); | ||
304 | stream.WriteLine(); | ||
305 | |||
306 | primCount++; | ||
307 | } | ||
308 | } | ||
309 | |||
310 | stream.WriteLine("</scene>\n"); | ||
311 | stream.Flush(); | ||
312 | } | ||
313 | |||
314 | } | 344 | } |
315 | } | 345 | } |