/// <summary> /// Load the preset file at the specified path into the specified asset and cook it. /// </summary> /// <param name="asset">Asset to load preset into</param> /// <param name="filePath">Full path to file containing preset. File must have been written out by SaveAssetPresetToFile.</param> public static void LoadPresetFileIntoAssetAndCook(HEU_HoudiniAsset asset, string filePath) { try { HEU_AssetPreset assetPreset = null; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { BinaryFormatter formatter = new BinaryFormatter(); HEU_Vector3SerializationSurrogate vector3S = new HEU_Vector3SerializationSurrogate(); HEU_Vector2SerializationSurrogate vector2S = new HEU_Vector2SerializationSurrogate(); SurrogateSelector surrogateSelector = new SurrogateSelector(); surrogateSelector.AddSurrogate(typeof(Vector3), new StreamingContext(StreamingContextStates.All), vector3S); surrogateSelector.AddSurrogate(typeof(Vector2), new StreamingContext(StreamingContextStates.All), vector2S); formatter.SurrogateSelector = surrogateSelector; assetPreset = (HEU_AssetPreset)formatter.Deserialize(fs); } if (assetPreset != null) { if (PRESET_IDENTIFIER.SequenceEqual(assetPreset._identifier)) { asset.LoadAssetPresetAndCook(assetPreset); } else { Debug.LogErrorFormat("Unable to load preset. Specified file is not a saved HDA preset: {0}", filePath); } } else { Debug.LogErrorFormat("Failed to load preset file {0}.", filePath); } } catch (System.Exception ex) { Debug.LogErrorFormat("Failed to load preset due to exception: " + ex.ToString()); } }
/// <summary> /// Save the specified asset's preset data to file at specified path. /// </summary> /// <param name="asset">The asset's preset data will be saved</param> /// <param name="filePath">The file to save to</param> public static void SaveAssetPresetToFile(HEU_HoudiniAsset asset, string filePath) { // This should return an object filled with preset data, and which we can serialize directly HEU_AssetPreset assetPreset = asset.GetAssetPreset(); if (assetPreset != null) { try { int len = PRESET_IDENTIFIER.Length; assetPreset._identifier = PRESET_IDENTIFIER; assetPreset._version = PRESET_VERSION; using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { IFormatter formatter = new BinaryFormatter(); HEU_Vector3SerializationSurrogate vector3S = new HEU_Vector3SerializationSurrogate(); HEU_Vector2SerializationSurrogate vector2S = new HEU_Vector2SerializationSurrogate(); SurrogateSelector surrogateSelector = new SurrogateSelector(); surrogateSelector.AddSurrogate(typeof(Vector3), new StreamingContext(StreamingContextStates.All), vector3S); surrogateSelector.AddSurrogate(typeof(Vector2), new StreamingContext(StreamingContextStates.All), vector2S); formatter.SurrogateSelector = surrogateSelector; formatter.Serialize(fs, assetPreset); } } catch (System.Exception ex) { Debug.LogErrorFormat("Failed to save preset due to exception: " + ex.ToString()); } } else { Debug.LogErrorFormat("Failed to save preset due to unable to retrieve the preset buffer!"); } }