@danielsimonjr/sciengjs 1.0.6 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -306,7 +306,7 @@ const { bytes } = await render({ type: "cad", source, format: "stl" }, {});
306
306
  - STL holds no colour and no name. A coloured model gives a warning in STL.
307
307
  - `format: "3mf"` gives a 3MF package that keeps the colours and the names. The unit is millimeter.
308
308
  - `format: "dxf"` gives a 2D drawing in the X-Y plane: the outline of the model, or with the option `z` the section at that height. Each closed contour is one closed polyline, in millimetres.
309
- - `format: "md"` gives a report of the design for manufacture in Markdown: the size, the volume and the surface area, and two checks. The overhang check gives the area that needs support for a print along +Z (option `overhang`, default 45 degrees from the vertical). The wall check finds the walls thinner than the option `minWall` (default 0.8 mm) in 32 sections on each axis. A failed check does not reject the render.
309
+ - `format: "md"` gives a report of the design for manufacture in Markdown: the size, the volume and the surface area, and three checks. The overhang check gives the area that needs support for a print along +Z (option `overhang`, default 45 degrees from the vertical). The wall check finds the walls thinner than the option `minWall` (default 0.8 mm) in 32 sections on each axis. The gap check finds the slots, holes and clearances narrower than the option `minGap` (default 0.5 mm) in the same sections. A failed check does not reject the render.
310
310
  - A document with more than `maxCadNodes` nodes rejects with `E_LIMIT` before the solid operations start. A model with more than `maxCadFacets` facets also rejects with `E_LIMIT`.
311
311
  - A bad value rejects with `E_INPUT`. The message gives the JSON path, for example `model.children[1].radius`.
312
312
 
@@ -1,7 +1,7 @@
1
1
  import type { BackendOutput, WorkerJob } from "../worker/protocol.ts";
2
2
  /**
3
3
  * Renders a CAD document to a Markdown report of the design for manufacture. The worker calls this function.
4
- * The report gives the measures of the model, the overhang check and the wall check. A failed check does not
4
+ * The report gives the measures of the model, the overhang check, the wall check and the gap check. A failed check does not
5
5
  * reject the render.
6
6
  */
7
7
  export declare function render(request: WorkerJob["request"]): Promise<BackendOutput>;
@@ -2,29 +2,32 @@ import { RenderError } from "../errors.js";
2
2
  import { readCadRequest } from "./backend-glb.js";
3
3
  import { measureCad } from "./cad-build.js";
4
4
  import { DFM_DEFAULTS, writeDfmReport } from "./dfm.js";
5
- /** Reads the options of a report: overhang (degrees, between 0 and 90) and minWall (millimetres, larger than 0). */
5
+ /** Reads the options of a report: overhang (degrees, between 0 and 90), minWall and minGap (millimetres, larger than 0). */
6
6
  function readDfmOptions(options) {
7
7
  for (const key of Object.keys(options)) {
8
- if (key !== "overhang" && key !== "minWall")
8
+ if (key !== "overhang" && key !== "minWall" && key !== "minGap")
9
9
  throw new RenderError("E_INPUT", `cad to md takes no option ${key}`);
10
10
  }
11
- const { overhang = DFM_DEFAULTS.overhang, minWall = DFM_DEFAULTS.minWall } = options;
11
+ const { overhang = DFM_DEFAULTS.overhang, minWall = DFM_DEFAULTS.minWall, minGap = DFM_DEFAULTS.minGap } = options;
12
12
  if (typeof overhang !== "number" || !(overhang > 0 && overhang < 90)) {
13
13
  throw new RenderError("E_INPUT", "option overhang must be a number larger than 0 and smaller than 90");
14
14
  }
15
15
  if (typeof minWall !== "number" || !Number.isFinite(minWall) || minWall <= 0) {
16
16
  throw new RenderError("E_INPUT", "option minWall must be a finite number larger than 0");
17
17
  }
18
- return { overhang, minWall };
18
+ if (typeof minGap !== "number" || !Number.isFinite(minGap) || minGap <= 0) {
19
+ throw new RenderError("E_INPUT", "option minGap must be a finite number larger than 0");
20
+ }
21
+ return { overhang, minWall, minGap };
19
22
  }
