Editor/Pipe/ArchPipeExtentProviders.cs

Two editor extent provider implementations for architecture pipes and pipe brackets. Each measures the spatial footprint of a part by building an ArchExtent from resolved shape points or bracket outline and then grows it by a radius/width.

File Access
namespace Sunless.Architecture;

public sealed class ArchPipeExtentProvider : IArchExtentProvider
{
	public ArchKind Kind => ArchKind.Pipe;

	public ArchExtent Measure( object payload, ArchExtentContext context )
	{
		if ( payload is not ArchPipePart run )
		{
			return new ArchExtent();
		}

		var extent = new ArchExtent();

		foreach ( var point in ArchPipeShape.Resolve( context.Plan, run ).Path() )
		{
			extent.Add( point );
		}

		return extent.Grown( MathF.Max( 2f, run.Radius ) );
	}
}

public sealed class ArchBracketExtentProvider : IArchExtentProvider
{
	public ArchKind Kind => ArchKind.Bracket;

	public ArchExtent Measure( object payload, ArchExtentContext context )
	{
		if ( payload is not ArchPipeBracketPart bracket )
		{
			return new ArchExtent();
		}

		var extent = new ArchExtent();

		foreach ( var corner in bracket.Outline() )
		{
			extent.Add( corner, bracket.BaseHeight, bracket.TopHeight );
		}

		return extent.Grown( MathF.Max( 2f, bracket.MemberWidth ) );
	}
}