using Microsoft.UI.Xaml.Media;
using XFEEDToolBox.Controls;
namespace XFEEDToolBox;
public partial class App
{
private static async Task<object> RunHologramDetailProbeAsync(string directory)
{
var home=new ShipModelView{Width=680,Height=400};
var refit=new ShipModelView{Width=190,Height=140,ShowPedestal=false,HologramColor=Windows.UI.Color.FromArgb(255,255,128,0)};
var title=new TextBlock{FontSize=22,Margin=new(18),Foreground=new SolidColorBrush(Windows.UI.Color.FromArgb(255,255,128,0))};
var host=new Grid{Width=940,Height=480,Background=new SolidColorBrush(Windows.UI.Color.FromArgb(255,17,29,43))};
host.ColumnDefinitions.Add(new(){Width=new(700)});host.ColumnDefinitions.Add(new(){Width=new(240)});
host.RowDefinitions.Add(new(){Height=new(60)});host.RowDefinitions.Add(new(){Height=new(420)});
Grid.SetColumnSpan(title,2);host.Children.Add(title);Grid.SetRow(home,1);host.Children.Add(home);
Grid.SetRow(refit,1);Grid.SetColumn(refit,1);host.Children.Add(refit);MainWindow.Content=host;
var results=new List<object>();
try
{
foreach(var type in new[]{"anaconda","federation_corvette","cutter","sidewinder"})
{
await Task.WhenAll(home.StopAsync(),refit.StopAsync());home.ShipType=refit.ShipType=type;title.Text=Core.Localization.ChineseNames.Ship(type)+" · 主页 / 改装预览";
var deadline=DateTime.UtcNow.AddSeconds(20);
while((!home.IsRendering||home.Frames<2||!refit.IsRendering||refit.Frames<2)&&DateTime.UtcNow<deadline)await Task.Delay(50);
if(!home.IsRendering||!refit.IsRendering||home.FeatureEdges!=refit.FeatureEdges)throw new InvalidOperationException("Both previews must share the same verified ship geometry.");
var large=await home.CaptureFrameAtAsync(12);var small=await refit.CaptureFrameAtAsync(12);
await SaveModelFrameAsync(large,Path.Combine(directory,type+"-home-gpu.png"));
await SaveModelFrameAsync(small,Path.Combine(directory,type+"-refit-gpu.png"));
using(var frozenHome=await home.FreezeForXamlProbeAsync(12))
using(var frozenRefit=await refit.FreezeForXamlProbeAsync(12))
await CaptureRefinementElementAsync(host,Path.Combine(directory,type+"-previews.png"));
results.Add(new{type,home.Triangles,home.FeatureEdges,home.ModelHash,home=MeasureHologramFrame(large),refit=MeasureHologramFrame(small),home.RenderError});
}
}
finally{await Task.WhenAll(home.StopAsync(),refit.StopAsync());}
return new{ships=results,fixedPoseSeconds=12,sharedGeometry=true,gameActionsInvoked=false};
}
}
using Microsoft.UI.Xaml.Media;
using XFEEDToolBox.Controls;
namespace XFEEDToolBox;
public partial class App
{
private static async Task<object> RunHologramDetailProbeAsync(string directory)
{
var home=new ShipModelView{Width=680,Height=400};
var refit=new ShipModelView{Width=190,Height=140,ShowPedestal=false,HologramColor=Windows.UI.Color.FromArgb(255,255,128,0)};
var title=new TextBlock{FontSize=22,Margin=new(18),Foreground=new SolidColorBrush(Windows.UI.Color.FromArgb(255,255,128,0))};
var host=new Grid{Width=940,Height=480,Background=new SolidColorBrush(Windows.UI.Color.FromArgb(255,17,29,43))};
host.ColumnDefinitions.Add(new(){Width=new(700)});host.ColumnDefinitions.Add(new(){Width=new(240)});
host.RowDefinitions.Add(new(){Height=new(60)});host.RowDefinitions.Add(new(){Height=new(420)});
Grid.SetColumnSpan(title,2);host.Children.Add(title);Grid.SetRow(home,1);host.Children.Add(home);
Grid.SetRow(refit,1);Grid.SetColumn(refit,1);host.Children.Add(refit);MainWindow.Content=host;
var results=new List<object>();
try
{
foreach(var type in new[]{"anaconda","federation_corvette","cutter","sidewinder"})
{
await Task.WhenAll(home.StopAsync(),refit.StopAsync());home.ShipType=refit.ShipType=type;title.Text=Core.Localization.ChineseNames.Ship(type)+" · 主页 / 改装预览";
var deadline=DateTime.UtcNow.AddSeconds(20);
while((!home.IsRendering||home.Frames<2||!refit.IsRendering||refit.Frames<2)&&DateTime.UtcNow<deadline)await Task.Delay(50);
if(!home.IsRendering||!refit.IsRendering||home.FeatureEdges!=refit.FeatureEdges)throw new InvalidOperationException("Both previews must share the same verified ship geometry.");
var large=await home.CaptureFrameAtAsync(12);var small=await refit.CaptureFrameAtAsync(12);
await SaveModelFrameAsync(large,Path.Combine(directory,type+"-home-gpu.png"));
await SaveModelFrameAsync(small,Path.Combine(directory,type+"-refit-gpu.png"));
using(var frozenHome=await home.FreezeForXamlProbeAsync(12))
using(var frozenRefit=await refit.FreezeForXamlProbeAsync(12))
await CaptureRefinementElementAsync(host,Path.Combine(directory,type+"-previews.png"));
results.Add(new{type,home.Triangles,home.FeatureEdges,home.ModelHash,home=MeasureHologramFrame(large),refit=MeasureHologramFrame(small),home.RenderError});
}
}
finally{await Task.WhenAll(home.StopAsync(),refit.StopAsync());}
return new{ships=results,fixedPoseSeconds=12,sharedGeometry=true,gameActionsInvoked=false};
}
}