20
23
  /**
21
24
  * Renders a CAD document to a Markdown report of the design for manufacture. The worker calls this function.
22
- * The report gives the measures of the model, the overhang check and the wall check. A failed check does not
25
+ * The report gives the measures of the model, the overhang check, the wall check and the gap check. A failed check does not
23
26
  * reject the render.
24
27
  */
25
28
  export async function render(request) {
26
29
  const options = readDfmOptions(request.options);
27
- const measures = await measureCad(readCadRequest(request), request.settings.maxCadFacets, options.minWall);
30
+ const measures = await measureCad(readCadRequest(request), request.settings.maxCadFacets, options.minWall, options.minGap);
28
31
  return { bytes: writeDfmReport(measures, options) };
29
32
  }
30
33
  //# sourceMappingURL=backend-dfm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backend-dfm.js","sourceRoot":"","sources":["../../src/mesh/backend-dfm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAExD,oHAAoH;AACpH,SAAS,cAAc,CAAC,OAAgC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC;IACrF,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,oEAAoE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,sDAAsD,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6B;IACxD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3G,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"backend-dfm.js","sourceRoot":"","sources":["../../src/mesh/backend-dfm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAExD,4HAA4H;AAC5H,SAAS,cAAc,CAAC,OAAgC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,QAAQ;YAAE,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,6BAA6B,GAAG,EAAE,CAAC,CAAC;IACxI,CAAC;IACD,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;IACnH,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,oEAAoE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,sDAAsD,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,qDAAqD,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6B;IACxD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3H,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;AACtD,CAAC"}
