feat: handle SubProgramCall offsets in BoundingBox and Rotate

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-09 14:47:40 -04:00
parent 09eac96a03
commit bc859aa28c
2 changed files with 51 additions and 1 deletions

View File

@@ -89,6 +89,17 @@ namespace OpenNest.CNC
{
var subpgm = (SubProgramCall)code;
if (subpgm.Offset.X != 0 || subpgm.Offset.Y != 0)
{
var cos = System.Math.Cos(angle);
var sin = System.Math.Sin(angle);
var dx = subpgm.Offset.X - origin.X;
var dy = subpgm.Offset.Y - origin.Y;
subpgm.Offset = new Geometry.Vector(
origin.X + dx * cos - dy * sin,
origin.Y + dx * sin + dy * cos);
}
if (subpgm.Program != null)
subpgm.Program.Rotate(angle, origin);
}
@@ -422,7 +433,10 @@ namespace OpenNest.CNC
case CodeType.SubProgramCall:
{
var subpgm = (SubProgramCall)code;
var box = subpgm.Program.BoundingBox(ref pos);
var subPos = subpgm.Offset.X != 0 || subpgm.Offset.Y != 0
? new Vector(subpgm.Offset.X, subpgm.Offset.Y)
: pos;
var box = subpgm.Program.BoundingBox(ref subPos);
if (box.Left < minX)
minX = box.Left;