Code/MeshSlicer.cs
namespace Sandbox;

public static class MeshSlicer
{
	public static MeshSliceResult Slice( GameObject source, Vector3 worldPosition, Vector3 worldNormal )
	{
		return Slice( source, worldPosition, worldNormal, MeshSliceRegion.Full, null );
	}

	public static MeshSliceResult Slice(
		GameObject source,
		Vector3 worldPosition,
		Vector3 worldNormal,
		MeshSliceRegion region,
		Material crossSectionMaterial = null )
	{
		if ( source is null )
			return null;

		var renderer = source.GetComponent<ModelRenderer>( true );
		if ( renderer is null )
			return null;

		return Slice( renderer, worldPosition, worldNormal, region, crossSectionMaterial );
	}

	public static MeshSliceResult Slice(
		ModelRenderer renderer,
		Vector3 worldPosition,
		Vector3 worldNormal,
		MeshSliceRegion region,
		Material crossSectionMaterial = null )
	{
		return MeshSliceRuntime.Slice( renderer, worldPosition, worldNormal, region, crossSectionMaterial );
	}

	public static GameObject[] SliceAndSpawn(
		GameObject source,
		Vector3 worldPosition,
		Vector3 worldNormal,
		MeshSliceRegion region,
		Material crossSectionMaterial = null,
		bool disableSource = false,
		bool autoCopyPhysics = false )
	{
		var result = Slice( source, worldPosition, worldNormal, region, crossSectionMaterial );
		if ( result is null )
			return null;

		return result.CreateHulls( source, disableSource, autoCopyPhysics );
	}
}