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.
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 ) );
}
}