Export by nodes
This commit is contained in:
27
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
27
AssetStudioGUI/AssetStudioGUIForm.Designer.cs
generated
@@ -157,6 +157,9 @@ namespace AssetStudioGUI
|
||||
exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
showOriginalFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();
|
||||
exportSelectedNodessplitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
menuStrip1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
||||
splitContainer1.Panel1.SuspendLayout();
|
||||
@@ -334,7 +337,7 @@ namespace AssetStudioGUI
|
||||
//
|
||||
// modelToolStripMenuItem
|
||||
//
|
||||
modelToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exportAllObjectssplitToolStripMenuItem1, exportSelectedObjectsToolStripMenuItem, exportSelectedObjectsWithAnimationClipToolStripMenuItem, toolStripSeparator1, exportSelectedObjectsmergeToolStripMenuItem, exportSelectedObjectsmergeWithAnimationClipToolStripMenuItem });
|
||||
modelToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exportAllObjectssplitToolStripMenuItem1, exportSelectedObjectsToolStripMenuItem, exportSelectedObjectsWithAnimationClipToolStripMenuItem, toolStripSeparator1, exportSelectedObjectsmergeToolStripMenuItem, exportSelectedObjectsmergeWithAnimationClipToolStripMenuItem, toolStripSeparator9, exportSelectedNodessplitToolStripMenuItem, exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem });
|
||||
modelToolStripMenuItem.Name = "modelToolStripMenuItem";
|
||||
modelToolStripMenuItem.Size = new System.Drawing.Size(53, 20);
|
||||
modelToolStripMenuItem.Text = "Model";
|
||||
@@ -1226,6 +1229,25 @@ namespace AssetStudioGUI
|
||||
showOriginalFileToolStripMenuItem.Visible = false;
|
||||
showOriginalFileToolStripMenuItem.Click += showOriginalFileToolStripMenuItem_Click;
|
||||
//
|
||||
// toolStripSeparator9
|
||||
//
|
||||
toolStripSeparator9.Name = "toolStripSeparator9";
|
||||
toolStripSeparator9.Size = new System.Drawing.Size(379, 6);
|
||||
//
|
||||
// exportSelectedNodessplitToolStripMenuItem
|
||||
//
|
||||
exportSelectedNodessplitToolStripMenuItem.Name = "exportSelectedNodessplitToolStripMenuItem";
|
||||
exportSelectedNodessplitToolStripMenuItem.Size = new System.Drawing.Size(382, 22);
|
||||
exportSelectedNodessplitToolStripMenuItem.Text = "Export selected nodes (split)";
|
||||
exportSelectedNodessplitToolStripMenuItem.Click += exportSelectedNodessplitToolStripMenuItem_Click;
|
||||
//
|
||||
// exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem
|
||||
//
|
||||
exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem.Name = "exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem";
|
||||
exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem.Size = new System.Drawing.Size(382, 22);
|
||||
exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem.Text = "Export selected nodes (split) + selected AnimationClips";
|
||||
exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem.Click += exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem_Click;
|
||||
//
|
||||
// AssetStudioGUIForm
|
||||
//
|
||||
AllowDrop = true;
|
||||
@@ -1400,6 +1422,9 @@ namespace AssetStudioGUI
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
||||
private System.Windows.Forms.ToolStripMenuItem buildMapToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem assetBrowserToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator9;
|
||||
private System.Windows.Forms.ToolStripMenuItem exportSelectedNodessplitToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1578,6 +1578,41 @@ namespace AssetStudioGUI
|
||||
}
|
||||
}
|
||||
|
||||
private void exportSelectedNodessplitToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
ExportNodes(false);
|
||||
}
|
||||
|
||||
private void exportSelectedNodessplitSelectedAnimationClipsToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
ExportNodes(true);
|
||||
}
|
||||
|
||||
private void ExportNodes(bool animation)
|
||||
{
|
||||
if (sceneTreeView.Nodes.Count > 0)
|
||||
{
|
||||
var saveFolderDialog = new OpenFolderDialog();
|
||||
saveFolderDialog.InitialFolder = saveDirectoryBackup;
|
||||
if (saveFolderDialog.ShowDialog(this) == DialogResult.OK)
|
||||
{
|
||||
saveDirectoryBackup = saveFolderDialog.Folder;
|
||||
var exportPath = Path.Combine(saveFolderDialog.Folder, "GameObject") + Path.DirectorySeparatorChar;
|
||||
var roots = sceneTreeView.Nodes.Cast<TreeNode>().Where(x => x.Level == 0 && x.Checked).ToList();
|
||||
List<AssetItem> animationList = null;
|
||||
if (animation)
|
||||
{
|
||||
animationList = GetSelectedAssets().Where(x => x.Type == ClassIDType.AnimationClip).ToList();
|
||||
if (animationList.Count == 0)
|
||||
{
|
||||
animationList = null;
|
||||
}
|
||||
}
|
||||
ExportNodesWithAnimationClip(exportPath, roots, animationList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void goToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
||||
|
||||
@@ -850,6 +850,45 @@ namespace AssetStudioGUI
|
||||
});
|
||||
}
|
||||
|
||||
public static void ExportNodesWithAnimationClip(string exportPath, List<TreeNode> nodes, List<AssetItem> animationList = null)
|
||||
{
|
||||
ThreadPool.QueueUserWorkItem(state =>
|
||||
{
|
||||
int i = 0;
|
||||
Progress.Reset();
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
var name = node.Text;
|
||||
StatusStripUpdate($"Exporting {name}");
|
||||
var gameObjects = new List<GameObject>();
|
||||
GetSelectedParentNode(node.Nodes, gameObjects);
|
||||
if (gameObjects.Count > 0)
|
||||
{
|
||||
var subExportPath = exportPath + Path.Combine(node.Text, FixFileName(node.Text) + ".fbx");
|
||||
try
|
||||
{
|
||||
ExportGameObjectMerge(gameObjects, subExportPath, animationList);
|
||||
Progress.Report(++i, nodes.Count);
|
||||
StatusStripUpdate($"Finished exporting {name}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"Export Model:{name} error\r\n{ex.Message}\r\n{ex.StackTrace}");
|
||||
StatusStripUpdate("Error in export");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusStripUpdate("Empty node selected for export.");
|
||||
}
|
||||
}
|
||||
if (Properties.Settings.Default.openAfterExport)
|
||||
{
|
||||
OpenFolderInExplorer(exportPath);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void GetSelectedParentNode(TreeNodeCollection nodes, List<GameObject> gameObjects)
|
||||
{
|
||||
foreach (TreeNode i in nodes)
|
||||
|
||||
Reference in New Issue
Block a user