private void CreateOARFile(ImportSettings settings, string filename) { string rootDir = ExportCommand.dumpDir + "../oarfile/"; OarFile.PrepareDir(rootDir); // Objects foreach (PrimToCreate parent in parents) { var ls = new Linkset() { Parent = parent }; parent.Link = ls; LocalScene.Links.Add(ls); } foreach (PrimToCreate ch in childs) { var pp = ch.ParentPrim; if (pp == null) { continue; } pp.Link.ChildAdd(ch); } foreach (var ls in LockInfo.CopyOf(LocalScene.Links)) { ls.Children.Sort(compareLocalIDs); if (ls.Parent.IsAsset) { LocalScene.AssetLinks.Add(ls); LocalScene.Links.Remove(ls); } } foreach (var ls in LocalScene.Links) { OarFile.SaveLinkset(ls, rootDir + "objects/" + ls.Parent.NewID + ArchiveConstants.ASSET_TYPE_TO_EXTENSION[AssetType.Object], false, settings); } // Assets foreach (ItemToCreate asset in LocalScene.Assets) { File.WriteAllBytes(rootDir + "assets/" + asset.OldID + ArchiveConstants.ASSET_TYPE_TO_EXTENSION[asset.AssetType], asset.AssetData); } foreach (var ls in LocalScene.AssetLinks) { OarFile.SaveLinkset(ls, rootDir + "assets/" + ls.Parent.NewID + ArchiveConstants.ASSET_TYPE_TO_EXTENSION[AssetType.Object], true, settings); } // Terrain if (settings.ContainsKey("terrain")) { ExportCommand.Exporting.SaveTerrainRaw32(rootDir + "terrains/heightmap.raw"); } string parcelDirs = rootDir + "landdata/"; Directory.CreateDirectory(parcelDirs); OarFile.PackageArchive(rootDir, filename, settings.ContainsKey("terrain"), settings.ContainsKey("land")); }
static public void SaveLinkset(Linkset linkset, string filename, bool oldFormat, ImportSettings options) { try { using (StreamWriter stream = new StreamWriter(filename)) { XmlTextWriter writer = new XmlTextWriter(stream); SOGToXml2(writer, linkset, oldFormat, options); writer.Flush(); } } catch (Exception ex) { Logger.Log("Failed saving linkset: " + ex.Message, Helpers.LogLevel.Error); } }
public static void SavePrims(DoubleDictionary <uint, UUID, Primitive> prims, string path, ImportSettings options) { // Delete all of the old linkset files try { Directory.Delete(path, true); Directory.CreateDirectory(path); } catch (Exception ex) { Logger.Log("Failed saving prims: " + ex.Message, Helpers.LogLevel.Error); return; } // Copy the double dictionary to a temporary list for iterating List <Primitive> primList = new List <Primitive>(); prims.ForEach(delegate(Primitive prim) { primList.Add(prim); }); foreach (Primitive p in primList) { if (p.ParentID == 0) { Linkset linkset = new Linkset(); linkset.Parent = ImportCommand.Importing.APrimToCreate(p); prims.ForEach(delegate(Primitive q) { if (q.ParentID == p.LocalID) { linkset.Children.Add(ImportCommand.Importing.APrimToCreate(q)); } }); OarFile.SaveLinkset(linkset, path + "/Primitive_" + linkset.Parent.NewID.ToString() + ".xml", false, options); } } }
static void SOGToXml2(XmlTextWriter writer, Linkset linkset, bool oldFormat, ImportSettings options) { options.CurLink = linkset; writer.WriteStartElement(String.Empty, "SceneObjectGroup", String.Empty); if (oldFormat) writer.WriteStartElement(String.Empty, "RootPart", String.Empty); options.CurPrim = linkset.Parent; SOPToXml(writer, linkset.Parent.Prim, 0, null, GetTaskInv(linkset.Parent), options); if (oldFormat) writer.WriteEndElement(); writer.WriteStartElement(String.Empty, "OtherParts", String.Empty); //uint linkNum = sop.LocalID - parent.LocalID; int linkNum = 1; foreach (var child in linkset.Children) { options.CurPrim = child; if (oldFormat) writer.WriteStartElement(String.Empty, "Part", String.Empty); SOPToXml(writer, child.Prim, linkNum++, linkset.Parent.Prim, GetTaskInv(child), options); if (oldFormat) writer.WriteEndElement(); } writer.WriteEndElement(); writer.WriteEndElement(); }
static void SOGToXml2(XmlTextWriter writer, Linkset linkset, bool oldFormat, ImportSettings options) { options.CurLink = linkset; writer.WriteStartElement(String.Empty, "SceneObjectGroup", String.Empty); if (oldFormat) { writer.WriteStartElement(String.Empty, "RootPart", String.Empty); } options.CurPrim = linkset.Parent; SOPToXml(writer, linkset.Parent.Prim, 0, null, GetTaskInv(linkset.Parent), options); if (oldFormat) { writer.WriteEndElement(); } writer.WriteStartElement(String.Empty, "OtherParts", String.Empty); //uint linkNum = sop.LocalID - parent.LocalID; int linkNum = 1; foreach (var child in linkset.Children) { options.CurPrim = child; if (oldFormat) { writer.WriteStartElement(String.Empty, "Part", String.Empty); } SOPToXml(writer, child.Prim, linkNum++, linkset.Parent.Prim, GetTaskInv(child), options); if (oldFormat) { writer.WriteEndElement(); } } writer.WriteEndElement(); writer.WriteEndElement(); }
private void CreateOARFile(ImportSettings settings, string filename) { string rootDir = ExportCommand.dumpDir + "../oarfile/"; OarFile.PrepareDir(rootDir); // Objects foreach (PrimToCreate parent in parents) { var ls = new Linkset() { Parent = parent }; parent.Link = ls; LocalScene.Links.Add(ls); } foreach (PrimToCreate ch in childs) { var pp = ch.ParentPrim; if (pp == null) { continue; } pp.Link.ChildAdd(ch); } foreach (var ls in LockInfo.CopyOf(LocalScene.Links)) { ls.Children.Sort(compareLocalIDs); if (ls.Parent.IsAsset) { LocalScene.AssetLinks.Add(ls); LocalScene.Links.Remove(ls); } } foreach (var ls in LocalScene.Links) { OarFile.SaveLinkset(ls, rootDir + "objects/" + ls.Parent.NewID + ArchiveConstants.ASSET_TYPE_TO_EXTENSION[AssetType.Object], false, settings); } // Assets foreach (ItemToCreate asset in LocalScene.Assets) { File.WriteAllBytes(rootDir + "assets/" + asset.OldID + ArchiveConstants.ASSET_TYPE_TO_EXTENSION[asset.AssetType], asset.AssetData); } foreach (var ls in LocalScene.AssetLinks) { OarFile.SaveLinkset(ls, rootDir + "assets/" + ls.Parent.NewID + ArchiveConstants.ASSET_TYPE_TO_EXTENSION[AssetType.Object], true, settings); } // Terrain if (settings.ContainsKey("terrain")) ExportCommand.Exporting.SaveTerrainRaw32(rootDir + "terrains/heightmap.raw"); string parcelDirs = rootDir + "landdata/"; Directory.CreateDirectory(parcelDirs); OarFile.PackageArchive(rootDir, filename, settings.ContainsKey("terrain"), settings.ContainsKey("land")); }
private void CheckTasks(ImportSettings settings) { foreach (PrimToCreate parent in LockInfo.CopyOf(parents)) { var ls = new Linkset() { Parent = parent }; parent.Link = ls; LocalScene.Links.Add(ls); } foreach (PrimToCreate ch in childs) { var pp = ch.ParentPrim; if (pp == null) { continue; } pp.Link.ChildAdd(ch); } foreach (var ls in LockInfo.CopyOf(LocalScene.Links)) { ls.Children.Sort(compareLocalIDs); if (ls.Parent.IsAsset) { LocalScene.AssetLinks.Add(ls); LocalScene.Links.Remove(ls); } } int found = 0; Dictionary <UUID, TaskFileInfo> item2TO = new Dictionary <UUID, TaskFileInfo>(); List <TaskFileInfo> mssingTO = new List <TaskFileInfo>(); List <TaskFileInfo> duped = new List <TaskFileInfo>(); foreach (var file in Directory.GetFiles(ExportCommand.dumpDir, "*.objectAsset")) { break; found++; string fileString = File.ReadAllText(file); string[] c = fileString.Split(','); try { TaskFileInfo to = new TaskFileInfo() { OldLid = uint.Parse(c[0]), RezzedID = UUID.Parse(c[2]), OldTaskHolder = UUID.Parse(c[3]), AssetUUID = UUID.Parse(c[4]), TaskItemID = UUID.Parse(c[5]) }; bool missing = false; if (MissingLLSD(to.RezzedID)) { Failure("Need LLSD: " + fileString); to.missingLLSD = true; mssingTO.Add(to); } TaskFileInfo old; if (item2TO.TryGetValue(to.TaskItemID, out old)) { if (old.missingLLSD) { item2TO[to.TaskItemID] = to; duped.Add(old); } else { duped.Add(to); } } else { if (to.missingLLSD) { continue; } item2TO[to.TaskItemID] = to; } } catch (Exception ee) { Failure("fileIssue: " + file + " = " + fileString); } } Success("t=" + found + " m=" + mssingTO.Count + " td=" + item2TO.Count + " duped=" + duped.Count); }
public static void SavePrims(DoubleDictionary<uint, UUID, Primitive> prims, string path, ImportSettings options) { // Delete all of the old linkset files try { Directory.Delete(path, true); Directory.CreateDirectory(path); } catch (Exception ex) { Logger.Log("Failed saving prims: " + ex.Message, Helpers.LogLevel.Error); return; } // Copy the double dictionary to a temporary list for iterating List<Primitive> primList = new List<Primitive>(); prims.ForEach(delegate(Primitive prim) { primList.Add(prim); }); foreach (Primitive p in primList) { if (p.ParentID == 0) { Linkset linkset = new Linkset(); linkset.Parent = ImportCommand.Importing.APrimToCreate(p); prims.ForEach(delegate(Primitive q) { if (q.ParentID == p.LocalID) linkset.Children.Add(ImportCommand.Importing.APrimToCreate(q)); }); OarFile.SaveLinkset(linkset, path + "/Primitive_" + linkset.Parent.NewID.ToString() + ".xml", false, options); } } }
private void CheckTasks(ImportSettings settings) { foreach (PrimToCreate parent in LockInfo.CopyOf(parents)) { var ls = new Linkset() { Parent = parent }; parent.Link = ls; LocalScene.Links.Add(ls); } foreach (PrimToCreate ch in childs) { var pp = ch.ParentPrim; if (pp == null) { continue; } pp.Link.ChildAdd(ch); } foreach (var ls in LockInfo.CopyOf(LocalScene.Links)) { ls.Children.Sort(compareLocalIDs); if (ls.Parent.IsAsset) { LocalScene.AssetLinks.Add(ls); LocalScene.Links.Remove(ls); } } int found = 0; Dictionary<UUID, TaskFileInfo> item2TO = new Dictionary<UUID, TaskFileInfo>(); List<TaskFileInfo> mssingTO = new List<TaskFileInfo>(); List<TaskFileInfo> duped = new List<TaskFileInfo>(); foreach (var file in Directory.GetFiles(ExportCommand.dumpDir, "*.objectAsset")) { break; found++; string fileString = File.ReadAllText(file); string[] c = fileString.Split(','); try { TaskFileInfo to = new TaskFileInfo() { OldLid = uint.Parse(c[0]), RezzedID = UUID.Parse(c[2]), OldTaskHolder = UUID.Parse(c[3]), AssetUUID = UUID.Parse(c[4]), TaskItemID = UUID.Parse(c[5]) }; bool missing = false; if (MissingLLSD(to.RezzedID)) { Failure("Need LLSD: " + fileString); to.missingLLSD = true; mssingTO.Add(to); } TaskFileInfo old; if (item2TO.TryGetValue(to.TaskItemID, out old)) { if (old.missingLLSD) { item2TO[to.TaskItemID] = to; duped.Add(old); } else { duped.Add(to); } } else { if (to.missingLLSD) { continue; } item2TO[to.TaskItemID] = to; } } catch (Exception ee) { Failure("fileIssue: " + file + " = " + fileString); } } Success("t=" + found + " m=" + mssingTO.Count + " td=" + item2TO.Count + " duped=" + duped.Count); }