using Hi.Disp;
using Hi.Geom;
using Hi.HiNcKits;
using Microsoft.Extensions.Logging;
using System;
namespace Sample.Disp;
///
/// Runs a display sample to the point where its is ready to be rendered.
/// HiAPI ships no rendering canvas, so the samples in this project stop at the handover: they
/// compose the displayee and report it, and the application hands that same object to a canvas of
/// its own. See the Building Your Own Rendering Canvas guide for the canvas side.
///
///
/// ### Source Code
/// [!code-csharp[SampleCode](~/../Hi.Sample/Disp/DemoUtil.cs)]
///
public static class DemoUtil
{
///
/// Initializes the application, reports the displayee's extent, and shuts down again —
/// the headless equivalent of opening a window on it.
///
/// A name for the sample, used in the console output.
/// The object a rendering canvas would display.
public static void Present(string title, IDisplayee displayee)
{
if (displayee is null) throw new ArgumentNullException(nameof(displayee));
using var loggerFactory = LoggerFactory.Create(b => b.AddConsole());
LocalApp.AppBegin(loggerFactory.CreateLogger("Hi.Sample"));
try
{
Box3d box = new Box3d();
displayee.ExpandToBox3d(ref box);
Console.WriteLine($"{title}: {displayee.GetType().Name} bounding {box}");
Console.WriteLine("Assign it to your canvas' DispEngine.Displayee to see it.");
}
finally
{
LocalApp.AppEnd();
}
}
}