Saltar al contenido principal
← CutOptim Engine APIEngine API · anidado · disponible hoy

API de nesting para corte láser

Sí, existe una API para el nesting de corte láser. Cortar piezas irregulares con un láser es un problema de anidado de forma real: una pieza es un polígono arbitrario, no un rectángulo, y las piezas encajan unas en las cavidades cóncavas de las otras. La CutOptim Engine API lo resuelve sobre HTTP en POST /v1/optimize/nest: tu CAD/CAM, tu ERP o tu software de presupuestos envía los contornos de las piezas y las chapas de stock en JSON y recibe la distribución anidada, la colocación de cada pieza y el número de chapas.

Está disponible hoy. El anidado es una clase de algoritmo distinta del empaquetador de guillotina rectangular — un motor geométrico de colisiones (jagua-rs) que se ejecuta en producción tras POST /v1/optimize/nest —, así que devuelve un anidado de forma real, no un plan de corte rectangular.

Todos los formatos, motores, límites y ejemplos de código para desarrolladores: API de nesting de CutOptim

POST /v1/optimize/nest
{
  "parts": [
    { "name": "bracket",
      "polygon": [[0,0],[300,0],[300,100],[100,100],[100,300],[0,300]],
      "qty": 12, "allowedRotations": "continuous" },
    { "name": "gusset",
      "polygon": [[0,0],[280,0],[140,240]],
      "qty": 8, "allowedRotations": [0,90,180,270] }
  ],
  "stock": [{ "w": 3000, "h": 1500, "qty": 20 }],
  "options": { "minSeparation": 0.3, "edgeClearance": 5 }
}

El nesting no está incluido en la demo pública — ejecuta este ejemplo con una clave de prueba gratuita. Crear una clave de prueba gratuita

  • Disponible hoy en POST /v1/optimize/nest: piezas poligonales arbitrarias (con agujeros), no solo rectángulos.
  • Las zonas de exclusión por chapa mantienen las piezas fuera de un defecto, de la huella de una garra o de una zona preimpresa (stock[].exclusions).
  • Rotación continua o discreta, minSeparation para la separación entre piezas y edgeClearance para el borde de la chapa.
  • Longitud de corte y número de perforaciones por chapa, más chapas y precio por tamaño de chapa (stockUsage): se pueden mezclar varios tamaños de chapa cuando sale más barato.
  • En un trabajo representativo de 272 piezas, el anidado usó 6 chapas donde las mismas piezas por su bounding box necesitan 9: la métrica honesta es el número de chapas, no un porcentaje de densidad.
  • Determinista: una semilla fijada hace que la misma solicitud devuelva el mismo anidado, para presupuestos y auditorías.
  • Validación gratuita: POST /v1/validate/nest comprueba un trabajo sin clave y sin consumir cuota.

Por qué los talleres de láser necesitan anidado de forma real

Un empaquetador rectangular cuenta el bounding box de cada pieza como macizo, de modo que el aire de las muescas dentro de una escuadra en L o de una cartela triangular se desperdicia. El anidado de forma real encaja los contornos reales y recupera ese aire. En un trabajo representativo de 272 piezas, el anidado usó 6 chapas donde las mismas piezas colocadas por su bounding box necesitan 9; la métrica honesta es el número de chapas con las mismas piezas, no un porcentaje de densidad (un bounding box da una densidad mayor para un resultado peor).

Qué envías y qué recibes

Envía cada pieza como un contorno poligonal (con agujeros interiores opcionales) y una cantidad, más las chapas de stock. La respuesta da la colocación de cada copia como una transformación rígida — una rotación en grados y después una traslación x/y —, no un polígono reemitido: gira tu contorno de entrada y suma el desplazamiento para reconstruir la colocación exactamente. También devuelve el número de chapas, la densidad por chapa y global, y las piezas que no cupieron; y para cada chapa, la fila de stock de la que se cortó, la longitud de corte (el contorno que sigue el haz, perfiles y agujeros) y el número de perforaciones, con stockUsage totalizando chapas y precio por tamaño de chapa. Si das varios tamaños de chapa, el anidado los compara — por área de chapa, o por precio con minimizeCost — y puede mezclarlos cuando sale más barato, por ejemplo pasando una última chapa medio vacía a un tamaño menor. Pide include:["svg","dxf"] y la distribución obtenida vuelve como archivo dentro de la respuesta.

Zonas de exclusión y rotación continua

Con el motor de anidado vienen dos cosas que una API rectangular no puede expresar. Las zonas de exclusión por chapa (stock[].exclusions) mantienen todas las piezas fuera de un defecto, de la huella de una garra de sujeción o de una zona preimpresa; una zona de quality 0 es una región vetada. La rotación puede ser continua (cualquier ángulo) o una lista discreta; options.minSeparation fija la separación entre piezas (el ancho del haz) y options.edgeClearance la distancia al borde de la chapa, de modo que ambas pueden ser distintas. La distribución es determinista: fija options.seed y la misma solicitud devuelve el mismo anidado.

