diff options
author | opensim mirror account | 2010-10-15 17:30:05 -0700 |
---|---|---|
committer | opensim mirror account | 2010-10-15 17:30:05 -0700 |
commit | 06b17841e2e8b3677153e3209667ed92fb731260 (patch) | |
tree | e343f5115c50c8dbae730a15c41a0d62f5b9f74d /OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs | |
parent | Merge branch 'master' of /var/git/opensim/ (diff) | |
parent | Made OARs use the new serialization procedure. (TPs/crossings still on the ol... (diff) | |
download | opensim-SC-06b17841e2e8b3677153e3209667ed92fb731260.zip opensim-SC-06b17841e2e8b3677153e3209667ed92fb731260.tar.gz opensim-SC-06b17841e2e8b3677153e3209667ed92fb731260.tar.bz2 opensim-SC-06b17841e2e8b3677153e3209667ed92fb731260.tar.xz |
Merge branch 'master' of /var/git/opensim/
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs | 212 |
1 files changed, 121 insertions, 91 deletions
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 | } |