@@ -32,6 +32,8 @@ interface Section {
32
32
  toPolygons(): number[][][];
33
33
  offset(delta: number, joinType: "Round", miterLimit: number, circularSegments: number): Section;
34
34
  subtract(other: Section): Section;
35
+ intersect(other: Section): Section;
36
+ translate(v: number[]): Section;
35
37
  simplify(epsilon: number): Section;
36
38
  decompose(): Section[];
37
39
  area(): number;
@@ -52,7 +54,7 @@ interface ManifoldStatic {
52
54
  intersection(list: Solid[]): Solid;
53
55
  }
54
56
  interface CrossSectionStatic {
55
- square(size: number[] | number, center: boolean): Profile;
57
+ square(size: number[] | number, center: boolean): Profile & Section;
56
58
  circle(radius: number, segments: number): Profile;
57
59
  ofPolygons(contours: number[][][]): Profile;
58
60
  }
@@ -96,7 +98,7 @@ export interface CadDrawing {
96
98
  export declare function drawCad(document: CadDocument, maxFacets: number, z?: number): Promise<CadDrawing>;
97
99
  /** The number of sections of the wall check on each axis. */
98
100
  export declare const WALL_SECTIONS = 32;
99
- /** A section of the wall check with a thin region: the axis, the position on the axis and the thin area. */
101
+ /** A section of the wall check or the gap check with a found region: the axis, the position on the axis and the area. */
100
102
  export interface ThinSection {
101
103
  axis: "X" | "Y" | "Z";
102
104
  at: number;
@@ -112,11 +114,12 @@ export interface CadMeasures {
112
114
  positions: Float32Array;
113
115
  triangles: Uint32Array;
114
116
  thin: ThinSection[];
117
+ narrow: ThinSection[];
115
118
  }
116
119
  /**
117
120
  * Measures a checked document for the report of the design for manufacture. The wall check cuts WALL_SECTIONS
118
121
  * sections on each axis. An opening of each section by minWall removes each wall thinner than minWall. A model
119
- * with no solid rejects with E_INPUT.
122
+ * with no solid rejects with E_INPUT. A closing of each section by minGap fills each gap narrower than minGap.
120
123
  */
121
- export declare function measureCad(document: CadDocument, maxFacets: number, minWall: number): Promise<CadMeasures>;
124
+ export declare function measureCad(document: CadDocument, maxFacets: number, minWall: number, minGap: number): Promise<CadMeasures>;
122
125
  export {};
@@ -161,22 +161,22 @@ export function drawCad(document, maxFacets, z) {
161
161
  return { contours: section.toPolygons(), colored };
162
162
  });
163
163
  }
164
- /** The axes of the wall check. A rotation turns each axis into the Z axis, so that a slice of the turned solid cuts across the original axis. */
164
+ /** The axes of the wall check and the gap check. A rotation turns each axis into the Z axis, so that a slice of the turned solid cuts across the original axis. */
165
165
  const SECTION_AXES = [
166
166
  { axis: "X", index: 0, angles: [0, -90, 0] },
167
167
  { axis: "Y", index: 1, angles: [90, 0, 0] },
168
168
  { axis: "Z", index: 2, angles: [0, 0, 0] },
169
169
  ];
170
- /** The segments of a full circle in the round joins of the wall check. The joins shape only the corners of an opening. */
170
+ /** The segments of a full circle in the round joins of the wall check and the gap check. The joins change only the corners of a section. */
171
171
  const OFFSET_SEGMENTS = 32;
172
172
  /** The number of sections of the wall check on each axis. */
173
173
  export const WALL_SECTIONS = 32;
174
174
  /**
175
175
  * Measures a checked document for the report of the design for manufacture. The wall check cuts WALL_SECTIONS
176
176
  * sections on each axis. An opening of each section by minWall removes each wall thinner than minWall. A model
177
- * with no solid rejects with E_INPUT.
177
+ * with no solid rejects with E_INPUT. A closing of each section by minGap fills each gap narrower than minGap.
178
178
  */
179
- export function measureCad(document, maxFacets, minWall) {
179
+ export function measureCad(document, maxFacets, minWall, minGap) {
180
180
  return withSolid(document, maxFacets, (solid, build) => {
181
181
  if (solid.numTri() === 0)
182
182
  throw new RenderError("E_INPUT", "the model holds no solid");
@@ -188,15 +188,20 @@ export function measureCad(document, maxFacets, minWall) {
188
188
  positions[v * 3 + c] = mesh.vertProperties[v * mesh.numProp + c];
189
189
  }
190
190
  const thin = [];
191
+ const narrow = [];
191
192
  for (const { axis, index, angles } of SECTION_AXES) {
192
193
  const turned = index === 2 ? solid : build.keep(solid.rotate([...angles]));
193
194
  const lo = min[index];
194
195
  const step = (max[index] - lo) / WALL_SECTIONS;
195
196
  for (let i = 0; i < WALL_SECTIONS; i++) {
196
197
  const at = lo + (i + 0.5) * step;
197
- const area = thinArea(build, build.keep(turned.slice(at)), minWall);
198
- if (area > 0)
199
- thin.push({ axis, at, area });
198
+ const section = build.keep(turned.slice(at));
199
+ const thinAt = thinPieces(build, section, minWall).pieces;
200
+ if (thinAt.length > 0 && persists(build, turned, at, thinAt, minWall, thinPieces))
201
+ thin.push({ axis, at, area: areaOf(thinAt) });
202
+ const gapAt = gapPieces(build, section, minGap).pieces;
203
+ if (gapAt.length > 0 && persists(build, turned, at, gapAt, minGap, gapPieces))
204
+ narrow.push({ axis, at, area: areaOf(gapAt) });
200
205
  }
201
206
  }
202
207
  return {
@@ -207,31 +212,160 @@ export function measureCad(document, maxFacets, minWall) {
207
212
  positions,
208
213
  triangles: Uint32Array.from(mesh.triVerts),
209
214
  thin,
215
+ narrow,
210
216
  };
211
217
  });
212
218
  }
213
219
  /**
214
- * The area of the regions of a section that an opening by minWall removes, less the corners of the opening. The
215
- * opening shrinks the section by a little less than half of minWall, so that a wall equal to minWall stays. A
216
- * removed region is thin when the region is wider than a quarter of minWall. A removed region is also thin when its
217
- * area is more than the four corners of a square bar.
220
+ * The thin pieces of a section: the regions that an opening by minWall removes, and that count. The opening shrinks
221
+ * the section by a little less than half of minWall, so that a wall equal to minWall stays.
218
222
  */
219
- function thinArea(build, section, minWall) {
223
+ function thinPieces(build, section, minWall) {
220
224
  const segments = OFFSET_SEGMENTS;
221
225
  const half = (minWall / 2) * (1 - 1e-6);
222
- const corner = (1 - Math.PI / 4) * minWall * minWall;
223
226
  const opened = build.keep(build.keep(section.offset(-half, "Round", 2, segments)).offset(half, "Round", 2, segments));
224
- // The subtraction leaves slivers of zero width with a reversed winding. A shrink grows such a sliver, so the
225
- // simplify step removes the slivers before the corner test.
226
- const removed = build.keep(build.keep(section.subtract(opened)).simplify(minWall / 1000));
227
- let area = 0;
228
- for (const piece of removed.decompose()) {
227
+ const wideIn = (shape) => build.keep(shape.intersect(opened)).area();
228
+ return { pieces: countedPieces(build, section, build.keep(section.subtract(opened)), minWall, wideIn), wideIn };
229
+ }
230
+ /**
231
+ * The narrow pieces of a section: the regions that a closing by minGap fills, and that count. The closing grows the
232
+ * section by a little less than half of minGap, so that a slot equal to minGap stays open.
233
+ */
234
+ function gapPieces(build, section, minGap) {
235
+ const segments = OFFSET_SEGMENTS;
236
+ const half = (minGap / 2) * (1 - 1e-6);
237
+ const closed = build.keep(build.keep(section.offset(half, "Round", 2, segments)).offset(-half, "Round", 2, segments));
238
+ const wideIn = (shape) => build.keep(shape.subtract(closed)).area();
239
+ return { pieces: countedPieces(build, section, build.keep(closed.subtract(section)), minGap, wideIn), wideIn };
240
+ }
241
+ /**
242
+ * The pieces of a removed region that count. An opening of min/200 splits the removed region into parts. A part that
243
+ * holds one vertex of the section is a corner of the opening, at any angle. A part can hold two or more convex
244
+ * vertices and be not longer than 2 min on each axis. Such a part is the region near a vertex of the solid when it
245
+ * also touches the wide region of the section. A separate body or a pin cut on its own does not touch the wide
246
+ * region. A piece with no other part does not count. A piece counts when a part is longer than 0.75 min, or when the
247
+ * piece holds a disc of radius min/8. First, the simplify step removes the slivers of zero width with a reversed
248
+ * winding. A shrink grows such a sliver, so the slivers must go before the tests.
249
+ */
250
+ function countedPieces(build, section, removed, min, wideIn) {
251
+ const segments = OFFSET_SEGMENTS;
252
+ const vertices = sectionVertices(build, section, min);
253
+ const cleaned = simplified(build, removed, min);
254
+ const pieces = [];
255
+ for (const piece of cleaned.decompose()) {
229
256
  build.keep(piece);
230
- const pieceArea = piece.area();
231
- if (pieceArea > corner || build.keep(piece.offset(-minWall / 8, "Round", 2, segments)).area() > 0)
232
- area += pieceArea;
257
+ let longest = 0;
258
+ let wall = false;
259
+ for (const part of openedParts(build, piece, min)) {
260
+ const held = heldVertices(build, part, vertices, min);
261
+ if (held.length === 1)
262
+ continue;
263
+ const side = longestSide(part);
264
+ if (held.length >= 2 && held.every((v) => v.convex) && side <= 2 * min && bordersWide(build, part, min, wideIn))
265
+ continue;
266
+ wall = true;
267
+ longest = Math.max(longest, side);
268
+ }
269
+ if (!wall)
270
+ continue;
271
+ if (longest > 0.75 * min || build.keep(piece.offset(-min / 8, "Round", 2, segments)).area() > 0)
272
+ pieces.push(piece);
273
+ }
274
+ return pieces;
275
+ }
276
+ /** True when a part touches the wide region of its section. A separate body or a pin cut on its own does not touch the wide region. */
277
+ function bordersWide(build, part, min, wideIn) {
278
+ return wideIn(build.keep(part.offset(min / 100, "Round", 2, OFFSET_SEGMENTS))) > 0;
279
+ }
280
+ /** A section or a region with the points of min/1000 removed. */
281
+ function simplified(build, shape, min) {
282
+ return build.keep(shape.simplify(min / 1000));
283
+ }
284
+ /** The vertices of a section, each with the sign of its turn. A Manifold contour keeps the region to its left. */
285
+ function sectionVertices(build, section, min) {
286
+ const out = [];
287
+ for (const polygon of simplified(build, section, min).toPolygons()) {
288
+ const n = polygon.length;
289
+ for (let i = 0; i < n; i++) {
290
+ const a = polygon[(i + n - 1) % n];
291
+ const b = polygon[i];
292
+ const c = polygon[(i + 1) % n];
293
+ const cross = (b[0] - a[0]) * (c[1] - b[1]) - (b[1] - a[1]) * (c[0] - b[0]);
294
+ out.push({ x: b[0], y: b[1], convex: cross > 0 });
295
+ }
296
+ }
297
+ return out;
298
+ }
299
+ /**
300
+ * The vertices of the section that a small square centred on the vertex meets in the part. The square has side min/4.
301
+ * A vertex out of the bounding box of the part, grown by min/8, cannot meet the part, so the test skips the vertex.
302
+ */
303
+ function heldVertices(build, part, vertices, min) {
304
+ const box = boundsOf(part);
305
+ const reach = min / 8;
306
+ return vertices.filter((v) => {
307
+ if (v.x < box.minX - reach || v.x > box.maxX + reach || v.y < box.minY - reach || v.y > box.maxY + reach)
308
+ return false;
309
+ const square = build.keep(build.m.CrossSection.square([min / 4, min / 4], true));
310
+ const tip = build.keep(square.translate([v.x, v.y]));
311
+ return build.keep(tip.intersect(part)).area() > 0;
312
+ });
313
+ }
314
+ /** The parts of a piece after an opening by min/200. The opening removes the bridges of zero width and the slivers. */
315
+ function openedParts(build, piece, min) {
316
+ const e = min / 200;
317
+ const opened = build.keep(build.keep(piece.offset(-e, "Round", 2, OFFSET_SEGMENTS)).offset(e, "Round", 2, OFFSET_SEGMENTS));
318
+ return opened.decompose().map((part) => build.keep(part));
319
+ }
320
+ /** The bounding box of a part. */
321
+ function boundsOf(part) {
322
+ let minX = Infinity;
323
+ let minY = Infinity;
324
+ let maxX = -Infinity;
325
+ let maxY = -Infinity;
326
+ for (const polygon of part.toPolygons()) {
327
+ for (const [x, y] of polygon) {
328
+ minX = Math.min(minX, x);
329
+ maxX = Math.max(maxX, x);
330
+ minY = Math.min(minY, y);
331
+ maxY = Math.max(maxY, y);
332
+ }
333
+ }
334
+ return { minX, minY, maxX, maxY };
335
+ }
336
+ /** The longest bounding box side of a part. */
337
+ function longestSide(part) {
338
+ const { minX, minY, maxX, maxY } = boundsOf(part);
339
+ let longest = 0;
340
+ longest = Math.max(longest, maxX - minX, maxY - minY);
341
+ return longest;
342
+ }
343
+ /** The total area of a list of pieces. The pieces are disjoint. */
344
+ function areaOf(pieces) {
345
+ return pieces.reduce((sum, piece) => sum + piece.area(), 0);
346
+ }
347
+ /**
348
+ * True when a piece of the section is a real thin region, not the slant cut of an edge or a vertex. The test looks at
349
+ * the sections at min/2 before and after. A piece is a slant cut when one of these sections holds more than half of
350
+ * the piece as a wide region. Also, neither section has a found piece within min/2 of the piece. A wall or a pin that
351
+ * ends before the next section does not have a wide region there, so the wall or the pin counts.
352
+ */
353
+ function persists(build, turned, at, pieces, min, find) {
354
+ const near = pieces.map((piece) => build.keep(piece.offset(min / 2, "Round", 2, OFFSET_SEGMENTS)));
355
+ const covered = pieces.map(() => false);
356
+ for (const other of [at - min / 2, at + min / 2]) {
357
+ const section = build.keep(turned.slice(other));
358
+ if (section.area() === 0)
359
+ continue;
360
+ const found = find(build, section, min);
361
+ for (let i = 0; i < pieces.length; i++) {
362
+ if (found.pieces.some((f) => build.keep(f.intersect(near[i])).area() > 0))
363
+ return true;
364
+ if (found.wideIn(pieces[i]) > pieces[i].area() / 2)
365
+ covered[i] = true;
366
+ }
233
367
  }
234
- return area;
368
+ return covered.some((c) => !c);
235
369
  }
236
370
  /**
237
371
  * Builds the solid of a checked document and gives the solid to the reader. The build frees every WASM object
@@ -1 +1 @@
1
- {"version":3,"file":"cad-build.js","sourceRoot":"","sources":["../../src/mesh/cad-build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cad-build.js","sourceRoot":"","sources":["../../src/mesh/cad-build.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@ export interface DfmOptions {
5
5
  overhang: number;
6
6
  /** The minimum wall in millimetres. */
7
7
  minWall: number;
8
+ /** The minimum gap in millimetres. */
9
+ minGap: number;
8
10
  }
9
11
  /** The default options of the report. */
10
12
  export declare const DFM_DEFAULTS: DfmOptions;
@@ -14,5 +16,5 @@ export declare const DFM_DEFAULTS: DfmOptions;
14
16
  * on the lowest plane stands on the bed and needs no support.
15
17
  */
16
18
  export declare function supportArea(positions: Float32Array, triangles: Uint32Array, minZ: number, overhang: number): number;
17
- /** Writes the report of the design for manufacture as GitHub Flavored Markdown. */
19
+ /** Writes the report of the design for manufacture as GitHub Flavored Markdown. The report gives three checks. */
18
20
  export declare function writeDfmReport(measures: CadMeasures, options: DfmOptions): Uint8Array;
package/dist/mesh/dfm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { WALL_SECTIONS } from "./cad-build.js";
2
2
  /** The default options of the report. */
3
- export const DFM_DEFAULTS = { overhang: 45, minWall: 0.8 };
4
- /** The largest number of thin sections that the report lists on each axis. */
3
+ export const DFM_DEFAULTS = { overhang: 45, minWall: 0.8, minGap: 0.5 };
4
+ /** The largest number of thin or narrow sections that the report lists on each axis. */
5
5
  const LISTED_SECTIONS = 10;
6
6
  /**
7
7
  * The area of the faces that need support when the model is printed upwards along +Z. A face needs support when
@@ -38,7 +38,18 @@ function fixed(value) {
38
38
  const rounded = Number(value.toFixed(3));
39
39
  return String(rounded === 0 ? 0 : rounded);
40
40
  }
41
- /** Writes the report of the design for manufacture as GitHub Flavored Markdown. */
41
+ /** Writes the list of the sections with a found region, under a heading, at most LISTED_SECTIONS on each axis. */
42
+ function listSections(lines, heading, sections, word) {
43
+ lines.push("", `## ${heading}`, "");
44
+ for (const axis of ["X", "Y", "Z"]) {
45
+ const onAxis = sections.filter((section) => section.axis === axis);
46
+ for (const s of onAxis.slice(0, LISTED_SECTIONS))
47
+ lines.push(`- ${axis} = ${fixed(s.at)} mm: ${fixed(s.area)} mm² ${word}`);
48
+ if (onAxis.length > LISTED_SECTIONS)
49
+ lines.push(`- and ${onAxis.length - LISTED_SECTIONS} more sections on ${axis}`);
50
+ }
51
+ }
52
+ /** Writes the report of the design for manufacture as GitHub Flavored Markdown. The report gives three checks. */
42
53
  export function writeDfmReport(measures, options) {
43
54
  const size = measures.max.map((high, i) => fixed(high - measures.min[i])).join(" x ");
44
55
  const support = supportArea(measures.positions, measures.triangles, measures.min[2], options.overhang);
@@ -57,17 +68,12 @@ export function writeDfmReport(measures, options) {
57
68
  "| --- | --- | --- | --- |",
58
69
  `| Overhang | ${support > 0 ? "fail" : "pass"} | ${supportText} mm² needs support | ${fixed(options.overhang)}° from the vertical |`,
59
70
  `| Minimum wall | ${measures.thin.length === 0 ? "pass" : "fail"} | ${measures.thin.length} of ${sections} sections have a thin region | ${fixed(options.minWall)} mm |`,
71
+ `| Minimum gap | ${measures.narrow.length === 0 ? "pass" : "fail"} | ${measures.narrow.length} of ${sections} sections have a narrow gap | ${fixed(options.minGap)} mm |`,
60
72
  ];
61
- if (measures.thin.length > 0) {
62
- lines.push("", "## Thin walls", "");
63
- for (const axis of ["X", "Y", "Z"]) {
64
- const onAxis = measures.thin.filter((section) => section.axis === axis);
65
- for (const s of onAxis.slice(0, LISTED_SECTIONS))
66
- lines.push(`- ${axis} = ${fixed(s.at)} mm: ${fixed(s.area)} mm² thin`);
67
- if (onAxis.length > LISTED_SECTIONS)
68
- lines.push(`- and ${onAxis.length - LISTED_SECTIONS} more sections on ${axis}`);
69
- }
70
- }
73
+ if (measures.thin.length > 0)
74
+ listSections(lines, "Thin walls", measures.thin, "thin");
75
+ if (measures.narrow.length > 0)
76
+ listSections(lines, "Narrow gaps", measures.narrow, "narrow");
71
77
  return new TextEncoder().encode(lines.join("\n") + "\n");
72
78
  }
73
79
  //# sourceMappingURL=dfm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dfm.js","sourceRoot":"","sources":["../../src/mesh/dfm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dfm.js","sourceRoot":"","sources":["../../src/mesh/dfm.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const ENGINE_VERSION = "1.0.6";
1
+ export declare const ENGINE_VERSION = "1.0.7";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by scripts/prepare-build.mjs from package.json. Do not edit this file by hand.
2
- export const ENGINE_VERSION = "1.0.6";
2
+ export const ENGINE_VERSION = "1.0.7";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielsimonjr/sciengjs",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "private": false,
5
5
  "description": "A local rendering engine for science and engineering diagrams, documents and models",
6
6
  "license": "MIT",