Instantáneo para el presupuesto, max para el pedido

POST /v1/optimize/nest responde de forma síncrona con el motor lbf — determinista y dentro de la propia solicitud, lo bastante rápido para presupuestar un trabajo mientras el cliente espera. Cuando el trabajo se libera a la máquina, envía el mismo cuerpo con engine: "max" y consulta GET /v1/jobs/{id}: ejecuta primero lbf y luego dedica un presupuesto de tiempo que tú fijas (options.timeBudgetMs) a buscar una distribución con menos chapas, y nunca devuelve más. La respuesta tiene la misma forma en ambos casos; una chapa con zonas de exclusión sigue siendo atendida por lbf dentro de ese trabajo, con un aviso.

Recurso descargable
Ficha de una página de la API de nesting para corte láser

Un resumen de dos páginas (PDF en inglés): el problema, qué envías y qué recibes, una solicitud y una respuesta, y cómo construir sobre el motor. Listo para imprimir, con un QR que vuelve a esta página.

PDF2 páginasGratis
Descargar el PDF

Preguntas frecuentes

¿Existe una API para el nesting de corte láser?
Sí. El anidado de forma real de polígonos irregulares es el cuarto modo de la CutOptim Engine API, POST /v1/optimize/nest. Envías cada pieza como un contorno poligonal (con agujeros opcionales) más las chapas de stock, y recibes la distribución anidada, la colocación de cada copia y el número de chapas. Es un motor geométrico de colisiones, una clase de algoritmo distinta del empaquetador de guillotina rectangular, y se ejecuta en producción hoy.
¿En qué se diferencia el anidado de forma real del empaquetado rectangular?
Un empaquetador rectangular coloca bounding boxes, así que el aire vacío dentro de una pieza irregular se desperdicia; el anidado de forma real encaja los contornos reales en las cavidades cóncavas de los demás. La métrica comparable entre ambos es el número de chapas con las mismas piezas: en un trabajo representativo de 272 piezas, el anidado usó 6 chapas frente a 9 por bounding box. Un porcentaje de densidad NO es comparable entre los dos, porque un empaquetador de bounding box cuenta el aire de las muescas como macizo y da una densidad mayor para un resultado peor.
¿Puede evitar una zona dañada o la huella de una garra en la chapa?
Sí. Cada chapa de stock puede llevar zonas de exclusión (stock[].exclusions): polígonos de los que el motor mantiene alejadas las piezas. Una zona de quality 0 es una región vetada para todas las piezas, así que puedes anidar alrededor de un defecto, de la huella de una garra de sujeción o de una zona preimpresa. Es una capacidad que la API rectangular no puede expresar.
¿Puedo validar una solicitud gratis mientras integro?
Sí. POST /v1/validate/nest valida el esquema del mismo cuerpo que recibe el endpoint de anidado sin resolverlo — gratis, sin clave de API y sin cuota — para que tu equipo confirme que un payload es correcto mientras construye la integración. La propia Engine API tiene una prueba de 14 días.
¿Devuelve la longitud de corte y el número de perforaciones?
Sí. Cada chapa lleva cutLength — el perímetro sumado de los contornos y los agujeros de sus piezas colocadas, en tu unidad — y pierces, una por contorno cerrado; metrics totaliza ambos. Es la longitud geométrica del contorno: no incluye el corte con línea común, las entradas de corte ni los microuniones, porque el CAM de tu máquina los añade, así que es una base sólida para calcular el tiempo de máquina y el gas, no la trayectoria final de la herramienta.
¿Puede mi sistema de presupuestos cobrar solo la parte usada de una chapa?
La API le da los números; la regla de cobro sigue siendo tuya. Cada chapa lleva usedWidth y usedHeight — el punto más lejano al que llegan sus piezas colocadas desde el origen de la chapa, en tu unidad — y usedArea, su producto (stockUsage lo totaliza por tamaño de chapa). Un corte horizontal es usedHeight × el ancho de la chapa, un corte vertical es usedWidth × el alto de la chapa, un bounding box es usedArea. Además, ambos motores compactan por defecto la chapa menos llena hacia esa esquina, probando subconjuntos de rotación de lo que permite cada pieza y nunca un ángulo nuevo, sin cambiar el número de chapas, el precio ni las piezas colocadas; options.compact: false lo desactiva. Si cobras una franja en lugar del bounding box, options.compactFor: "horizontal" conserva la menor altura usada y "vertical" el menor ancho usado. Cuánto se reduce el área usada depende de las piezas.

Caso de uso de fabricación de chapa metálica (aplicación) · Benchmarks