public byte[] Save(Binary.Exporter binaryExporter, Data.NodeRoot rootNode, XmlDocument editorData) { var binaryDataLatest = binaryExporter.Export(rootNode, 1, Binary.ExporterVersion.Latest); // TODO change magnification // header byte[] headerData = null; { var data = new List <byte[]>(); data.Add(Encoding.UTF8.GetBytes("EFKE")); data.Add(BitConverter.GetBytes(Version)); headerData = data.SelectMany(_ => _).ToArray(); } var chunk = new Chunk(); chunk.AddChunk("INFO", GetInfoData(binaryExporter)); chunk.AddChunk("EDIT", Compress(editorData)); chunk.AddChunk("BIN_", binaryDataLatest); // fallback if (Binary.ExporterVersion.Latest > Binary.ExporterVersion.Ver1500) { var binaryExporterFallback = new Binary.Exporter(); var binaryDataFallback = binaryExporterFallback.Export(Core.Root, 1, Binary.ExporterVersion.Ver1500); chunk.AddChunk("BIN_", binaryDataFallback); } var chunkData = chunk.Save(); return(headerData.Concat(chunkData).ToArray()); }
public byte[] Save(Data.NodeRoot rootNode, XmlDocument editorData) { // binary data var binaryExporter = new Binary.Exporter(); var binaryDataLatest = binaryExporter.Export(rootNode, 1, Binary.ExporterVersion.Latest); // TODO change magnification // info data byte[] infoData = null; { var data = new List <byte[]>(); Action <HashSet <string> > exportStrs = (HashSet <string> strs) => { data.Add(BitConverter.GetBytes(strs.Count)); foreach (var exportedPath in strs) { data.Add(GetBinaryStr(exportedPath)); } }; int infoVersion = (int)Binary.ExporterVersion.Latest; data.Add(BitConverter.GetBytes(infoVersion)); exportStrs(binaryExporter.UsedTextures); exportStrs(binaryExporter.UsedNormalTextures); exportStrs(binaryExporter.UsedDistortionTextures); exportStrs(binaryExporter.Models); exportStrs(binaryExporter.Sounds); exportStrs(binaryExporter.Materials); infoData = data.SelectMany(_ => _).ToArray(); } // header byte[] headerData = null; { var data = new List <byte[]>(); data.Add(Encoding.UTF8.GetBytes("EFKE")); data.Add(BitConverter.GetBytes(Version)); headerData = data.SelectMany(_ => _).ToArray(); } var chunk = new Chunk(); chunk.AddChunk("INFO", infoData); chunk.AddChunk("EDIT", Compress(editorData)); chunk.AddChunk("BIN_", binaryDataLatest); // fallback if (Binary.ExporterVersion.Latest > Binary.ExporterVersion.Ver1500) { var binaryExporterFallback = new Binary.Exporter(); var binaryDataFallback = binaryExporterFallback.Export(Core.Root, 1, Binary.ExporterVersion.Ver1500); chunk.AddChunk("BIN_", binaryDataFallback); } var chunkData = chunk.Save(); return(headerData.Concat(chunkData).ToArray()); }
public static void GenerateMaterialCaches() { var exporter = new Binary.Exporter(); exporter.Export(Core.Root); foreach (var path in exporter.Materials) { var materialPath = Utils.Misc.GetAbsolutePath(Core.Root.GetPath().GetAbsolutePath(), path); GenerateMaterialCache(materialPath); } }
public unsafe void Send() { if (!networkClient.IsConnectingNetwork()) { return; } var binaryExporter = new Binary.Exporter(); var data = binaryExporter.Export(Core.Root, 1.0f); fixed(byte *p = &data[0]) { networkClient.SendDataByNetwork(System.IO.Path.GetFileNameWithoutExtension(Core.Root.GetFullPath()), new IntPtr(p), data.Length, Core.Root.GetFullPath()); } }
public unsafe void Send() { if (!native.IsConnectingNetwork()) { return; } var binaryExporter = new Binary.Exporter(); var data = binaryExporter.Export(Core.Option.Magnification); fixed(byte *p = &data[0]) { native.SendDataByNetwork(System.IO.Path.GetFileNameWithoutExtension(Core.FullPath), new IntPtr(p), data.Length, Core.FullPath); } }
public void Update() { if (isFirstUpdate) { Effekseer.GUI.Manager.NativeManager.OpenPopup(id); isFirstUpdate = false; } if (Effekseer.GUI.Manager.NativeManager.BeginPopupModal(title + id, ref opened, Effekseer.swig.WindowFlags.AlwaysAutoResize)) { if (Effekseer.GUI.Manager.NativeManager.DragFloat(this.title, mag, 0.1f, 0, float.MaxValue)) { } var save_text = "Save"; if (Effekseer.Core.Language == Effekseer.Language.Japanese) { save_text = "保存"; } if (Effekseer.GUI.Manager.NativeManager.Button(save_text)) { var binaryExporter = new Binary.Exporter(); var binary = binaryExporter.Export(mag[0]); System.IO.File.WriteAllBytes(path, binary); Effekseer.Core.Option.ExternalMagnification.SetValue(mag[0]); ShouldBeRemoved = true; } var cancel_text = "Cancel"; if (Effekseer.Core.Language == Effekseer.Language.Japanese) { cancel_text = "キャンセル"; } if (Effekseer.GUI.Manager.NativeManager.Button(cancel_text)) { ShouldBeRemoved = true; } Effekseer.GUI.Manager.NativeManager.EndPopup(); } else { ShouldBeRemoved = true; } }
public static bool GenerateMaterialCaches() { var exporter = new Binary.Exporter(); exporter.Export(Core.Root); foreach (var path in exporter.Materials) { var materialPath = Utils.Misc.GetAbsolutePath(Core.Root.GetPath().GetAbsolutePath(), path); if (!GenerateMaterialCache(materialPath)) { return(false); } } return(true); }
public bool Save(string path, Data.NodeRoot rootNode, XmlDocument editorData) { Utils.Logger.Write(string.Format("Save : Start : {0}", path)); var binaryExporter = new Binary.Exporter(); var allData = Save(binaryExporter, rootNode, editorData); try { System.IO.File.WriteAllBytes(path, allData); } catch (Exception e) { string messeage = ""; if (Core.Language == Language.English) { messeage = "Failed to save a file " + path + "\nThis error is \n"; } else { messeage = "保存に失敗しました。 " + path + "\nエラーは \n"; } messeage += e.ToString(); if (Core.OnOutputMessage != null) { Core.OnOutputMessage(messeage); } Utils.Logger.Write(string.Format("Save : Failed : {0}", e.ToString())); return(false); } Utils.Logger.Write(string.Format("Save : End")); return(true); }
EffekseerEffect CreateEffect(float scale, float externalScale, object bindingNode, bool isContainedAsBinary) { var effect = new EffekseerEffect(); var name = System.IO.Path.GetFileNameWithoutExtension(Core.FullPath); if (string.IsNullOrEmpty(name)) { name = "effect"; } effect.Add("scale", externalScale); var bodyName = name + "_body"; if (bindingNode == null) { effect.Add("nodeName", name); } else if (bindingNode is string) { effect.Add("nodeName", (string)bindingNode); } else if (bindingNode is int) { effect.Add("nodeIndex", (int)bindingNode); } effect.Add("effectName", name); var binaryExporter = new Binary.Exporter(); var binary = binaryExporter.Export(scale); AddBufferView(bodyName, binary); effect.Add("body", CreateeBodyAsBufferView(bodyName)); HashSet <string> textures = new HashSet <string>(); foreach (var texture in binaryExporter.UsedTextures.ToList().OrderBy(_ => _)) { textures.Add(texture); } HashSet <string> normalTextures = new HashSet <string>(); foreach (var texture in binaryExporter.UsedNormalTextures.ToList().OrderBy(_ => _)) { normalTextures.Add(texture); } HashSet <string> distortionTextures = new HashSet <string>(); foreach (var texture in binaryExporter.UsedDistortionTextures.ToList().OrderBy(_ => _)) { distortionTextures.Add(texture); } List <object> images = new List <object>(); List <object> normalImages = new List <object>(); List <object> distortionImages = new List <object>(); if (isContainedAsBinary) { foreach (var texture in textures.ToList().OrderBy(_ => _)) { Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString()); Uri u2 = new Uri(u1, texture); var buf = System.IO.File.ReadAllBytes(u2.LocalPath); AddBufferView(texture, buf); var mimeType = "dds"; if (System.IO.Path.GetExtension(texture).ToLower().Contains("png")) { mimeType = "png"; } images.Add(CreateImageAsBufferView(texture, mimeType)); } foreach (var texture in normalTextures.ToList().OrderBy(_ => _)) { Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString()); Uri u2 = new Uri(u1, texture); var buf = System.IO.File.ReadAllBytes(u2.LocalPath); AddBufferView(texture, buf); var mimeType = "dds"; if (System.IO.Path.GetExtension(texture).ToLower().Contains("png")) { mimeType = "png"; } normalImages.Add(CreateImageAsBufferView(texture, mimeType)); } foreach (var texture in distortionTextures.ToList().OrderBy(_ => _)) { Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString()); Uri u2 = new Uri(u1, texture); var buf = System.IO.File.ReadAllBytes(u2.LocalPath); AddBufferView(texture, buf); var mimeType = "dds"; if (System.IO.Path.GetExtension(texture).ToLower().Contains("png")) { mimeType = "png"; } distortionImages.Add(CreateImageAsBufferView(texture, mimeType)); } } else { foreach (var texture in textures.ToList().OrderBy(_ => _)) { images.Add(CreateImageAsURI(texture)); } foreach (var texture in normalTextures.ToList().OrderBy(_ => _)) { normalImages.Add(CreateImageAsURI(texture)); } foreach (var texture in distortionTextures.ToList().OrderBy(_ => _)) { distortionImages.Add(CreateImageAsURI(texture)); } } effect.Add("images", images); effect.Add("normalImages", normalImages); effect.Add("distortionImages", distortionImages); List <object> sounds = new List <object>(); if (isContainedAsBinary) { foreach (var sound in binaryExporter.Sounds.ToList().OrderBy(_ => _)) { Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString()); Uri u2 = new Uri(u1, sound); var buf = System.IO.File.ReadAllBytes(u2.LocalPath); AddBufferView(sound, buf); sounds.Add(CreateAsBufferView(sound)); } } else { foreach (var sound in binaryExporter.Sounds.ToList().OrderBy(_ => _)) { sounds.Add(CreateImageAsURI(sound)); } } effect.Add("sounds", sounds); List <object> models = new List <object>(); if (isContainedAsBinary) { foreach (var model in binaryExporter.Models.ToList().OrderBy(_ => _)) { Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString()); Uri u2 = new Uri(u1, model); var buf = System.IO.File.ReadAllBytes(u2.LocalPath); AddBufferView(model, buf); models.Add(CreateAsBufferView(model)); } } else { foreach (var model in binaryExporter.Models.ToList().OrderBy(_ => _)) { models.Add(CreateImageAsURI(model)); } } effect.Add("models", models); List <object> materials = new List <object>(); if (isContainedAsBinary) { foreach (var material in binaryExporter.Materials.ToList().OrderBy(_ => _)) { Uri u1 = new Uri(System.IO.Path.GetDirectoryName(Core.FullPath) + System.IO.Path.DirectorySeparatorChar.ToString()); Uri u2 = new Uri(u1, material); var buf = System.IO.File.ReadAllBytes(u2.LocalPath); AddBufferView(material, buf); materials.Add(CreateAsBufferView(material)); } } else { foreach (var material in binaryExporter.Materials.ToList().OrderBy(_ => _)) { materials.Add(CreateImageAsURI(material)); } } effect.Add("materials", materials); return(effect); }
public bool Save(string path) { // editor data var editorData = Core.SaveAsXmlDocument(path); // binary data var binaryExporter = new Binary.Exporter(); var binaryDataLatest = binaryExporter.Export(1, Binary.ExporterVersion.Latest); // TODO change magnification // info data byte[] infoData = null; { var data = new List <byte[]>(); Action <HashSet <string> > exportStrs = (HashSet <string> strs) => { data.Add(BitConverter.GetBytes(strs.Count)); foreach (var exportedPath in strs) { data.Add(GetBinaryStr(exportedPath)); } }; int infoVersion = (int)Binary.ExporterVersion.Latest; data.Add(BitConverter.GetBytes(infoVersion)); exportStrs(binaryExporter.UsedTextures); exportStrs(binaryExporter.UsedNormalTextures); exportStrs(binaryExporter.UsedDistortionTextures); exportStrs(binaryExporter.Models); exportStrs(binaryExporter.Sounds); exportStrs(binaryExporter.Materials); infoData = data.SelectMany(_ => _).ToArray(); } // header byte[] headerData = null; { var data = new List <byte[]>(); data.Add(Encoding.UTF8.GetBytes("EFKE")); data.Add(BitConverter.GetBytes(Version)); headerData = data.SelectMany(_ => _).ToArray(); } var chunk = new Chunk(); chunk.AddChunk("INFO", infoData); chunk.AddChunk("EDIT", Compress(editorData)); chunk.AddChunk("BIN_", binaryDataLatest); // fallback if (Binary.ExporterVersion.Latest > Binary.ExporterVersion.Ver1500) { var binaryExporterFallback = new Binary.Exporter(); var binaryDataFallback = binaryExporterFallback.Export(1, Binary.ExporterVersion.Ver1500); chunk.AddChunk("BIN_", binaryDataFallback); } var chunkData = chunk.Save(); var allData = headerData.Concat(chunkData).ToArray(); try { System.IO.File.WriteAllBytes(path, allData); } catch (Exception e) { string messeage = ""; if (Core.Language == Language.English) { messeage = "Failed to save a file " + path + "\nThis error is \n"; } else { messeage = "保存に失敗しました。 " + path + "\nエラーは \n"; } messeage += e.ToString(); if (Core.OnOutputMessage != null) { Core.OnOutputMessage(messeage); } return(false); } return(true); }
public bool Save(string path) { // editor data var editorData = Core.SaveAsXmlDocument(path); // binary data var binaryExporter = new Binary.Exporter(); var binaryData = binaryExporter.Export(1); // TODO change magnification // info data byte[] infoData = null; { var data = new List <byte[]>(); Action <HashSet <string> > exportStrs = (HashSet <string> strs) => { data.Add(BitConverter.GetBytes(strs.Count)); foreach (var exportedPath in strs) { data.Add(GetBinaryStr(exportedPath)); } }; int infoVersion = 1500; data.Add(BitConverter.GetBytes(infoVersion)); exportStrs(binaryExporter.UsedTextures); exportStrs(binaryExporter.UsedNormalTextures); exportStrs(binaryExporter.UsedDistortionTextures); exportStrs(binaryExporter.Models); exportStrs(binaryExporter.Sounds); exportStrs(binaryExporter.Materials); infoData = data.SelectMany(_ => _).ToArray(); } // header byte[] headerData = null; { var data = new List <byte[]>(); data.Add(Encoding.UTF8.GetBytes("EFKE")); data.Add(BitConverter.GetBytes(Version)); headerData = data.SelectMany(_ => _).ToArray(); } var chunk = new Chunk(); chunk.AddChunk("INFO", infoData); chunk.AddChunk("EDIT", Compress(editorData)); chunk.AddChunk("BIN_", binaryData); var chunkData = chunk.Save(); var allData = headerData.Concat(chunkData).ToArray(); try { System.IO.File.WriteAllBytes(path, allData); } catch { return(false); } return(true); }
public FileInfo AddEffect(string path) { if (!File.Exists(path)) { return(null); } DateTime lastWriteTime = File.GetLastWriteTime(path); Data.NodeRoot rootNode = Core.LoadFromFile(path); var backedupDelegate = Core.OnFileLoaded; try { Core.OnFileLoaded = (filePath) => { string hashName = Path.GetFileName(filePath); var entry = ResourceFiles.Find(r => r.HashName == hashName); return((entry != null) ? entry.Data : null); }; // Load all dependent resource files var resourcePaths = Utils.Misc.FindResourcePaths(rootNode, Binary.ExporterVersion.Latest); var dependencies = AddEffectDependencies(resourcePaths); Func <string, string> convertLoadingFilePath = (string convertedPath) => { foreach (var fileInfo in dependencies) { if (convertedPath.Contains(fileInfo.HashName)) { return(convertedPath.Replace(fileInfo.HashName, fileInfo.RelativePath)); } } return(convertedPath); }; var efkefc = new EfkEfc(); FileInfo file = new FileInfo(); file.Type = FileType.Effect; file.RelativePath = Path.GetFileName(path); var binaryExporter = new Binary.Exporter(); binaryExporter.ConvertLoadingFilePath = convertLoadingFilePath; file.Data = efkefc.Save(binaryExporter, rootNode, Core.SaveAsXmlDocument(rootNode)); file.HashName = ComputeHashName(file.Data); file.LastWriteTime = lastWriteTime; file.Dependencies = dependencies; EffectFiles.Add(file); return(file); } finally { Core.OnFileLoaded = backedupDelegate; } }
unsafe void Export() { SetLotationVelocity( Core.EffectBehavior.LocationVelocity.X, Core.EffectBehavior.LocationVelocity.Y, Core.EffectBehavior.LocationVelocity.Z); SetRotationVelocity( Core.EffectBehavior.RotationVelocity.X / 180.0f * 3.141592f, Core.EffectBehavior.RotationVelocity.Y / 180.0f * 3.141592f, Core.EffectBehavior.RotationVelocity.Z / 180.0f * 3.141592f); SetScaleVelocity( Core.EffectBehavior.ScaleVelocity.X, Core.EffectBehavior.ScaleVelocity.Y, Core.EffectBehavior.ScaleVelocity.Z); if (Core.EffectBehavior.RemovedTime.Infinite.Value) { SetRemovedTime(int.MaxValue); } else { SetRemovedTime(Core.EffectBehavior.RemovedTime.Value); } SetLotation( Core.EffectBehavior.Location.X, Core.EffectBehavior.Location.Y, Core.EffectBehavior.Location.Z); SetRotation( Core.EffectBehavior.Rotation.X / 180.0f * 3.141592f, Core.EffectBehavior.Rotation.Y / 180.0f * 3.141592f, Core.EffectBehavior.Rotation.Z / 180.0f * 3.141592f); SetScale( Core.EffectBehavior.Scale.X, Core.EffectBehavior.Scale.Y, Core.EffectBehavior.Scale.Z); SetTargetLocation( Core.EffectBehavior.TargetLocation.X, Core.EffectBehavior.TargetLocation.Y, Core.EffectBehavior.TargetLocation.Z); SetEffectCount( Core.EffectBehavior.CountX, Core.EffectBehavior.CountY, Core.EffectBehavior.CountZ); SetAllColor( (byte)Core.EffectBehavior.ColorAll.R, (byte)Core.EffectBehavior.ColorAll.G, (byte)Core.EffectBehavior.ColorAll.B, (byte)Core.EffectBehavior.ColorAll.A); SetEffectTimeSpan(Core.EffectBehavior.TimeSpan); SetEffectDistance(Core.EffectBehavior.Distance); SetBackgroundColor( (byte)Core.Option.BackgroundColor.R, (byte)Core.Option.BackgroundColor.G, (byte)Core.Option.BackgroundColor.B); SetGridLength( Core.Option.GridLength); SetStep((int)Core.Option.FPS.Value); SetIsRightHand(Core.Option.Coordinate.Value == Data.OptionValues.CoordinateType.Right); SetDistortionType((int)Core.Option.DistortionType.Value); SetRenderMode((int)Core.Option.RenderingMode.Value); if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.Sphere) { SetCullingParameter(Core.Culling.IsShown, Core.Culling.Sphere.Radius.Value, Core.Culling.Sphere.Location.X, Core.Culling.Sphere.Location.Y, Core.Culling.Sphere.Location.Z); } else if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.None) { SetCullingParameter(false, 0.0f, 0.0f, 0.0f, 0.0f); } var binaryExporter = new Binary.Exporter(); var data = binaryExporter.Export(Core.Option.Magnification); fixed(byte *p = &data[0]) { LoadEffect(new IntPtr(p), data.Length, Core.FullPath); } }
byte[] GetInfoData(Binary.Exporter binaryExporter) { // info data byte[] infoData = null; { var data = new List <byte[]>(); Action <HashSet <string> > exportStrs = (HashSet <string> strs) => { data.Add(BitConverter.GetBytes(strs.Count)); foreach (var exportedPath in strs) { data.Add(GetBinaryStr(exportedPath)); } }; int infoVersion = (int)Binary.ExporterVersion.Latest; data.Add(BitConverter.GetBytes(infoVersion)); if ((int)infoVersion <= (int)Binary.ExporterVersion.Ver1600) { exportStrs(binaryExporter.UsedTextures); exportStrs(binaryExporter.UsedNormalTextures); exportStrs(binaryExporter.UsedDistortionTextures); exportStrs(binaryExporter.Models); exportStrs(binaryExporter.Sounds); exportStrs(binaryExporter.Materials); exportStrs(binaryExporter.Curves); } else { var srgbTextures = binaryExporter.UsedTextures; var linearTextures = binaryExporter.UsedNormalTextures.Concat(binaryExporter.UsedDistortionTextures).ToList(); var textures = srgbTextures.Concat(linearTextures).Distinct().ToArray(); var dependencies = new List <Dependency>(); foreach (var texture in textures) { var d = new Dependency(); d.FileType = FileType.Texture; d.Flag = 0; if (srgbTextures.Contains(texture)) { d.Flag += (int)TextureColorType.sRGB; } if (linearTextures.Contains(texture)) { d.Flag += (int)TextureColorType.Linear; } d.Path = texture; dependencies.Add(d); } foreach (var model in binaryExporter.Models) { var d = new Dependency(); d.FileType = FileType.Model; d.Flag = 0; d.Path = model; dependencies.Add(d); } foreach (var sound in binaryExporter.Sounds) { var d = new Dependency(); d.FileType = FileType.Sound; d.Flag = 0; d.Path = sound; dependencies.Add(d); } foreach (var material in binaryExporter.Materials) { var d = new Dependency(); d.FileType = FileType.Material; d.Flag = 0; d.Path = material; dependencies.Add(d); } foreach (var curve in binaryExporter.Curves) { var d = new Dependency(); d.FileType = FileType.Curve; d.Flag = 0; d.Path = curve; dependencies.Add(d); } data.Add(BitConverter.GetBytes(dependencies.Count)); foreach (var dependency in dependencies) { data.Add(BitConverter.GetBytes((int)dependency.FileType)); data.Add(BitConverter.GetBytes((int)dependency.Flag)); data.Add(GetBinaryStr(dependency.Path)); } } infoData = data.SelectMany(_ => _).ToArray(); } return(infoData); }
public bool ExtractFiles(string dirPath, FileInfo[] extractFiles = null) { if (!Directory.Exists(dirPath)) { return(false); } if (extractFiles == null) { extractFiles = AllFiles.ToArray(); } var backedupDelegate = Core.OnFileLoaded; try { // Extract resource files foreach (var file in ResourceFiles) { if (!extractFiles.Contains(file)) { continue; } string filePath = Path.Combine(dirPath, file.RelativePath); string resourceDirPath = Path.GetDirectoryName(filePath); if (!Directory.Exists(resourceDirPath)) { Directory.CreateDirectory(resourceDirPath); } byte[] data = ApplyResourceDependencies(file, dirPath, filePath); if (data != null) { File.WriteAllBytes(filePath, data); File.SetLastWriteTime(filePath, file.LastWriteTime); } } // Extract effect files foreach (var file in EffectFiles) { if (!extractFiles.Contains(file)) { continue; } string filePath = Path.Combine(dirPath, file.RelativePath); string resourceDirPath = Path.GetDirectoryName(filePath); if (!Directory.Exists(resourceDirPath)) { Directory.CreateDirectory(resourceDirPath); } EfkEfc efkefc = new EfkEfc(); var doc = efkefc.Load(file.Data); if (doc == null) { return(false); } Core.OnFileLoaded = (path) => { string hashName = Path.GetFileName(path); var entry = ResourceFiles.Find(r => r.HashName == hashName); return((entry != null) ? entry.Data : null); }; NodeRoot root = Core.LoadFromXml(doc, filePath); if (root == null) { return(false); } // Resolve the path of dependent resources var resourcePaths = Utils.Misc.FindResourcePaths(root, Binary.ExporterVersion.Latest); foreach (var list in resourcePaths.All) { ApplyEffectDependencies(list, dirPath, filePath); } // Write effect file Core.OnFileLoaded = backedupDelegate; var binaryExporter = new Binary.Exporter(); byte[] data = efkefc.Save(binaryExporter, root, Core.SaveAsXmlDocument(root)); File.WriteAllBytes(filePath, data); File.SetLastWriteTime(filePath, file.LastWriteTime); } } finally { Core.OnFileLoaded = backedupDelegate; } return(true); }
unsafe void Export() { Manager.Viewer.SetDynamicInput( Core.Dynamic.Inputs.Values[0].Input.Value, Core.Dynamic.Inputs.Values[1].Input.Value, Core.Dynamic.Inputs.Values[2].Input.Value, Core.Dynamic.Inputs.Values[3].Input.Value); SetLotationVelocity( Core.EffectBehavior.LocationVelocity.X, Core.EffectBehavior.LocationVelocity.Y, Core.EffectBehavior.LocationVelocity.Z); SetRotationVelocity( Core.EffectBehavior.RotationVelocity.X / 180.0f * 3.141592f, Core.EffectBehavior.RotationVelocity.Y / 180.0f * 3.141592f, Core.EffectBehavior.RotationVelocity.Z / 180.0f * 3.141592f); SetScaleVelocity( Core.EffectBehavior.ScaleVelocity.X, Core.EffectBehavior.ScaleVelocity.Y, Core.EffectBehavior.ScaleVelocity.Z); if (Core.EffectBehavior.RemovedTime.Infinite.Value) { SetRemovedTime(int.MaxValue); } else { SetRemovedTime(Core.EffectBehavior.RemovedTime.Value); } SetLotation( Core.EffectBehavior.Location.X, Core.EffectBehavior.Location.Y, Core.EffectBehavior.Location.Z); SetRotation( Core.EffectBehavior.Rotation.X / 180.0f * 3.141592f, Core.EffectBehavior.Rotation.Y / 180.0f * 3.141592f, Core.EffectBehavior.Rotation.Z / 180.0f * 3.141592f); SetScale( Core.EffectBehavior.Scale.X, Core.EffectBehavior.Scale.Y, Core.EffectBehavior.Scale.Z); SetTargetLocation( Core.EffectBehavior.TargetLocation.X, Core.EffectBehavior.TargetLocation.Y, Core.EffectBehavior.TargetLocation.Z); SetEffectCount( Core.EffectBehavior.CountX, Core.EffectBehavior.CountY, Core.EffectBehavior.CountZ); SetAllColor( (byte)Core.EffectBehavior.ColorAll.R, (byte)Core.EffectBehavior.ColorAll.G, (byte)Core.EffectBehavior.ColorAll.B, (byte)Core.EffectBehavior.ColorAll.A); var behavior = native.GetEffectBehavior(); behavior.PlaybackSpeed = Core.EffectBehavior.PlaybackSpeed.Value; native.SetViewerEffectBehavior(behavior); SetEffectTimeSpan(Core.EffectBehavior.TimeSpan); SetEffectDistance(Core.EffectBehavior.Distance); SetBackgroundColor( (byte)Core.Environment.Background.BackgroundColor.R, (byte)Core.Environment.Background.BackgroundColor.G, (byte)Core.Environment.Background.BackgroundColor.B); SetGridLength( Core.Option.GridLength); SetStep((int)Core.Option.FPS.Value); SetIsRightHand(Core.Option.Coordinate.Value == Data.OptionValues.CoordinateType.Right); SetDistortionType((int)Core.Option.DistortionType.Value); SetRenderMode((int)Core.Option.RenderingMode.Value); SetViewMode((int)Core.Option.ViewerMode.Value); if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.Sphere) { SetCullingParameter(Core.Culling.IsShown, Core.Culling.Sphere.Radius.Value, Core.Culling.Sphere.Location.X, Core.Culling.Sphere.Location.Y, Core.Culling.Sphere.Location.Z); } else if (Core.Culling.Type.Value == Data.EffectCullingValues.ParamaterType.None) { SetCullingParameter(false, 0.0f, 0.0f, 0.0f, 0.0f); } var binaryExporter = new Binary.Exporter(); var data = binaryExporter.Export(Core.Root, Core.Option.Magnification); fixed(byte *p = &data[0]) { // TODO refactor replace LoadEffect(new IntPtr(p), data.Length, Core.Root.GetFullPath().Replace('\\', '/')); } }
unsafe void Export() { var behavior = EffectRenderer.GetBehavior(); behavior.DynamicInput1 = Core.Dynamic.Inputs.Values[0].Input.Value; behavior.DynamicInput2 = Core.Dynamic.Inputs.Values[1].Input.Value; behavior.DynamicInput3 = Core.Dynamic.Inputs.Values[2].Input.Value; behavior.DynamicInput4 = Core.Dynamic.Inputs.Values[3].Input.Value; behavior.PositionVelocityX = Core.EffectBehavior.LocationVelocity.X; behavior.PositionVelocityY = Core.EffectBehavior.LocationVelocity.Y; behavior.PositionVelocityZ = Core.EffectBehavior.LocationVelocity.Z; behavior.RotationVelocityX = Core.EffectBehavior.RotationVelocity.X / 180.0f * 3.141592f; behavior.RotationVelocityY = Core.EffectBehavior.RotationVelocity.Y / 180.0f * 3.141592f; behavior.RotationVelocityZ = Core.EffectBehavior.RotationVelocity.Z / 180.0f * 3.141592f; behavior.ScaleVelocityX = Core.EffectBehavior.ScaleVelocity.X; behavior.ScaleVelocityY = Core.EffectBehavior.ScaleVelocity.Y; behavior.ScaleVelocityZ = Core.EffectBehavior.ScaleVelocity.Z; if (Core.EffectBehavior.RemovedTime.Infinite.Value) { behavior.RemovedTime = int.MaxValue; } else { behavior.RemovedTime = Core.EffectBehavior.RemovedTime.Value; } behavior.PositionX = Core.EffectBehavior.Location.X; behavior.PositionY = Core.EffectBehavior.Location.Y; behavior.PositionZ = Core.EffectBehavior.Location.Z; behavior.RotationX = Core.EffectBehavior.Rotation.X / 180.0f * 3.141592f; behavior.RotationY = Core.EffectBehavior.Rotation.Y / 180.0f * 3.141592f; behavior.RotationZ = Core.EffectBehavior.Rotation.Z / 180.0f * 3.141592f; behavior.ScaleX = Core.EffectBehavior.Scale.X; behavior.ScaleY = Core.EffectBehavior.Scale.Y; behavior.ScaleZ = Core.EffectBehavior.Scale.Z; behavior.TargetPositionX = Core.EffectBehavior.TargetLocation.X; behavior.TargetPositionY = Core.EffectBehavior.TargetLocation.Y; behavior.TargetPositionZ = Core.EffectBehavior.TargetLocation.Z; behavior.CountX = Core.EffectBehavior.CountX; behavior.CountY = Core.EffectBehavior.CountY; behavior.CountZ = Core.EffectBehavior.CountZ; behavior.AllColorR = (byte)Core.EffectBehavior.ColorAll.R; behavior.AllColorG = (byte)Core.EffectBehavior.ColorAll.G; behavior.AllColorB = (byte)Core.EffectBehavior.ColorAll.B; behavior.AllColorA = (byte)Core.EffectBehavior.ColorAll.A; behavior.PlaybackSpeed = Core.EffectBehavior.PlaybackSpeed.Value; behavior.TimeSpan = Core.EffectBehavior.TimeSpan; behavior.Distance = Core.EffectBehavior.Distance; EffectRenderer.SetBehavior(behavior); EffectRenderer.SetStep((int)Core.Option.FPS.Value); effectSetting.SetCoordinateSyatem( Core.Option.Coordinate.Value == Data.OptionValues.CoordinateType.Right ? swig.CoordinateSystemType.RH : swig.CoordinateSystemType.LH); var binaryExporter = new Binary.Exporter(); var data = binaryExporter.Export(Core.Root, Core.Option.Magnification); var path = Utils.Misc.BackSlashToSlash(Core.Root.GetFullPath()); fixed(byte *p = &data[0]) { var newEffect = effectFactory.LoadEffect(new IntPtr(p), data.Length, path); EffectRenderer.SetEffect(newEffect); if (CurrentEffect != null) { CurrentEffect.Dispose(); } CurrentEffect = newEffect; } }