Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b81d13b582 | ||
|
|
04eb3cb640 | ||
|
|
0ac75a088a | ||
|
|
cd652a72a1 | ||
|
|
828ff30dbf | ||
|
|
f452fe8a71 | ||
|
|
15e29a3b8a |
@@ -1,5 +1,13 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v0.12.14
|
||||||
|
|
||||||
|
- 修复 v38 文件读取的小 bug
|
||||||
|
|
||||||
|
## v0.12.13
|
||||||
|
|
||||||
|
- 导出文件名增加额外的随机字符串
|
||||||
|
|
||||||
## v0.12.12
|
## v0.12.12
|
||||||
|
|
||||||
- 修复 2.1 版本遗漏的 SkinnedMeshAttachment 附件渲染
|
- 修复 2.1 版本遗漏的 SkinnedMeshAttachment 附件渲染
|
||||||
|
|||||||
@@ -586,7 +586,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
|
|||||||
["compress"] = reader.ReadBoolean(),
|
["compress"] = reader.ReadBoolean(),
|
||||||
["stretch"] = reader.ReadBoolean(),
|
["stretch"] = reader.ReadBoolean(),
|
||||||
};
|
};
|
||||||
if (frameCount > 1) ReadCurve(o);
|
if (frameIdx < frameCount - 1) ReadCurve(o);
|
||||||
frames.Add(o);
|
frames.Add(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -613,7 +613,7 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
|
|||||||
["scaleMix"] = reader.ReadFloat(),
|
["scaleMix"] = reader.ReadFloat(),
|
||||||
["shearMix"] = reader.ReadFloat(),
|
["shearMix"] = reader.ReadFloat(),
|
||||||
};
|
};
|
||||||
if (frameCount > 1) ReadCurve(o);
|
if (frameIdx < frameCount - 1) ReadCurve(o);
|
||||||
frames.Add(o);
|
frames.Add(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1069,14 +1069,14 @@ namespace SpineViewer.Spine.Implementations.SkeletonConverter
|
|||||||
{
|
{
|
||||||
["time"] = reader.ReadFloat(),
|
["time"] = reader.ReadFloat(),
|
||||||
};
|
};
|
||||||
|
ReadCurve(frame, 1);
|
||||||
|
frame = o;
|
||||||
end = reader.ReadVarInt();
|
end = reader.ReadVarInt();
|
||||||
if (end > 0)
|
if (end > 0)
|
||||||
{
|
{
|
||||||
frame["offset"] = reader.ReadVarInt();
|
frame["offset"] = reader.ReadVarInt();
|
||||||
frame["vertices"] = ReadFloatArray(end);
|
frame["vertices"] = ReadFloatArray(end);
|
||||||
}
|
}
|
||||||
ReadCurve(frame, 1);
|
|
||||||
frame = o;
|
|
||||||
frames.Add(frame);
|
frames.Add(frame);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
var noteSuffix = FileNameNoteSuffix;
|
var noteSuffix = FileNameNoteSuffix;
|
||||||
if (!string.IsNullOrWhiteSpace(noteSuffix)) noteSuffix = $"_{noteSuffix}";
|
if (!string.IsNullOrWhiteSpace(noteSuffix)) noteSuffix = $"_{noteSuffix}";
|
||||||
|
|
||||||
var filename = $"ffmpeg_{timestamp}_{FPS:f0}{noteSuffix}{Suffix}";
|
var filename = $"ffmpeg_{timestamp}_{Guid.NewGuid().ToString()[..6]}_{FPS:f0}{noteSuffix}{Suffix}";
|
||||||
|
|
||||||
// 导出单个时必定提供输出文件夹
|
// 导出单个时必定提供输出文件夹
|
||||||
var savePath = Path.Combine(OutputDir, filename);
|
var savePath = Path.Combine(OutputDir, filename);
|
||||||
@@ -86,7 +86,7 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
{
|
{
|
||||||
if (worker?.CancellationPending == true) break; // 取消的日志在 GetFrames 里输出
|
if (worker?.CancellationPending == true) break; // 取消的日志在 GetFrames 里输出
|
||||||
|
|
||||||
var filename = $"{spine.Name}_{timestamp}_{FPS:f0}{noteSuffix}{Suffix}";
|
var filename = $"{spine.Name}_{timestamp}_{spine.ID[..6]}_{FPS:f0}{noteSuffix}{Suffix}";
|
||||||
|
|
||||||
// 如果提供了输出文件夹, 则全部导出到输出文件夹, 否则导出到各自的文件夹下
|
// 如果提供了输出文件夹, 则全部导出到输出文件夹, 否则导出到各自的文件夹下
|
||||||
var savePath = Path.Combine(OutputDir ?? spine.AssetsDir, filename);
|
var savePath = Path.Combine(OutputDir ?? spine.AssetsDir, filename);
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
protected override void ExportSingle(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
|
protected override void ExportSingle(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
|
||||||
{
|
{
|
||||||
// 导出单个时必定提供输出文件夹
|
// 导出单个时必定提供输出文件夹
|
||||||
var filename = $"frame_{timestamp}{ImageFormat.GetSuffix()}";
|
var filename = $"frame_{timestamp}_{Guid.NewGuid().ToString()[..6]}{ImageFormat.GetSuffix()}";
|
||||||
var savePath = Path.Combine(OutputDir, filename);
|
var savePath = Path.Combine(OutputDir, filename);
|
||||||
|
|
||||||
worker?.ReportProgress(0, $"{Properties.Resources.process} 0/1");
|
worker?.ReportProgress(0, $"{Properties.Resources.process} 0/1");
|
||||||
@@ -78,7 +78,7 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
var spine = spinesToRender[i];
|
var spine = spinesToRender[i];
|
||||||
|
|
||||||
// 逐个导出时如果提供了输出文件夹, 则全部导出到输出文件夹, 否则输出到各自的文件夹
|
// 逐个导出时如果提供了输出文件夹, 则全部导出到输出文件夹, 否则输出到各自的文件夹
|
||||||
var filename = $"{spine.Name}_{timestamp}{ImageFormat.GetSuffix()}";
|
var filename = $"{spine.Name}_{timestamp}_{spine.ID[..6]}{ImageFormat.GetSuffix()}";
|
||||||
var savePath = Path.Combine(OutputDir ?? spine.AssetsDir, filename);
|
var savePath = Path.Combine(OutputDir ?? spine.AssetsDir, filename);
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -22,14 +22,16 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
|
|
||||||
protected override void ExportSingle(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
|
protected override void ExportSingle(SpineObject[] spinesToRender, BackgroundWorker? worker = null)
|
||||||
{
|
{
|
||||||
|
var uniqueSuffix = Guid.NewGuid().ToString()[..6];
|
||||||
|
|
||||||
// 导出单个时必定提供输出文件夹,
|
// 导出单个时必定提供输出文件夹,
|
||||||
var saveDir = Path.Combine(OutputDir, $"frames_{timestamp}_{FPS:f0}");
|
var saveDir = Path.Combine(OutputDir, $"frames_{timestamp}_{uniqueSuffix}_{FPS:f0}");
|
||||||
Directory.CreateDirectory(saveDir);
|
Directory.CreateDirectory(saveDir);
|
||||||
|
|
||||||
int frameIdx = 0;
|
int frameIdx = 0;
|
||||||
foreach (var frame in GetFrames(spinesToRender, worker))
|
foreach (var frame in GetFrames(spinesToRender, worker))
|
||||||
{
|
{
|
||||||
var filename = $"frames_{timestamp}_{FPS:f0}_{frameIdx:d6}{Suffix}";
|
var filename = $"frames_{timestamp}_{uniqueSuffix}_{FPS:f0}_{frameIdx:d6}{Suffix}";
|
||||||
var savePath = Path.Combine(saveDir, filename);
|
var savePath = Path.Combine(saveDir, filename);
|
||||||
|
|
||||||
try
|
try
|
||||||
@@ -56,14 +58,14 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
if (worker?.CancellationPending == true) break; // 取消的日志在 GetFrames 里输出
|
if (worker?.CancellationPending == true) break; // 取消的日志在 GetFrames 里输出
|
||||||
|
|
||||||
// 如果提供了输出文件夹, 则全部导出到输出文件夹, 否则导出到各自的文件夹下
|
// 如果提供了输出文件夹, 则全部导出到输出文件夹, 否则导出到各自的文件夹下
|
||||||
var subDir = $"{spine.Name}_{timestamp}_{FPS:f0}";
|
var subDir = $"{spine.Name}_{timestamp}_{spine.ID[..6]}_{FPS:f0}";
|
||||||
var saveDir = Path.Combine(OutputDir ?? spine.AssetsDir, subDir);
|
var saveDir = Path.Combine(OutputDir ?? spine.AssetsDir, subDir);
|
||||||
Directory.CreateDirectory(saveDir);
|
Directory.CreateDirectory(saveDir);
|
||||||
|
|
||||||
int frameIdx = 0;
|
int frameIdx = 0;
|
||||||
foreach (var frame in GetFrames(spine, worker))
|
foreach (var frame in GetFrames(spine, worker))
|
||||||
{
|
{
|
||||||
var filename = $"{spine.Name}_{timestamp}_{FPS:f0}_{frameIdx:d6}{Suffix}";
|
var filename = $"{spine.Name}_{timestamp}_{spine.ID[..6]}_{FPS:f0}_{frameIdx:d6}{Suffix}";
|
||||||
var savePath = Path.Combine(saveDir, filename);
|
var savePath = Path.Combine(saveDir, filename);
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<TargetFramework>net8.0-windows</TargetFramework>
|
<TargetFramework>net8.0-windows</TargetFramework>
|
||||||
<BaseOutputPath>$(SolutionDir)out</BaseOutputPath>
|
<BaseOutputPath>$(SolutionDir)out</BaseOutputPath>
|
||||||
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
|
||||||
<Version>0.12.12</Version>
|
<Version>0.12.14</Version>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<UseWindowsForms>true</UseWindowsForms>
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
<ApplicationIcon>appicon.ico</ApplicationIcon>
|
<ApplicationIcon>appicon.ico</ApplicationIcon>
|
||||||
|
|||||||
Reference in New Issue
Block a user