@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 +1 -1
- package/dist/mesh/backend-dfm.d.ts +1 -1
- package/dist/mesh/backend-dfm.js +9 -6
- package/dist/mesh/backend-dfm.js.map +1 -1
- package/dist/mesh/cad-build.d.ts +7 -4
- package/dist/mesh/cad-build.js +156 -22
- package/dist/mesh/cad-build.js.map +1 -1
- package/dist/mesh/dfm.d.ts +3 -1
- package/dist/mesh/dfm.js +19 -13
- package/dist/mesh/dfm.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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>;
|
package/dist/mesh/backend-dfm.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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"}
|
package/dist/mesh/cad-build.d.ts
CHANGED
|
@@ -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
|
|
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 {};
|
package/dist/mesh/cad-build.js
CHANGED
|
@@ -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
|
|
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
|
|
198
|
-
|
|
199
|
-
|
|
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
|
|
215
|
-
*
|
|
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
|
|
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
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
|
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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"}
|
package/dist/mesh/dfm.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
63
|
-
|
|
64
|
-
|
|
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
|
package/dist/mesh/dfm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dfm.js","sourceRoot":"","sources":["../../src/mesh/dfm.ts"],"names":[],"mappings":"
|
|
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.
|
|
1
|
+
export declare const ENGINE_VERSION = "1.0.7";
|
package/dist/version.js
CHANGED