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();
|
exportAnimatorwithselectedAnimationClipMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
goToSceneHierarchyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
showOriginalFileToolStripMenuItem = 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();
|
menuStrip1.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit();
|
||||||
splitContainer1.Panel1.SuspendLayout();
|
splitContainer1.Panel1.SuspendLayout();
|
||||||
@@ -334,7 +337,7 @@ namespace AssetStudioGUI
|
|||||||
//
|
//
|
||||||
// modelToolStripMenuItem
|
// 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.Name = "modelToolStripMenuItem";
|
||||||
modelToolStripMenuItem.Size = new System.Drawing.Size(53, 20);
|
modelToolStripMenuItem.Size = new System.Drawing.Size(53, 20);
|
||||||
modelToolStripMenuItem.Text = "Model";
|
modelToolStripMenuItem.Text = "Model";
|
||||||
@@ -1226,6 +1229,25 @@ namespace AssetStudioGUI
|
|||||||
showOriginalFileToolStripMenuItem.Visible = false;
|
showOriginalFileToolStripMenuItem.Visible = false;
|
||||||
showOriginalFileToolStripMenuItem.Click += showOriginalFileToolStripMenuItem_Click;
|
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
|
// AssetStudioGUIForm
|
||||||
//
|
//
|
||||||
AllowDrop = true;
|
AllowDrop = true;
|
||||||
@@ -1400,6 +1422,9 @@ namespace AssetStudioGUI
|
|||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
private System.Windows.Forms.ToolStripSeparator toolStripSeparator8;
|
||||||
private System.Windows.Forms.ToolStripMenuItem buildMapToolStripMenuItem;
|
private System.Windows.Forms.ToolStripMenuItem buildMapToolStripMenuItem;
|
||||||
private System.Windows.Forms.ToolStripMenuItem assetBrowserToolStripMenuItem;
|
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)
|
private void goToSceneHierarchyToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
var selectasset = (AssetItem)assetListView.Items[assetListView.SelectedIndices[0]];
|
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)
|
public static void GetSelectedParentNode(TreeNodeCollection nodes, List<GameObject> gameObjects)
|
||||||
{
|
{
|
||||||
foreach (TreeNode i in nodes)
|
foreach (TreeNode i in nodes)
|
||||||
|
|||||||
Reference in New Issue
Block a user