Hi.WinForm and Hi.WpfPlus are being retired, and Hi.Sample.Wpf existed only to demonstrate Hi.WpfPlus -- but ten of its fourteen files never touched WPF at all. Those move here rather than leaving with it: - The three displayees upgrading-to-3.2/breaking-changes.md tells callers to copy -- MachiningProjectDisplayee, IsoCoordinateEntryDisplayee, HeidenhainCoordinateEntryDisplayee. They compose only public API over LocalProjectService, which is the point of shipping them as a starting sample; that doc now points at Hi.Sample/Disp/. - Seven display demos -- Cylindroid, DiscreteRgb, Drawing, Pick1, Pick2, Pickable, Satellite. Their only WPF coupling was the closing DemoUtil.RunApplication call. DemoUtil is rewritten for a project with no canvas. HiAPI ships none any more, so a sample cannot end by opening a window; Present() initializes the app, reports the displayee's type and bounding box, and shuts down, which makes the samples runnable and checkable headlessly and puts the handover where it actually is -- the application assigns the composed IDisplayee to its own canvas' DispEngine. The four files that genuinely need WPF (DemoStl, the old DemoUtil, and the two Machining demos) stay behind and retire with Hi.Sample.Wpf. Each moved file's own [!code-csharp] doc-comment path was repointed from ~/../Hi.Sample.Wpf/Disp/ to ~/../Hi.Sample/Disp/. Builds clean at x64: 0 warnings, 0 errors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
46 lines
1.5 KiB
C#
46 lines
1.5 KiB
C#
using Hi.Disp;
|
|
using Hi.Geom;
|
|
using Hi.HiNcKits;
|
|
using Microsoft.Extensions.Logging;
|
|
using System;
|
|
|
|
namespace Sample.Disp;
|
|
|
|
/// <summary>
|
|
/// Runs a display sample to the point where its <see cref="IDisplayee"/> 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.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// ### Source Code
|
|
/// [!code-csharp[SampleCode](~/../Hi.Sample/Disp/DemoUtil.cs)]
|
|
/// </remarks>
|
|
public static class DemoUtil
|
|
{
|
|
/// <summary>
|
|
/// Initializes the application, reports the displayee's extent, and shuts down again —
|
|
/// the headless equivalent of opening a window on it.
|
|
/// </summary>
|
|
/// <param name="title">A name for the sample, used in the console output.</param>
|
|
/// <param name="displayee">The object a rendering canvas would display.</param>
|
|
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(box);
|
|
Console.WriteLine($"{title}: {displayee.GetType().Name} bounding {box}");
|
|
Console.WriteLine("Assign it to your canvas' DispEngine.Displayee to see it.");
|
|
}
|
|
finally
|
|
{
|
|
LocalApp.AppEnd();
|
|
}
|
|
}
|
|
}
|