From 123606c34bf22a6f3725c5d109fd7958011d19d4 Mon Sep 17 00:00:00 2001 From: Samtanner12 <84330863+Samtanner12@users.noreply.github.com> Date: Wed, 15 Oct 2025 16:13:46 -0400 Subject: [PATCH 1/4] Update open_vector_format.proto Added Cubic and Quadratic Bezier curves for smoother outskin edge calculations leading to a smoother surface finish --- open_vector_format.proto | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/open_vector_format.proto b/open_vector_format.proto index 4c7c6bd..8f5f4aa 100644 --- a/open_vector_format.proto +++ b/open_vector_format.proto @@ -374,6 +374,10 @@ message VectorBlock { ExposurePause exposure_pause = 10; LineSequenceParaAdapt line_sequence_para_adapt = 11; HatchesParaAdapt _hatchParaAdapt = 12; + CubicBezier cubic_bezier = 13; + QuadraticBezier quadratic_bezier = 14; + CubicBezier3D cubic_bezier_3d = 15; + QuadraticBezier3D quadratic_bezier_3d = 16; } //key used in Job/markingParamsMap @@ -588,6 +592,33 @@ message VectorBlock { message HatchesParaAdapt { repeated LineSequenceParaAdapt hatchAsLinesequence = 1; } + + //Quadratic Bézier segments in 2D. + //Each segment is (x0, y0, cx, cy, x1, y1) => 6 floats per segment. + //Pack N segments as: [x0,y0,cx,cy,x1,y1, x0,y0,cx,cy,x1,y1, ...] + message QuadraticBezier { + repeated float segments = 1; + } + + //Cubic Bézier segments in 2D. + //Each segment is (x0, y0, c1x, c1y, c2x, c2y, x1, y1) => 8 floats per segment. + //Pack N segments as: [x0,y0,c1x,c1y,c2x,c2y,x1,y1, ...] + message CubicBezier { + repeated float segments = 1; + } + + //Quadratic Bézier segments in 3D. + //Each segment is (x0, y0, z0, cx, cy, cz, x1, y1, z1) => 9 floats per segment. + message QuadraticBezier3D { + repeated float segments = 1; + } + + //Cubic Bézier segments in 3D. + //Each segment is (x0, y0, z0, c1x, c1y, c1z, c2x, c2y, c2z, x1, y1, z1) => 12 floats per segment. + message CubicBezier3D { + repeated float segments = 1; + } + } //axis aligned rectangular box in 2D From 6b78df192305900265dd1364c44f5b12b6db3dd9 Mon Sep 17 00:00:00 2001 From: Samtanner12 <84330863+Samtanner12@users.noreply.github.com> Date: Wed, 15 Oct 2025 16:14:45 -0400 Subject: [PATCH 2/4] Update open_vector_format.proto Fixed Spacing --- open_vector_format.proto | 1 - 1 file changed, 1 deletion(-) diff --git a/open_vector_format.proto b/open_vector_format.proto index 8f5f4aa..cdb148b 100644 --- a/open_vector_format.proto +++ b/open_vector_format.proto @@ -618,7 +618,6 @@ message VectorBlock { message CubicBezier3D { repeated float segments = 1; } - } //axis aligned rectangular box in 2D From b52c138f337fd8eb52427a1aed810894a8feba0a Mon Sep 17 00:00:00 2001 From: Samtanner12 <84330863+Samtanner12@users.noreply.github.com> Date: Fri, 17 Oct 2025 11:07:31 -0400 Subject: [PATCH 3/4] Update open_vector_format.proto Updates to compress data and differentiate between hatches and splines --- open_vector_format.proto | 61 ++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 11 deletions(-) diff --git a/open_vector_format.proto b/open_vector_format.proto index cdb148b..ab4053a 100644 --- a/open_vector_format.proto +++ b/open_vector_format.proto @@ -374,10 +374,14 @@ message VectorBlock { ExposurePause exposure_pause = 10; LineSequenceParaAdapt line_sequence_para_adapt = 11; HatchesParaAdapt _hatchParaAdapt = 12; - CubicBezier cubic_bezier = 13; - QuadraticBezier quadratic_bezier = 14; - CubicBezier3D cubic_bezier_3d = 15; - QuadraticBezier3D quadratic_bezier_3d = 16; + CubicBezierHatches cubic_bezier_hatches = 13; + QuadraticBezierHatches quadratic_bezier_hatches = 14; + CubicBezierSpline cubic_bezier_spline = 15; + QuadraticBezierSpline quadratic_bezier_spline = 16; + CubicBezierHatches3D cubic_bezier_hatches_3d = 17; + QuadraticBezierHatches3D quadratic_bezier_hatches_3d = 18; + CubicBezierSpline3D cubic_bezier_spline_3d = 19; + QuadraticBezierSpline3D quadratic_bezier_spline_3d = 20; } //key used in Job/markingParamsMap @@ -593,31 +597,66 @@ message VectorBlock { repeated LineSequenceParaAdapt hatchAsLinesequence = 1; } - //Quadratic Bézier segments in 2D. + //Quadratic Bézier segments. //Each segment is (x0, y0, cx, cy, x1, y1) => 6 floats per segment. //Pack N segments as: [x0,y0,cx,cy,x1,y1, x0,y0,cx,cy,x1,y1, ...] - message QuadraticBezier { + message QuadraticBezierHatches { repeated float segments = 1; } - //Cubic Bézier segments in 2D. + //Cubic Bézier segments. //Each segment is (x0, y0, c1x, c1y, c2x, c2y, x1, y1) => 8 floats per segment. //Pack N segments as: [x0,y0,c1x,c1y,c2x,c2y,x1,y1, ...] - message CubicBezier { + message CubicBezierHatches { repeated float segments = 1; } + //Linked Quadratic Bézier segments. + //Initial segment contains start point (Ix, Iy) + //Each segment is (cx0, cy0, x0, y0) in the format control, target + //=> 2 for start then 4 per segment. + message QuadraticBezierSpline{ + repeated float data = 1; + } + + //Linked Cubic Bézier segments. + //Initial segment contains start point (Ix, Iy) + //Each segment is (c1x0, c1y0, c2x0, c2y0, x0, y0) in the format control, control, target + //=> 2 floats for start then 6 per segment. + message CubicBezierSpline { + repeated float data = 1; + } + //Quadratic Bézier segments in 3D. //Each segment is (x0, y0, z0, cx, cy, cz, x1, y1, z1) => 9 floats per segment. - message QuadraticBezier3D { + //Pack N segments as: [x0,y0,z0,cx,cy,cz,x1,y1,z1 x0,y0,z0,cx,cy,cz,x1,y1,z1 ...] + message QuadraticBezierHatches3D { repeated float segments = 1; } //Cubic Bézier segments in 3D. - //Each segment is (x0, y0, z0, c1x, c1y, c1z, c2x, c2y, c2z, x1, y1, z1) => 12 floats per segment. - message CubicBezier3D { + //Each segment is (x0, y0, z0, c1x, c1y, c2z, c2x, c2y, c2z, x1, y1, z1) => 12 floats per segment. + //Pack N segments as: [x0,y0,z0,c1x,c1y,c1z,c2x,c2y,c2z,x1,y1,z1 ...] + message CubicBezierHatches3D { repeated float segments = 1; } + + //Linked Quadratic Bézier segments. + //Initial segment contains start point (Ix, Iy, Iz) + //Each segment is (cx0, cy0, cz0, x0, y0, z0) in the format control, target + //=> 3 for start then 6 per segment. + message QuadraticBezierSpline3D{ + repeated float data = 1; + } + + //Linked Cubic Bézier segments. + //Initial segment contains start point (Ix, Iy, Iz) + //Each segment is (c1x0, c1y0, c1z0, c2x0, c2y0, c2z0, x0, y0, z0) in the format control, control, target + //=> 3 floats for start then 9 per segment. + message CubicBezierSpline3D { + repeated float data = 1; + } + } //axis aligned rectangular box in 2D From 89d31147a5a86d0cf7fcc63b7aab57d6f36a0e6f Mon Sep 17 00:00:00 2001 From: Samtanner12 <84330863+Samtanner12@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:32:08 -0500 Subject: [PATCH 4/4] Update open_vector_format.proto Implemented proposed behavior --- open_vector_format.proto | 72 +++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/open_vector_format.proto b/open_vector_format.proto index ab4053a..3eaadc7 100644 --- a/open_vector_format.proto +++ b/open_vector_format.proto @@ -597,66 +597,68 @@ message VectorBlock { repeated LineSequenceParaAdapt hatchAsLinesequence = 1; } - //Quadratic Bézier segments. - //Each segment is (x0, y0, cx, cy, x1, y1) => 6 floats per segment. - //Pack N segments as: [x0,y0,cx,cy,x1,y1, x0,y0,cx,cy,x1,y1, ...] + // Quadratic Bézier segments in 2D. + // Each segment: (x0, y0, cx, cy, x1, y1) => 6 floats/segment. + // Pack N: [x0,y0,cx,cy,x1,y1, x0,y0,cx,cy,x1,y1, ...] message QuadraticBezierHatches { repeated float segments = 1; } - //Cubic Bézier segments. - //Each segment is (x0, y0, c1x, c1y, c2x, c2y, x1, y1) => 8 floats per segment. - //Pack N segments as: [x0,y0,c1x,c1y,c2x,c2y,x1,y1, ...] + // Cubic Bézier segments in 2D. + // Each segment: (x0, y0, c1x, c1y, c2x, c2y, x1, y1) => 8 floats/segment. + // Pack N: [x0,y0,c1x,c1y,c2x,c2y,x1,y1, ...] message CubicBezierHatches { repeated float segments = 1; } - //Linked Quadratic Bézier segments. - //Initial segment contains start point (Ix, Iy) - //Each segment is (cx0, cy0, x0, y0) in the format control, target - //=> 2 for start then 4 per segment. - message QuadraticBezierSpline{ - repeated float data = 1; + // Linked Quadratic Bézier spline in 2D (continuous). + // start_control packs tuples (x_i, y_i, cx_i, cy_i) => 4 floats/tuple. + // The end of segment i is the start (x_{i+1},y_{i+1}); the last segment ends at (last_x,last_y). + message QuadraticBezierSpline { + repeated float start_control = 1; // len % 4 == 0, len >= 4 + float last_x = 2; + float last_y = 3; } - //Linked Cubic Bézier segments. - //Initial segment contains start point (Ix, Iy) - //Each segment is (c1x0, c1y0, c2x0, c2y0, x0, y0) in the format control, control, target - //=> 2 floats for start then 6 per segment. + // Linked Cubic Bézier spline in 2D (continuous). + // start_control packs tuples (x_i, y_i, c1x_i, c1y_i, c2x_i, c2y_i) => 6 floats/tuple. message CubicBezierSpline { - repeated float data = 1; + repeated float start_control = 1; // len % 6 == 0, len >= 6 + float last_x = 2; + float last_y = 3; } - //Quadratic Bézier segments in 3D. - //Each segment is (x0, y0, z0, cx, cy, cz, x1, y1, z1) => 9 floats per segment. - //Pack N segments as: [x0,y0,z0,cx,cy,cz,x1,y1,z1 x0,y0,z0,cx,cy,cz,x1,y1,z1 ...] + // Quadratic Bézier segments in 3D. + // Each segment: (x0, y0, z0, cx, cy, cz, x1, y1, z1) => 9 floats/segment. + // Pack N: [x0,y0,z0,cx,cy,cz,x1,y1,z1, x0,y0,z0,cx,cy,cz,x1,y1,z1, ...] message QuadraticBezierHatches3D { repeated float segments = 1; } - //Cubic Bézier segments in 3D. - //Each segment is (x0, y0, z0, c1x, c1y, c2z, c2x, c2y, c2z, x1, y1, z1) => 12 floats per segment. - //Pack N segments as: [x0,y0,z0,c1x,c1y,c1z,c2x,c2y,c2z,x1,y1,z1 ...] + // Cubic Bézier segments in 3D. + // Each segment: (x0, y0, z0, c1x, c1y, c1z, c2x, c2y, c2z, x1, y1, z1) => 12 floats/segment. + // Pack N: [x0,y0,z0,c1x,c1y,c1z,c2x,c2y,c2z,x1,y1,z1, ...] message CubicBezierHatches3D { repeated float segments = 1; } - //Linked Quadratic Bézier segments. - //Initial segment contains start point (Ix, Iy, Iz) - //Each segment is (cx0, cy0, cz0, x0, y0, z0) in the format control, target - //=> 3 for start then 6 per segment. - message QuadraticBezierSpline3D{ - repeated float data = 1; + // Linked Quadratic Bézier spline in 3D (continuous). + // start_control packs (x_i, y_i, z_i, cx_i, cy_i, cz_i) => 6 floats/tuple. + message QuadraticBezierSpline3D { + repeated float start_control = 1; // len % 6 == 0, len >= 6 + float last_x = 2; + float last_y = 3; + float last_z = 4; } - //Linked Cubic Bézier segments. - //Initial segment contains start point (Ix, Iy, Iz) - //Each segment is (c1x0, c1y0, c1z0, c2x0, c2y0, c2z0, x0, y0, z0) in the format control, control, target - //=> 3 floats for start then 9 per segment. + // Linked Cubic Bézier spline in 3D (continuous). + // start_control packs (x_i, y_i, z_i, c1x_i, c1y_i, c1z_i, c2x_i, c2y_i, c2z_i) => 9 floats/tuple. message CubicBezierSpline3D { - repeated float data = 1; + repeated float start_control = 1; // len % 9 == 0, len >= 9 + float last_x = 2; + float last_y = 3; + float last_z = 4; } - } //axis aligned rectangular box in 2D