refactor(engine): align namespaces with directory layout under OpenNest.Engine

All 132 OpenNest.Engine source files now declare namespaces matching
their nested directories: Jobs/, Jobs/Placement/, Jobs/Adapters/,
Fill/, RectanglePacking/, CirclePacking/, and engine-root types moved
from 'OpenNest' to 'OpenNest.Engine'. RootNamespace updated accordingly.
Consumers (Api, Console, Mcp, Benchmark, Training, desktop app, tests)
gained the explicit usings the move requires; CLAUDE.md updated.
This commit is contained in:
aj
2026-09-21 13:18:34 -04:00
parent fd3375cde6
commit 451841401a
114 changed files with 142 additions and 69 deletions
+3 -3
View File
@@ -51,8 +51,8 @@ Nesting algorithms provide both a legacy single-plate API and a whole-job API. T
- **Fill/** (`namespace OpenNest.Engine.Fill`): Fill algorithms — `FillLinear` (grid-based), `FillExtents` (extents-based pair tiling), `PairFiller` (interlocking pairs), `ShrinkFiller`, `RemnantFiller`/`RemnantFinder`, `Compactor` (post-fill gravity compaction), `FillScore` (lexicographic comparison: count > utilization > compactness), `Pattern`/`PatternTiler`, `PartBoundary`, `RotationAnalysis`, `AngleCandidateBuilder`, `BestCombination`, `AccumulatingProgress`.
- **Strategies/** (`namespace OpenNest.Engine.Strategies`): Pluggable fill strategy layer — `IFillStrategy` interface, `FillContext`, `FillStrategyRegistry` (auto-discovers strategies via reflection, supports plugin DLLs), `FillHelpers`. Built-in strategies: `LinearFillStrategy`, `PairsFillStrategy`, `RectBestFitStrategy`, `ExtentsFillStrategy`.
- **BestFit/** (`namespace OpenNest.Engine.BestFit`): NFP-based pair evaluation pipeline — `BestFitFinder` orchestrates angle sweeps, `PairEvaluator`/`IPairEvaluator` scores part pairs, `RotationSlideStrategy`/`ISlideComputer` computes slide distances. `BestFitCache` and `BestFitFilter` optimize repeated lookups.
- **RectanglePacking/** (`namespace OpenNest.RectanglePacking`): `FillBestFit` (single-item fill, tries horizontal and vertical orientations), `PackBottomLeft` (multi-item bin packing, sorts by area descending). Both operate on `Bin`/`Item` abstractions.
- **CirclePacking/** (`namespace OpenNest.CirclePacking`): Alternative packing for circular parts.
- **RectanglePacking/** (`namespace OpenNest.Engine.RectanglePacking`): `FillBestFit` (single-item fill, tries horizontal and vertical orientations), `PackBottomLeft` (multi-item bin packing, sorts by area descending). Both operate on `Bin`/`Item` abstractions.
- **CirclePacking/** (`namespace OpenNest.Engine.CirclePacking`): Alternative packing for circular parts.
- **ML/** (`namespace OpenNest.Engine.ML`): `AnglePredictor` (ONNX model for predicting good rotation angles), `FeatureExtractor` (part geometry features), `BruteForceRunner` (full angle sweep for training data).
- `NestItem`: Input to the engine — wraps a `Drawing` with quantity, priority, and rotation constraints.
- `NestProgress`: Progress reporting model with `NestPhase` enum for UI feedback.
@@ -129,7 +129,7 @@ Always keep `README.md` and `CLAUDE.md` up to date when making changes that affe
## Key Patterns
- OpenNest.Core uses multiple namespaces: `OpenNest` (root domain), `OpenNest.CNC`, `OpenNest.Geometry`, `OpenNest.Converters`, `OpenNest.Math`, `OpenNest.Collections`.
- OpenNest.Engine uses sub-namespaces: `OpenNest.Engine.Fill` (fill algorithms), `OpenNest.Engine.Strategies` (pluggable strategy layer), `OpenNest.Engine.BestFit`, `OpenNest.Engine.ML`, `OpenNest.Engine.RapidPlanning`, `OpenNest.Engine.Sequencing`.
- OpenNest.Engine uses sub-namespaces: `OpenNest.Engine.Fill` (fill algorithms), `OpenNest.Engine.Strategies` (pluggable strategy layer), `OpenNest.Engine.BestFit`, `OpenNest.Engine.Jobs` (whole-job API, with `.Placement` and `.Adapters`), `OpenNest.Engine.ML`, `OpenNest.Engine.RapidPlanning`, `OpenNest.Engine.Sequencing`, `OpenNest.Engine.RectanglePacking`, `OpenNest.Engine.CirclePacking`. All Engine types live in namespaces matching their directory under `OpenNest.Engine/` (project files use `namespace X;` file-scoped or block style); consumers reference them via explicit `using OpenNest.Engine[.Sub];` directives.
- `ObservableList<T>` provides ItemAdded/ItemRemoved/ItemChanged events used for automatic quantity tracking between plates and drawings.
- Angles throughout the codebase are in **radians** (use `Angle.ToRadians()`/`Angle.ToDegrees()` for conversion).
- `Tolerance.Epsilon` is used for floating-point comparisons across geometry operations.
+1
View File
@@ -6,6 +6,7 @@ using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using OpenNest.IO;
using OpenNest.Engine.Jobs;
namespace OpenNest.Api;
+3
View File
@@ -6,6 +6,9 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using OpenNest.IO;
using OpenNest.Engine;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Api;
+2
View File
@@ -2,6 +2,8 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Benchmark
{
+2
View File
@@ -5,6 +5,8 @@ using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Benchmark
{
+1
View File
@@ -5,6 +5,7 @@ using System.Linq;
using OpenNest;
using OpenNest.Benchmark;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
return BenchmarkConsole.Run(args);
+1
View File
@@ -10,6 +10,7 @@ using OpenNest;
using OpenNest.Geometry;
using OpenNest.IO;
using OpenNest.IO.Bending;
using OpenNest.Engine;
return NestConsole.Run(args);
@@ -1,4 +1,5 @@
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,5 +1,6 @@
using OpenNest.Geometry;
using Xunit;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -2,6 +2,7 @@ using System.Globalization;
using OpenNest.CNC;
using OpenNest.Geometry;
using Xunit;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,5 +1,7 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,5 +1,7 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,5 +1,7 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,6 +1,7 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using Xunit;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,4 +1,6 @@
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,6 +1,8 @@
using OpenNest.CNC;
using OpenNest.Engine.Fill;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,5 +1,6 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,4 +1,5 @@
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,5 +1,6 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,4 +1,5 @@
using Xunit;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,6 +1,9 @@
using OpenNest.CNC;
using OpenNest.Geometry;
using Xunit;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
using OpenNest.Engine.Jobs.Placement;
namespace OpenNest.Engine.Tests.Jobs;
@@ -1,4 +1,5 @@
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
namespace OpenNest.Engine.Tests.Jobs;
+1 -1
View File
@@ -2,7 +2,7 @@
using System.Linq;
using OpenNest.Geometry;
namespace OpenNest.CirclePacking
namespace OpenNest.Engine.CirclePacking
{
internal class Bin : Box
{
+1 -1
View File
@@ -2,7 +2,7 @@
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.CirclePacking
namespace OpenNest.Engine.CirclePacking
{
internal class FillEndEven : FillEngine
{
+1 -1
View File
@@ -2,7 +2,7 @@
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.CirclePacking
namespace OpenNest.Engine.CirclePacking
{
internal class FillEndOdd : FillEngine
{
+1 -1
View File
@@ -1,4 +1,4 @@
namespace OpenNest.CirclePacking
namespace OpenNest.Engine.CirclePacking
{
internal abstract class FillEngine
{
+1 -1
View File
@@ -1,6 +1,6 @@
using OpenNest.Geometry;
namespace OpenNest.CirclePacking
namespace OpenNest.Engine.CirclePacking
{
internal class Item : Circle
{
+2 -2
View File
@@ -9,9 +9,9 @@ using OpenNest.Engine.Fill;
using OpenNest.Engine.Strategies;
using OpenNest.Geometry;
using OpenNest.Math;
using OpenNest.RectanglePacking;
using OpenNest.Engine.RectanglePacking;
namespace OpenNest
namespace OpenNest.Engine
{
public class DefaultNestEngine : NestEngineBase
{
+1 -1
View File
@@ -1,6 +1,6 @@
using OpenNest.Math;
namespace OpenNest
namespace OpenNest.Engine.Fill
{
internal record CombinationResult(bool Found, int Count1, int Count2);
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using OpenNest.Geometry;
using OpenNest.RectanglePacking;
using OpenNest.Engine.RectanglePacking;
namespace OpenNest.Engine.Fill
{
+1 -1
View File
@@ -5,7 +5,7 @@ using OpenNest.Engine.Fill;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest
namespace OpenNest.Engine
{
/// <summary>
/// Optimizes for the largest top-side horizontal drop.
@@ -1,7 +1,7 @@
using System;
using OpenNest.CNC;
namespace OpenNest;
namespace OpenNest.Engine.Jobs.Adapters;
/// <summary>Explicit-ID input mapping and exact supported-geometry reconstruction. Never retains caller objects.</summary>
public static class DrawingJobMapper
@@ -2,7 +2,7 @@ using System;
using System.Collections.Generic;
using System.Threading;
namespace OpenNest;
namespace OpenNest.Engine.Jobs.Adapters;
/// <summary>
/// A fresh private legacy plate/drawing/item graph for each call. Only returned poses cross the boundary;
@@ -4,7 +4,7 @@ using System.Collections.ObjectModel;
using System.Linq;
using OpenNest.Geometry;
namespace OpenNest;
namespace OpenNest.Engine.Jobs.Adapters;
/// <summary>A detached mutable domain nest plus explicit requirement identity (never inferred from names).</summary>
public sealed class MaterializedNestResult
@@ -1,6 +1,6 @@
using System;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>
/// Bridges legacy <see cref="IProgress{NestProgress}"/> reporting into job progress while a candidate
@@ -1,7 +1,7 @@
using System;
using System.Threading;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>
/// Adapts one fixed IPlateNester strategy to the whole-job INestingEngine contract, so it can compete
+1 -1
View File
@@ -1,7 +1,7 @@
using System;
using System.Threading;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Synchronous whole-job solver. Cancellation throws, rather than returning partial success.</summary>
public interface INestingEngine
+1 -1
View File
@@ -1,7 +1,7 @@
using System;
using System.Threading;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Places on one sheet only. Must not change stock, demand, or caller-owned domain objects.</summary>
public interface IPlateNester
+1 -1
View File
@@ -2,7 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>One material/unit system's requirements. Collections are copied; all nested values are immutable.</summary>
public sealed class NestJob
@@ -2,7 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Ranks independent plate trials: priority fulfillment, sheet area, placement envelope, then input order.</summary>
public sealed class NestJobCandidateComparer
+1 -1
View File
@@ -1,6 +1,6 @@
using System;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Immutable per-job options; selection never changes the legacy global registry.</summary>
public sealed class NestJobOptions
+1 -1
View File
@@ -1,6 +1,6 @@
using System;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>An immutable requirement, independent of drawing names, UI state, and drawing quantity counters.</summary>
public sealed class NestJobPart
@@ -4,7 +4,9 @@ using OpenNest.Converters;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest;
using OpenNest.Engine.Jobs.Adapters;
using OpenNest.Engine.Jobs.Placement;
namespace OpenNest.Engine.Jobs;
/// <summary>Validates a trial against immutable job geometry before the runner commits accounting.</summary>
internal static class NestJobPlacementValidator
+1 -1
View File
@@ -1,4 +1,4 @@
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
public enum NestJobStage
{
+1 -1
View File
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
public enum NestJobStatus
{
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>
/// Physical-sheet allocation. Every available stock entry is tried independently and only the selected
+1 -1
View File
@@ -2,7 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Basic input and candidate accounting checks, NOT a geometry/clearance safety gate.</summary>
public static class NestJobValidator
+1 -1
View File
@@ -1,7 +1,7 @@
using System;
using OpenNest.Geometry;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Immutable stock settings. Size and spacing are copied value types, not caller-owned settings.</summary>
public sealed class NestPlateStock
+1 -1
View File
@@ -1,6 +1,6 @@
using System;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Display metadata plus a fresh-instance factory for one registered whole-job engine.</summary>
public class NestingEngineInfo
@@ -5,7 +5,7 @@ using System.IO;
using System.Linq;
using System.Reflection;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>
/// Registry of whole-job INestingEngine implementations, parallel to NestEngineRegistry (which is for
+1 -1
View File
@@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenNest.CNC;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Exact immutable CNC motion values. Rapid moves retain contour/hole boundaries; arcs are not tessellated.</summary>
public sealed record PartGeometryMotion(
@@ -3,7 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace OpenNest;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Jobs.Placement;
/// <summary>
/// Migrated built-in placement strategy for the whole-job runner. Reuses <see cref="DefaultNestEngine"/>
@@ -5,7 +5,8 @@ using System.Threading;
using OpenNest.Engine.Fill;
using OpenNest.Geometry;
namespace OpenNest;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Jobs.Placement;
/// <summary>Constrained-order linear fills in conservative rectangular free regions.
/// Regions are only search hints; every accepted pose passes the job geometry validator.</summary>
@@ -2,7 +2,8 @@ using System;
using System.Collections.Generic;
using System.Threading;
namespace OpenNest;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.Engine.Jobs.Placement;
/// <summary>
/// Migrated built-in placement strategy for the whole-job runner. Reuses <see cref="StripNestEngine"/>
+1 -1
View File
@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Owned candidate poses only; not committed fulfillment or inventory accounting.</summary>
public sealed class PlateCandidate
+3 -1
View File
@@ -1,6 +1,8 @@
using System;
namespace OpenNest;
using OpenNest.Engine.Jobs.Adapters;
using OpenNest.Engine.Jobs.Placement;
namespace OpenNest.Engine.Jobs;
/// <summary>
/// Instance-scoped strategy resolution for the whole-job runner. Default and Strip resolve to the
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
/// <summary>Read-only stock settings and remaining requirements for a single candidate trial.</summary>
public sealed class PlatePlacementRequest
+1 -1
View File
@@ -1,6 +1,6 @@
using System;
namespace OpenNest;
namespace OpenNest.Engine.Jobs;
public enum RotationPolicyKind
{
@@ -3,7 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace OpenNest;
using OpenNest.Engine.Jobs.Adapters;
using OpenNest.Engine.Jobs.Placement;
namespace OpenNest.Engine.Jobs;
/// <summary>
/// Caller-stock-only allocation followed by bounded adjacent-sheet repacking. All replacements
+1 -1
View File
@@ -6,7 +6,7 @@ using OpenNest.Engine.Fill;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest
namespace OpenNest.Engine
{
public enum PartClass
{
+1 -1
View File
@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace OpenNest
namespace OpenNest.Engine
{
public class MultiPlateNestOptions
{
+1 -1
View File
@@ -1,4 +1,4 @@
namespace OpenNest
namespace OpenNest.Engine
{
public enum NestDirection
{
+1 -1
View File
@@ -10,7 +10,7 @@ using OpenNest.Engine.Strategies;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest
namespace OpenNest.Engine
{
public abstract class NestEngineBase
{
+1 -1
View File
@@ -1,6 +1,6 @@
using System;
namespace OpenNest
namespace OpenNest.Engine
{
public class NestEngineInfo
{
+1 -1
View File
@@ -5,7 +5,7 @@ using System.IO;
using System.Linq;
using System.Reflection;
namespace OpenNest
namespace OpenNest.Engine
{
public static class NestEngineRegistry
{
+1 -1
View File
@@ -1,4 +1,4 @@
namespace OpenNest
namespace OpenNest.Engine
{
public class NestItem
{
+1 -1
View File
@@ -5,7 +5,7 @@ using System.ComponentModel;
using System.Reflection;
using OpenNest.Geometry;
namespace OpenNest
namespace OpenNest.Engine
{
[AttributeUsage(AttributeTargets.Field)]
internal class ShortNameAttribute(string name) : Attribute
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>OpenNest</RootNamespace>
<RootNamespace>OpenNest.Engine</RootNamespace>
<AssemblyName>OpenNest.Engine</AssemblyName>
</PropertyGroup>
<ItemGroup>
+1 -1
View File
@@ -1,4 +1,4 @@
namespace OpenNest
namespace OpenNest.Engine
{
public enum PartSortOrder
{
+1 -1
View File
@@ -8,7 +8,7 @@ using OpenNest.Engine.BestFit;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest
namespace OpenNest.Engine
{
public static class PlateOptimizer
{
+1 -1
View File
@@ -2,7 +2,7 @@
using System.Linq;
using OpenNest.Geometry;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class Bin : Box
{
@@ -2,7 +2,7 @@ using System.Collections.Generic;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal static class BinConverter
{
@@ -1,7 +1,8 @@
using System;
using OpenNest.Engine.Fill;
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class FillBestFit : FillEngine
{
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using OpenNest.Geometry;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal abstract class FillEngine
{
@@ -1,7 +1,7 @@
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class FillNoRotation : FillEngine
{
@@ -1,6 +1,6 @@
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class FillSameRotation : FillEngine
{
@@ -1,7 +1,8 @@
using OpenNest.Geometry;
using OpenNest.Engine.Fill;
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class FillSpiral : FillEngine
{
+1 -1
View File
@@ -2,7 +2,7 @@
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class Item : Box
{
@@ -3,7 +3,7 @@ using System.Linq;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class PackBottomLeft : PackEngine
{
@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal abstract class PackEngine
{
@@ -2,7 +2,7 @@
using System.Linq;
using OpenNest.Geometry;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal class FirstFitDecreasing : PackEngine
{
+1 -1
View File
@@ -1,6 +1,6 @@
using OpenNest.Geometry;
namespace OpenNest.RectanglePacking
namespace OpenNest.Engine.RectanglePacking
{
internal static class RectFill
{
@@ -1,5 +1,5 @@
using System.Collections.Generic;
using OpenNest.RectanglePacking;
using OpenNest.Engine.RectanglePacking;
namespace OpenNest.Engine.Strategies
{
+1 -1
View File
@@ -5,7 +5,7 @@ using System.Threading;
using OpenNest.Engine.Fill;
using OpenNest.Geometry;
namespace OpenNest
namespace OpenNest.Engine
{
public class StripNestEngine : NestEngineBase
{
+1 -1
View File
@@ -5,7 +5,7 @@ using OpenNest.Engine.Fill;
using OpenNest.Geometry;
using OpenNest.Math;
namespace OpenNest
namespace OpenNest.Engine
{
/// <summary>
/// Optimizes for the largest right-side vertical drop.
+2
View File
@@ -4,6 +4,8 @@ using CSMath;
using OpenNest.CNC;
using CadLayer = ACadSharp.Tables.Layer;
using CadLine = ACadSharp.Entities.Line;
using OpenNest.Engine.Jobs;
using OpenNest.Engine.Jobs.Adapters;
namespace OpenNest.IO.Tests;
+1
View File
@@ -6,6 +6,7 @@ using System.Threading;
using ModelContextProtocol.Server;
using OpenNest.Engine.Fill;
using OpenNest.Geometry;
using OpenNest.Engine;
namespace OpenNest.Mcp.Tools
{
@@ -6,6 +6,7 @@ using System.Threading.Tasks;
using OpenNest.Api;
using OpenNest.Geometry;
using OpenNest.IO;
using OpenNest.Engine.Jobs;
namespace OpenNest.Tests.Api;
+1
View File
@@ -6,6 +6,7 @@ using OpenNest.Api;
using OpenNest.Converters;
using OpenNest.Geometry;
using OpenNest.IO;
using OpenNest.Engine.Jobs;
namespace OpenNest.Tests.Api;
@@ -1,4 +1,5 @@
using OpenNest.Benchmark;
using OpenNest.Engine.Jobs;
namespace OpenNest.Tests.Benchmark;
@@ -1,5 +1,6 @@
using OpenNest.Benchmark;
using OpenNest.Geometry;
using OpenNest.Engine.Jobs;
namespace OpenNest.Tests.Benchmark;
@@ -2,6 +2,7 @@ using OpenNest.Converters;
using OpenNest.Geometry;
using OpenNest.IO;
using Xunit.Abstractions;
using OpenNest.Engine;
namespace OpenNest.Tests.Engine;
@@ -1,4 +1,5 @@
using OpenNest.Geometry;
using OpenNest.Engine;
namespace OpenNest.Tests.Engine;
@@ -7,6 +7,7 @@ using OpenNest.Geometry;
using OpenNest.IO;
using Xunit;
using Xunit.Abstractions;
using OpenNest.Engine;
namespace OpenNest.Tests.Engine;
@@ -1,3 +1,4 @@
using OpenNest.Engine;
namespace OpenNest.Tests.Engine;
public class NestPhaseExtensionsTests
@@ -1,4 +1,5 @@
using OpenNest.Geometry;
using OpenNest.Engine;
namespace OpenNest.Tests.Engine;
@@ -1,4 +1,5 @@
using OpenNest.Geometry;
using OpenNest.Engine;
namespace OpenNest.Tests.Engine;
@@ -1,4 +1,5 @@
using OpenNest.Engine.Fill;
using OpenNest.Engine;
namespace OpenNest.Tests.Fill;
@@ -1,3 +1,4 @@
using OpenNest.Engine.Fill;
namespace OpenNest.Tests.Fill;
public class BestCombinationTests
@@ -8,6 +8,7 @@ using OpenNest.Geometry;
using OpenNest.Math;
using Xunit;
using Xunit.Abstractions;
using OpenNest.Engine;
namespace OpenNest.Tests.Fill
{

Some files were not shown because too many files have changed in this diff Show More