Skip to main content

optimize_cutting_path

Function optimize_cutting_path 

Source
pub fn optimize_cutting_path<G>(
    solve_result: &SolveResult<f64>,
    geometries: &[G],
    config: &CuttingConfig,
) -> CuttingPathResult
where G: Geometry2DExt<Scalar = f64> + Geometry<Scalar = f64>,
Expand description

Optimizes the cutting path for a nesting solve result.

This is the main entry point for cutting path optimization. It:

  1. Extracts contours from the placed geometries
  2. Builds precedence constraints (holes before exteriors)
  3. Optimizes the cutting sequence (NN + 2-opt)
  4. Selects optimal pierce points
  5. Assembles the final cutting path

§Arguments

  • solve_result - The nesting solve result with placements
  • geometries - The original geometry definitions
  • config - Cutting path optimization parameters

§Returns

A CuttingPathResult with the optimized cutting sequence.

§Example

use u_nesting_cutting::{CuttingConfig, optimize_cutting_path};
use u_nesting::d2::{Geometry2D, Boundary2D, Nester2D};
use u_nesting::core::{Solver, Config};

let geometries = vec![Geometry2D::rectangle("R1", 10.0, 5.0).with_quantity(3)];
let boundary = Boundary2D::rectangle(100.0, 50.0);
let nester = Nester2D::new(Config::default());
let solve_result = nester.solve(&geometries, &boundary).unwrap();

let cutting_config = CuttingConfig::default();
let path = optimize_cutting_path(&solve_result, &geometries, &cutting_config);
println!("Rapid distance: {}", path.total_rapid_distance);