public void OnGUI() { if (!_initializedUI) { // Creating of UI elements must happen in OnGUI InitializeUIElements(); } bool bChanged = false; Color originalBGColor = GUI.backgroundColor; bool bRequiresLoad = !HEU_ShelfTools.AreShelvesLoaded(); if(!bRequiresLoad) { // Sanity check that textures are still valid. When scene changes, these get invalidated. if (_guiContents != null && _guiContents.Length > 0) { bRequiresLoad = (_guiContents[0].image == null); } } if(bRequiresLoad) { LoadShelves(); } int numTools = 0; using (new EditorGUILayout.VerticalScope()) { using (new EditorGUILayout.VerticalScope(EditorStyles.helpBox)) { if (HEU_ShelfTools.AreShelvesLoaded()) { int currentShelfIndex = HEU_ShelfTools.GetCurrentShelfIndex(); HEU_Shelf shelf = null; using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (GUILayout.Button(_addButton, _buttonStyle, GUILayout.MaxWidth(_buttonWidth), GUILayout.MaxHeight(_buttonHeight))) { string newShelfPath = UnityEditor.EditorUtility.OpenFolderPanel("Add Shelf Folder", "", ""); if (!string.IsNullOrEmpty(newShelfPath) && HEU_Platform.DoesDirectoryExist(newShelfPath)) { AddNewShelfWindow(newShelfPath); bChanged = true; } } } using (new EditorGUILayout.HorizontalScope()) { GUILayout.Label("Active Shelf"); int newShelfIndex = EditorGUILayout.Popup(currentShelfIndex, _shelfNames, _popupStyle); if (currentShelfIndex != newShelfIndex) { // Change shelf currentShelfIndex = newShelfIndex; HEU_ShelfTools.SetCurrentShelf(currentShelfIndex); SelectShelf(currentShelfIndex); } shelf = HEU_ShelfTools.GetShelf(currentShelfIndex); numTools = shelf._tools.Count; using (new EditorGUI.DisabledGroupScope(shelf._defaultShelf)) { if (GUILayout.Button(_removeButton, _buttonStyle, GUILayout.MaxWidth(_buttonWidth))) { HEU_ShelfTools.RemoveShelf(currentShelfIndex); HEU_ShelfTools.SaveShelf(); HEU_ShelfTools.SetReloadShelves(); bChanged = true; } } } HEU_EditorUI.DrawSeparator(); if (!bChanged) { using (EditorGUILayout.ScrollViewScope scroll = new EditorGUILayout.ScrollViewScope(_toolButtonScrollPos)) { if (numTools > 0) { int numXElements = numTools < _toolGridXElements ? numTools : _toolGridXElements; _selectedToolIndex = GUILayout.SelectionGrid(_selectedToolIndex, _guiContents, numXElements, _toolGridStyle); } else { EditorGUILayout.LabelField("No tools found!"); } _toolButtonScrollPos = scroll.scrollPosition; } } } } bool bValidSelection = (_selectedToolIndex >= 0 && _selectedToolIndex < numTools); using (new EditorGUI.DisabledGroupScope(!bValidSelection)) { if(!bValidSelection) { _applyButton.text = "Select a Tool!"; } else { GameObject[] selectedObjects = HEU_EditorUtility.GetSelectedObjects(); if(selectedObjects.Length == 0) { _applyButton.text = "Create Tool (no input selected)!"; } else { _applyButton.text = "Create Tool (selected objects as inputs)!"; } } if (GUILayout.Button(_applyButton, _buttonStyle, GUILayout.MaxHeight(_buttonHeight))) { ProcessUserSelection(_selectedToolIndex); } } } }
public static void ExportAssetsToGeoFiles(HEU_HoudiniAssetRoot[] rootAssets) { // Open a Dialog to get user settings: // -directory to write to // -file name with extension (determines file format) string exportExt = "bgeo.sc"; List <HEU_GeoNode> outputGeoNodes = new List <HEU_GeoNode>(); int numNodes = 0; int numAssets = rootAssets.Length; if (numAssets == 0) { return; } string exportDir = EditorSaveFolderPanel("Export Geo to Folder", HEU_PluginSettings.LastExportPath, ""); if (string.IsNullOrEmpty(exportDir)) { return; } // Save latest folder choice HEU_PluginSettings.LastExportPath = exportDir; if (string.IsNullOrEmpty(exportExt)) { Debug.LogErrorFormat("Export extension cannot be empty."); return; } if (!HEU_Platform.DoesDirectoryExist(exportDir) && HEU_Platform.CreateDirectory(exportDir)) { Debug.LogErrorFormat("Error creating directory at {0}.", exportDir); return; } for (int i = 0; i < numAssets; ++i) { if (rootAssets[i] != null && rootAssets[i]._houdiniAsset != null) { HEU_HoudiniAsset asset = rootAssets[i]._houdiniAsset; HEU_SessionBase session = asset.GetAssetSession(true); if (session == null || !session.IsSessionValid()) { continue; } if (string.IsNullOrEmpty(asset.AssetName)) { Debug.LogErrorFormat("Unable to export output of asset at {0} due to empty name.", asset.AssetPath); continue; } outputGeoNodes.Clear(); asset.GetOutputGeoNodes(outputGeoNodes); numNodes = outputGeoNodes.Count; for (int j = 0; j < numNodes; ++j) { string exportPath = string.Format("{0}/{1}_{2}.{3}", exportDir, asset.RootGameObject.name, outputGeoNodes[j].GeoName, exportExt); if (!session.SaveGeoToFile(outputGeoNodes[j].GeoID, exportPath)) { Debug.LogErrorFormat("Failed to export output geo of asset with path: {0}", exportPath); } else { Debug.LogFormat("Exported output geo {0} of {1} at: {2}", outputGeoNodes[j].GeoName, asset.RootGameObject.name, exportPath); } } } } }