scanruler-mcp 0.4.0 → 0.4.5
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 +41 -8
- package/package.json +14 -3
- package/src/commands.json +257 -60
- package/src/config.js +24 -2
- package/src/link.js +1 -1
- package/src/main.js +3 -3
- package/src/mcp.js +413 -63
- package/src/relay.js +10 -0
- package/src/tools.js +75 -35
package/src/commands.json
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"app": "0.
|
|
3
|
-
"saved": "2026-10-
|
|
2
|
+
"app": "0.8.0",
|
|
3
|
+
"saved": "2026-10-26T07:21:55.736Z",
|
|
4
4
|
"commands": [
|
|
5
5
|
{
|
|
6
6
|
"name": "align.auto",
|
|
7
7
|
"title": "Auto-align the part",
|
|
8
|
-
"description": "Read a coordinate system off the scan and apply it, as Auto-align then Confirm alignment do: the directions most faces are square to and the axis round walls run along, the part standing on its base, its long side along X. Returns what the pose was read from, the transform
|
|
8
|
+
"description": "Read a coordinate system off the scan and apply it, as Auto-align then Confirm alignment do: the directions most faces are square to and the axis round walls run along, the part standing on its base, its long side along X. level: settled (the default) lays all the faces on the axes at once, by area — a flange a degree off square shares its error with the base; largest squares the axis nearest the largest flat face exactly onto its normal and turns the other two about it onto the faces square to them. Returns what the pose was read from, the transform, how many elements moved with it, and square — how square it came out: largest (the largest flat face: the axis it is square to, its area in mm², tiltDeg — the angle between its fitted plane’s normal and that axis) and per axis the faces square to it (tiltDeg weighted by area, their area, the largest three each with area, tiltDeg and centre in the new frame). A drafted wall reads as its draft. One undo step.",
|
|
9
9
|
"input": {
|
|
10
10
|
"type": "object",
|
|
11
11
|
"properties": {
|
|
12
|
+
"level": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"enum": [
|
|
15
|
+
"settled",
|
|
16
|
+
"largest"
|
|
17
|
+
],
|
|
18
|
+
"description": "settled (the default): the best fit of all the faces square to the axes. largest: square to the largest flat face exactly, the others settled about its normal."
|
|
19
|
+
},
|
|
12
20
|
"detail": {
|
|
13
21
|
"type": "string",
|
|
14
22
|
"enum": [
|
|
@@ -375,7 +383,7 @@
|
|
|
375
383
|
{
|
|
376
384
|
"name": "deviation.hotspots",
|
|
377
385
|
"title": "Where the deviation lies over tolerance",
|
|
378
|
-
"description": "The deviation map read as patches: the scan vertices whose deviation lies past the tolerance (the map’s own, under deviation.settings, unless tolerance says otherwise) gathered into connected regions, the largest and farthest first — where the part is off, how large each place is and by how much, instead of one number over the whole part. Each patch: its centre and box in mm (in the frame the scan is measured in — what scan.query { box } and element.fit take), its area, how many vertices, the mean and the extreme deviation and which side (outside the reference or inside), the point of the extreme and the scan vertex there, and a few of its vertices (what element.fit_marked takes). With a map against the reference part the patch’s centre and extreme are given on the reference too (onReference — what the Deviation workspace shows and view.render { frame } takes there). grain is how close two vertices over tolerance have to be to be one patch, three point spacings by default. found and over say how many patches and vertices over tolerance there were in all — within the search distance, the vertices the map draws as a measurement. Then far, the vertices past the search distance, which the map draws bare: read it every time — far.inside is the scan deeper inside the reference than the search distance, where the reference has material the part has not (a hole, a pocket or a slot the model lacks), far.outside the scan further off it, where the part has what the model has not, or scan spray; each with its count and its patches, the largest first, and far.count both together; unmeasured says how many vertices the facing limit left without a reading. Needs a deviation map (deviation.align, or deviation.set_target). on: \"reference\" reads the map on the reference instead (deviation.settings { on }, measured if it is not yet): the patches are of the reference, in its frame, outside where the reference stands proud of the scan (material the part has not) and inside where it is short of it; far is the reference past the search distance from the scan, by side; and noScan, the reference with no scan behind it, in patches the largest first — surface the model has on no evidence: inferred, unscanned, or not on the part. Changes nothing.",
|
|
386
|
+
"description": "The deviation map read as patches: the scan vertices whose deviation lies past the tolerance (the map’s own, under deviation.settings, unless tolerance says otherwise) gathered into connected regions, the largest and farthest first — where the part is off, how large each place is and by how much, instead of one number over the whole part. Each patch: its centre and box in mm (in the frame the scan is measured in — what scan.query { box } and element.fit take), its area, how many vertices, the mean and the extreme deviation, depth, the median |deviation| over the patch; volume, mm³ past the tolerance (the ranking key); kind, \"feature\" when the patch is at least 4 mm² and 25 point spacings² across and its depth at least 2× the tolerance — material missing or misplaced, to model or to name — else \"texture\", the surface's own roughness poking past the tolerance, small or shallow, and which side (outside the reference or inside), the point of the extreme and the scan vertex there, and a few of its vertices (what element.fit_marked takes). With a map against the reference part the patch’s centre and extreme are given on the reference too (onReference — what the Deviation workspace shows and view.render { frame } takes there). grain is how close two vertices over tolerance have to be to be one patch, three point spacings by default. features says how many of all the patches found are features and their share of everything past the tolerance (shareOfExcess, 0–1), with what a feature patch asks: a patch over a tolerance well above the scan’s noise is never noise, so read each by its kind — a feature is modelled or named, never put down to scatter. found and over say how many patches and vertices over tolerance there were in all — within the search distance, the vertices the map draws as a measurement. Then far, the vertices past the search distance, which the map draws bare: read it every time — far.inside is the scan deeper inside the reference than the search distance, where the reference has material the part has not (a hole, a pocket or a slot the model lacks), far.outside the scan further off it, where the part has what the model has not, or scan spray; each with its count and its patches, the largest first, and far.count both together; unmeasured says how many vertices the facing limit left without a reading. Needs a deviation map (deviation.align, or deviation.set_target). on: \"reference\" reads the map on the reference instead (deviation.settings { on }, measured if it is not yet): the patches are of the reference, in its frame, outside where the reference stands proud of the scan (material the part has not) and inside where it is short of it; far is the reference past the search distance from the scan, by side; and noScan, the reference with no scan behind it, in patches the largest first — surface the model has on no evidence: inferred, unscanned, or not on the part. Changes nothing.",
|
|
379
387
|
"input": {
|
|
380
388
|
"type": "object",
|
|
381
389
|
"properties": {
|
|
@@ -527,7 +535,7 @@
|
|
|
527
535
|
{
|
|
528
536
|
"name": "deviation.settings",
|
|
529
537
|
"title": "Set how the deviation is read",
|
|
530
|
-
"description": "The deviation map’s reading: range, the colour scale ± mm; maxDistance, how far from the reference a point may be to count, mm; bands, a stepped scale of that many colours or null for smooth; tolerance, ± mm, the share within which the statistics give; facingDeg, how far the reference surface a point is measured against may turn from facing it, degrees, or null for the nearest surface whatever it faces — a change of it measures the map again; colormap, the colour map every deviation map and the live map of the bodies are drawn in — the person’s own choice, kept in the browser and outside the undo, so set it only to read a render by its colours and read settings.colormap for what the ramp shows at −range, 0 and +range and the caps past either end before judging a picture; on, which surface a map against the reference part is painted on — \"scan\" (the scan by its distance to the reference, the default) or \"reference\" (the reference by its distance to the scan, measured the first time it is asked for: positive where the reference stands outside the scan — material the part has not, a boss or a wall the model has and the scan does not — negative where it is short of it, grey where no scan stands behind it, a reading past the search distance in the cap of its end). Read both: the scan’s side finds what the model lacks, the reference’s what the model has that the part has not, and how much of the model no scan supports (onReference.noScanPct in the state). show, the map switch (the view bar’s Map key): false leaves the surface bare to look at its shape, the map still measured and read — the figures, hotspots and pins go on; true paints it again; a project keeps it, so read settings.show in the state when a render comes out uncoloured. view.render pictures the side on screen
|
|
538
|
+
"description": "The deviation map’s reading: range, the colour scale ± mm; maxDistance, how far from the reference a point may be to count, mm; bands, a stepped scale of that many colours or null for smooth; tolerance, ± mm, the share within which the statistics give; facingDeg, how far the reference surface a point is measured against may turn from facing it, degrees, or null for the nearest surface whatever it faces — a change of it measures the map again; colormap, the colour map every deviation map and the live map of the bodies are drawn in — the person’s own choice, kept in the browser and outside the undo, so set it only to read a render by its colours and read settings.colormap for what the ramp shows at −range, 0 and +range and the caps past either end before judging a picture; on, which surface a map against the reference part is painted on — \"scan\" (the scan by its distance to the reference, the default) or \"reference\" (the reference by its distance to the scan, measured the first time it is asked for: positive where the reference stands outside the scan — material the part has not, a boss or a wall the model has and the scan does not — negative where it is short of it, grey where no scan stands behind it, a reading past the search distance in the cap of its end). Read both: the scan’s side finds what the model lacks, the reference’s what the model has that the part has not, and how much of the model no scan supports (onReference.noScanPct in the state). show, the map switch (the view bar’s Map key): false leaves the surface bare to look at its shape, the map still measured and read — the figures, hotspots and pins go on; true paints it again; a project keeps it, so read settings.show in the state when a render comes out uncoloured. The map paints in the Deviation workspace only — a command of another workspace puts that one on screen, and workspace.set deviation brings the map back; view.render pictures the side on screen there and says which map it painted (map) or why none (mapWhy), elsewhere that the Deviation workspace is not on screen. Returns the deviation state. One undo step.",
|
|
531
539
|
"input": {
|
|
532
540
|
"type": "object",
|
|
533
541
|
"properties": {
|
|
@@ -607,6 +615,79 @@
|
|
|
607
615
|
"returnsFile": false,
|
|
608
616
|
"returnsImage": false
|
|
609
617
|
},
|
|
618
|
+
{
|
|
619
|
+
"name": "deviation.volume",
|
|
620
|
+
"title": "Volume error",
|
|
621
|
+
"description": "The scan and the reference part compared as solids, on a grid of small cells: each cell inside one and not the other is an error, touching cells a region. Read it before the surface patches — it tells how much material is wrong and where, which the nearest-point map cannot. excess is material the reference has and the part has not (a boss modelled where there is air, a hole not cut), missing material the part has and the reference has not (a boss not modelled, a pocket cut where the part is solid), wherever it is: behind a wall, inside a cavity, past the search distance. Where the scan has a hole the reference stands in for it; what the scan still does not say is unsure, never an error. Within the tolerance of the scan’s surface a difference is noise; nothing thinner than smallestSeen (two cells) is seen — the surface map stays the tool for fine offsets. Answers totals (mm³ and share of the reference’s volume, %) and the regions largest first, each with its kind, volume (mm³), maxDepth (mm from the scan’s surface), thickness (volume over the area it shares with a surface), shape — layer (a face standing off, about thickness thick) or lump (material there or not) —, centroid, deepest point and box in the reference’s frame (what view.render { frame } takes in the Deviation workspace), evidence (the share of its scan side that is real scan rather than reference standing in) and confidence. Needs the scan aligned to the reference (deviation.align). Shows the regions in the Deviation workspace, the colour plot put away. About 15 s on a 1.5M-triangle scan; within a box, less. Changes nothing kept.",
|
|
622
|
+
"input": {
|
|
623
|
+
"type": "object",
|
|
624
|
+
"properties": {
|
|
625
|
+
"tolerance": {
|
|
626
|
+
"type": "number",
|
|
627
|
+
"description": "± mm; the map’s tolerance (deviation.settings) by default.",
|
|
628
|
+
"exclusiveMinimum": 0
|
|
629
|
+
},
|
|
630
|
+
"cell": {
|
|
631
|
+
"type": "number",
|
|
632
|
+
"description": "The cell, mm; by default half the tolerance or a 250th of the reference’s longest side, the larger — and coarser if the grid would pass 16M cells.",
|
|
633
|
+
"exclusiveMinimum": 0
|
|
634
|
+
},
|
|
635
|
+
"regions": {
|
|
636
|
+
"type": "integer",
|
|
637
|
+
"description": "How many regions to name; 8 by default, 50 at most.",
|
|
638
|
+
"minimum": 1,
|
|
639
|
+
"maximum": 50
|
|
640
|
+
},
|
|
641
|
+
"within": {
|
|
642
|
+
"type": "object",
|
|
643
|
+
"properties": {
|
|
644
|
+
"min": {
|
|
645
|
+
"type": "array",
|
|
646
|
+
"items": {
|
|
647
|
+
"type": "number"
|
|
648
|
+
},
|
|
649
|
+
"description": "The lowest corner, mm.",
|
|
650
|
+
"minItems": 3,
|
|
651
|
+
"maxItems": 3
|
|
652
|
+
},
|
|
653
|
+
"max": {
|
|
654
|
+
"type": "array",
|
|
655
|
+
"items": {
|
|
656
|
+
"type": "number"
|
|
657
|
+
},
|
|
658
|
+
"description": "The highest corner, mm.",
|
|
659
|
+
"minItems": 3,
|
|
660
|
+
"maxItems": 3
|
|
661
|
+
}
|
|
662
|
+
},
|
|
663
|
+
"required": [
|
|
664
|
+
"min",
|
|
665
|
+
"max"
|
|
666
|
+
],
|
|
667
|
+
"additionalProperties": false,
|
|
668
|
+
"description": "Only this box is looked at, in the frame the reference is measured in."
|
|
669
|
+
},
|
|
670
|
+
"kinds": {
|
|
671
|
+
"type": "array",
|
|
672
|
+
"items": {
|
|
673
|
+
"type": "string",
|
|
674
|
+
"enum": [
|
|
675
|
+
"excess",
|
|
676
|
+
"missing",
|
|
677
|
+
"unsure"
|
|
678
|
+
],
|
|
679
|
+
"description": "A kind of region."
|
|
680
|
+
},
|
|
681
|
+
"description": "Only regions of these kinds named; all by default. The totals are of all."
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
"additionalProperties": false
|
|
685
|
+
},
|
|
686
|
+
"readOnly": true,
|
|
687
|
+
"returnsFile": false,
|
|
688
|
+
"returnsImage": false,
|
|
689
|
+
"long": true
|
|
690
|
+
},
|
|
610
691
|
{
|
|
611
692
|
"name": "dimension.add",
|
|
612
693
|
"title": "Add a dimension",
|
|
@@ -909,7 +990,7 @@
|
|
|
909
990
|
{
|
|
910
991
|
"name": "element.construct",
|
|
911
992
|
"title": "Construct an element",
|
|
912
|
-
"description": "Construct an element from others and typed-in numbers, as the panel’s creation methods do — by kind: point (point-coords, point-centroid, point-midpoint, point-line-plane), line (line-two-points, line-axis, line-plane-plane), plane (plane-three-points, plane-offset, plane-midplane, plane-coords, plane-symmetry), circle (circle-plane-cylinder, circle-plane-sphere, circle-coords). refs fill the method’s slots in order, by element id or name; params are its numbers in order (or by key: x, y, z; offset; nx, ny, nz, px, py, pz; d, cx, cy, cz). point-centroid and plane-symmetry measure the scan themselves: vertices confines them to a marked surface, seed starts the symmetry search from a plane. plane-symmetry finds the scan’s own mirror plane as an element, the alignment left as it is (align.symmetry re-poses the part on it instead), and answers with the search’s residual: symmetry { rms, matched, sampled } and a note. Returns the element. One undo step.",
|
|
993
|
+
"description": "Construct an element from others and typed-in numbers, as the panel’s creation methods do — by kind: point (point-coords, point-centroid, point-midpoint, point-line-plane), line (line-two-points, line-axis, line-plane-plane), plane (plane-three-points, plane-offset, plane-midplane, plane-coords, plane-symmetry), circle (circle-plane-cylinder, circle-plane-sphere, circle-coords). refs fill the method’s slots in order, by element id or name — a coordinate plane \"XY\", \"YZ\" or \"XZ\" in a plane’s slot is made a plane element through the origin first (one made so before is taken again) and listed under made; params are its numbers in order (or by key: x, y, z; offset; nx, ny, nz, px, py, pz; d, cx, cy, cz). point-centroid and plane-symmetry measure the scan themselves: vertices confines them to a marked surface, seed starts the symmetry search from a plane. plane-symmetry finds the scan’s own mirror plane as an element, the alignment left as it is (align.symmetry re-poses the part on it instead), and answers with the search’s residual: symmetry { rms, matched, sampled } and a note. Returns the element. One undo step.",
|
|
913
994
|
"input": {
|
|
914
995
|
"type": "object",
|
|
915
996
|
"properties": {
|
|
@@ -947,7 +1028,7 @@
|
|
|
947
1028
|
"minLength": 1
|
|
948
1029
|
}
|
|
949
1030
|
],
|
|
950
|
-
"description": "A source element."
|
|
1031
|
+
"description": "A source element — or, in a plane’s slot, a coordinate plane \"XY\", \"YZ\", \"XZ\"."
|
|
951
1032
|
},
|
|
952
1033
|
"description": "The method’s source elements, slot by slot."
|
|
953
1034
|
},
|
|
@@ -981,7 +1062,7 @@
|
|
|
981
1062
|
"minLength": 1
|
|
982
1063
|
}
|
|
983
1064
|
],
|
|
984
|
-
"description": "plane-symmetry: the plane the search starts from — a plane element or \"XY\", \"YZ\", \"
|
|
1065
|
+
"description": "plane-symmetry: the plane the search starts from — a plane element or \"XY\", \"YZ\", \"XZ\"."
|
|
985
1066
|
},
|
|
986
1067
|
"vertices": {
|
|
987
1068
|
"type": "array",
|
|
@@ -1013,7 +1094,7 @@
|
|
|
1013
1094
|
"minLength": 1
|
|
1014
1095
|
}
|
|
1015
1096
|
],
|
|
1016
|
-
"description": "The reference plane: a plane element, or a coordinate plane \"XY\", \"YZ\" or \"
|
|
1097
|
+
"description": "The reference plane: a plane element, or a coordinate plane \"XY\", \"YZ\" or \"XZ\"."
|
|
1017
1098
|
},
|
|
1018
1099
|
"relation": {
|
|
1019
1100
|
"type": "string",
|
|
@@ -1049,7 +1130,7 @@
|
|
|
1049
1130
|
{
|
|
1050
1131
|
"name": "element.fit",
|
|
1051
1132
|
"title": "Fit an element",
|
|
1052
|
-
"description": "Fit an element on the scan where the panel would take a click: a plane, sphere, cylinder, cone or torus grows its surface from the place given and is best-fitted to it; a point is the place itself; a circle goes through three or more places. `at` is one place, or a list — a feature seen in patches can be seeded on each. A place is { vertex } (a scan vertex), { point: [x, y, z] } (the nearest scan vertex to a point, mm, in the current frame), or { screen } / { candidate } (not available yet). A seed near an edge can land on the wrong surface (a cup’s underside for its inside): say what is sought — side, radius, axis, within — and surfaces that do not match are passed over; a fit that finds none is refused with the radii it saw — a round turned down for its axis with that axis, a point on it, how far off it lay and its points, to give as axis or to drop axis for. Returns the element with its fit and the seed actually used (vertex and point), so a recipe can be replayed on another scan; a surface also the region it grew to — region { area (mm²), box } and, a plane’s, normalSpreadDeg (95 % of its normals lie within it) — and a plane or a cylinder a warning when its points look like two surfaces, with region.second naming where the other lies (a cylinder’s: its share, band along the axis from the centre, axis angle, radius and how far each part’s normals lean off square to the axis). mark: true leaves the region’s points marked for element.fit_marked { marked: true }. A circle may come off an open rim of the scan instead — rim: its number from scan.qa, in place of at: fitted through the rim’s whole loop, the answer giving rim { index, points, rms }. One undo step.",
|
|
1133
|
+
"description": "Fit an element on the scan where the panel would take a click: a plane, sphere, cylinder, cone or torus grows its surface from the place given and is best-fitted to it; a point is the place itself; a circle goes through three or more places. `at` is one place, or a list — a feature seen in patches can be seeded on each. A place is { vertex } (a scan vertex), { point: [x, y, z] } (the nearest scan vertex to a point, mm, in the current frame), or { screen } / { candidate } (not available yet). A seed near an edge can land on the wrong surface (a cup’s underside for its inside): say what is sought — side, radius, axis, within — and surfaces that do not match are passed over; a fit that finds none is refused with the radii it saw — a round turned down for its axis with that axis, a point on it, how far off it lay and its points, to give as axis or to drop axis for. Returns the element with its fit and the seed actually used (vertex and point), so a recipe can be replayed on another scan — several seeds each with inRegion (whether the surface grew from it: one surface grows, from the seeds on it), offMm (how far it lies off the fitted surface along its normal, a round one’s outward) and deg (how far its normal turns from the surface’s there), and a seed left out warns where it lies: on another surface (fit each, or mark both and fit the marked), or on this one outside the region; a surface also the region it grew to — region { area (mm²), box } and, a plane’s, normalSpreadDeg (95 % of its normals lie within it) — and a plane or a cylinder a warning when its points look like two surfaces, with region.second naming where the other lies (a cylinder’s: its share, band along the axis from the centre, axis angle, radius and how far each part’s normals lean off square to the axis). A cylinder whose region grew over two surfaces one after the other along the axis — a bore stepping wider below a flange — is parted where two cylinders fit it best and the part the seed is on answered, with note and second { radius, band (mm along the axis from the centre), share }; a refusal lists the radii it turned down and why (σ over its length, arc). A bore whose axis meets the scan at an end answers closed { from, to (mm along the axis from the centre, where the axis meets the scan and leaves it), at } with a warning — a floor, or a wrap bridging a hole. A plane warns, with region.fill (the share of the rectangle it spans that it fills) and region.sagitta (how far a quadric over the region curves across it, mm), when it fills under 15 %, or its normals spread past 10° and the region is curved — the sagitta over three times what the quadric leaves: the crown of a bead or round, not a face. Relief on a flat face (lettering) spreads the normals as wide and does not warn. mark: true leaves the region’s points marked for element.fit_marked { marked: true }. A circle may come off an open rim of the scan instead — rim: its number from scan.qa, in place of at: fitted through the rim’s whole loop, the answer giving rim { index, points, rms }. One undo step.",
|
|
1053
1134
|
"input": {
|
|
1054
1135
|
"type": "object",
|
|
1055
1136
|
"properties": {
|
|
@@ -1296,6 +1377,11 @@
|
|
|
1296
1377
|
],
|
|
1297
1378
|
"description": "The outlier cut-off: residuals beyond this many sigma are left out of the fit — 3 (the default the panel starts on), 2, 1, or 0 for all points."
|
|
1298
1379
|
},
|
|
1380
|
+
"knownDiameter": {
|
|
1381
|
+
"type": "number",
|
|
1382
|
+
"description": "Sphere: the ball’s known diameter, mm — a gauge ball, a ballbar’s balls. The fit holds it and places the centre alone, which keeps the centre right on a ball scanned only partly; fit.held then gives the diameter the same points fit freely (freeDiameter — it should be close: a scan reading off moves a held centre by about as much) and how far holding it moved the centre (shift). Refused when the surface fits a sphere more than 1 mm or 10 % off it.",
|
|
1383
|
+
"exclusiveMinimum": 0
|
|
1384
|
+
},
|
|
1299
1385
|
"assumed": {
|
|
1300
1386
|
"type": "number",
|
|
1301
1387
|
"description": "The diameter the feature was designed at, mm — a sphere, cylinder or circle is then drawn and exported at it, and still reported as measured.",
|
|
@@ -1317,7 +1403,7 @@
|
|
|
1317
1403
|
"minLength": 1
|
|
1318
1404
|
}
|
|
1319
1405
|
],
|
|
1320
|
-
"description": "The reference plane: a plane element, or a coordinate plane \"XY\", \"YZ\" or \"
|
|
1406
|
+
"description": "The reference plane: a plane element, or a coordinate plane \"XY\", \"YZ\" or \"XZ\"."
|
|
1321
1407
|
},
|
|
1322
1408
|
"relation": {
|
|
1323
1409
|
"type": "string",
|
|
@@ -1475,6 +1561,11 @@
|
|
|
1475
1561
|
],
|
|
1476
1562
|
"description": "The outlier cut-off: residuals beyond this many sigma are left out of the fit — 3 (the default the panel starts on), 2, 1, or 0 for all points."
|
|
1477
1563
|
},
|
|
1564
|
+
"knownDiameter": {
|
|
1565
|
+
"type": "number",
|
|
1566
|
+
"description": "Sphere: the ball’s known diameter, mm — a gauge ball, a ballbar’s balls. The fit holds it and places the centre alone, which keeps the centre right on a ball scanned only partly; fit.held then gives the diameter the same points fit freely (freeDiameter — it should be close: a scan reading off moves a held centre by about as much) and how far holding it moved the centre (shift). Refused when the surface fits a sphere more than 1 mm or 10 % off it.",
|
|
1567
|
+
"exclusiveMinimum": 0
|
|
1568
|
+
},
|
|
1478
1569
|
"assumed": {
|
|
1479
1570
|
"type": "number",
|
|
1480
1571
|
"description": "The diameter the feature was designed at, mm — a sphere, cylinder or circle is then drawn and exported at it, and still reported as measured.",
|
|
@@ -1496,7 +1587,7 @@
|
|
|
1496
1587
|
"minLength": 1
|
|
1497
1588
|
}
|
|
1498
1589
|
],
|
|
1499
|
-
"description": "The reference plane: a plane element, or a coordinate plane \"XY\", \"YZ\" or \"
|
|
1590
|
+
"description": "The reference plane: a plane element, or a coordinate plane \"XY\", \"YZ\" or \"XZ\"."
|
|
1500
1591
|
},
|
|
1501
1592
|
"relation": {
|
|
1502
1593
|
"type": "string",
|
|
@@ -2585,7 +2676,7 @@
|
|
|
2585
2676
|
{
|
|
2586
2677
|
"name": "guide.read",
|
|
2587
2678
|
"title": "Read a guide",
|
|
2588
|
-
"description": "How to do a task with ScanRuler: the workflow, the judgement and the traps the tools’ own descriptions do not carry, written for this build — read the guide for your task, whole, before its first step, and a section again when you need it. The guides: measure — measuring a 3D scan: fitting elements, dimensions and GD&T-like checks, sections and the 2D sheet, deviation against a reference part, wall thickness, the report — by hand or as an automatic run over many scans; measure-reference — the measuring tools’ shapes with examples, what each answer costs, what each refusal means — a section at a time, as the measure guide sends you. topic: a guide, or several read in order (a guide and the ones it is read with, in one call). section: one section of one guide, by its heading — the index lists them. With no topic, the index: each guide with its sections and what each costs in tokens. Changes nothing.",
|
|
2679
|
+
"description": "How to do a task with ScanRuler: the workflow, the judgement and the traps the tools’ own descriptions do not carry, written for this build — read the guide for your task, whole, before its first step, and a section again when you need it. The guides: measure — measuring a 3D scan: fitting elements, dimensions and GD&T-like checks, sections and the 2D sheet, deviation against a reference part, wall thickness, the report — by hand or as an automatic run over many scans; measure-reference — the measuring tools’ shapes with examples, what each answer costs, what each refusal means — a section at a time, as the measure guide sends you. topic: a guide, or several read in order (a guide and the ones it is read with, in one call) — as many as fit in about 80 k characters, the rest named in next, to read in the next call. section: one section of one guide, by its heading — the index lists them. A long section with ### parts under it — a reference’s list of command shapes — is best read by those parts: section takes a ### heading too, the one part you need. With no topic, the index: each guide with its sections and what each costs in tokens. Changes nothing.",
|
|
2589
2680
|
"input": {
|
|
2590
2681
|
"type": "object",
|
|
2591
2682
|
"properties": {
|
|
@@ -2603,11 +2694,11 @@
|
|
|
2603
2694
|
"maxItems": 8
|
|
2604
2695
|
}
|
|
2605
2696
|
],
|
|
2606
|
-
"description": "A guide by its id, or several to read in order. Leave it out for the index."
|
|
2697
|
+
"description": "A guide by its id, or several to read in order — as many as fit in one answer, the rest named in next. Leave it out for the index."
|
|
2607
2698
|
},
|
|
2608
2699
|
"section": {
|
|
2609
2700
|
"type": "string",
|
|
2610
|
-
"description": "One section of the guide, by its heading (without its number, or a part of it that names one section). Only with one topic.",
|
|
2701
|
+
"description": "One section of the guide, by its heading — a ## section or a ### part of one (without its number, or a part of it that names one section). Only with one topic.",
|
|
2611
2702
|
"minLength": 1
|
|
2612
2703
|
}
|
|
2613
2704
|
},
|
|
@@ -2778,7 +2869,7 @@
|
|
|
2778
2869
|
{
|
|
2779
2870
|
"name": "scan.draft",
|
|
2780
2871
|
"title": "Read the draft against a pull",
|
|
2781
|
-
"description": "The scan’s walls that run near a pull direction — the sides a mould opens along, a side core slides along — gathered into patches, each with the angle it leans off the pull: draftDeg, positive where the wall faces partly along the pull (it lets go as the tool moves that way), negative where it faces back (a back draft, an undercut to that pull); sigmaDeg its standard error, spreadDeg the points’ own spread (mostly the scan’s normal noise); with centroid, box, area (mm²), count, facing (which way the wall faces across the pull) and turnDeg (how far that turns across the patch). Neighbouring walls are parted where the way they face jumps, so a box’s four sides are four patches, and a thin wall’s two sides (a blade, a rib) two patches facing opposite ways; a point joins a patch only while it faces within 20° of the patch’s mean, so a smooth freeform wall comes in patches that turn 40° at most. A boss’s or a hole’s round side is one patch with round: true, its facing no one way. Read it early on a moulded or cast part, along each direction the tools open: walls that lean half a degree to a few explain fits that miss by the lean. pull: the direction, any length; box: only the scan inside it; nearDeg: how far off square to the pull a wall may lean and still count (10 by default); patches: how many, the largest first (12); minArea: smaller ones left out, mm² (1); split: no patch reaches across this plane — \"symmetry\" (the scan’s mirror plane: the last measured symmetry plane, else searched for), a plane element, \"XY\", \"YZ\", \"
|
|
2872
|
+
"description": "The scan’s walls that run near a pull direction — the sides a mould opens along, a side core slides along — gathered into patches, each with the angle it leans off the pull: draftDeg, positive where the wall faces partly along the pull (it lets go as the tool moves that way), negative where it faces back (a back draft, an undercut to that pull); sigmaDeg its standard error, spreadDeg the points’ own spread (mostly the scan’s normal noise); with centroid, box, area (mm²), count, facing (which way the wall faces across the pull) and turnDeg (how far that turns across the patch). Neighbouring walls are parted where the way they face jumps, so a box’s four sides are four patches, and a thin wall’s two sides (a blade, a rib) two patches facing opposite ways; a point joins a patch only while it faces within 20° of the patch’s mean, so a smooth freeform wall comes in patches that turn 40° at most. A boss’s or a hole’s round side is one patch with round: true, its facing no one way. Read it early on a moulded or cast part, along each direction the tools open: walls that lean half a degree to a few explain fits that miss by the lean. pull: the direction, any length; box: only the scan inside it; nearDeg: how far off square to the pull a wall may lean and still count (10 by default); patches: how many, the largest first (12); minArea: smaller ones left out, mm² (1); split: no patch reaches across this plane — \"symmetry\" (the scan’s mirror plane: the last measured symmetry plane, else searched for), a plane element, \"XY\", \"YZ\", \"XZ\", or { point, normal } — each patch then says its side (1 along the plane’s normal, −1 against), and the answer the plane. Changes nothing.",
|
|
2782
2873
|
"input": {
|
|
2783
2874
|
"type": "object",
|
|
2784
2875
|
"properties": {
|
|
@@ -2841,7 +2932,7 @@
|
|
|
2841
2932
|
"oneOf": [
|
|
2842
2933
|
{
|
|
2843
2934
|
"type": "string",
|
|
2844
|
-
"description": "\"symmetry\", a plane element’s name, or \"XY\", \"YZ\", \"
|
|
2935
|
+
"description": "\"symmetry\", a plane element’s name, or \"XY\", \"YZ\", \"XZ\".",
|
|
2845
2936
|
"minLength": 1
|
|
2846
2937
|
},
|
|
2847
2938
|
{
|
|
@@ -2986,7 +3077,7 @@
|
|
|
2986
3077
|
{
|
|
2987
3078
|
"name": "scan.heightmap",
|
|
2988
3079
|
"title": "Map the scan’s heights",
|
|
2989
|
-
"description": "Where the scan is first met looking along an axis, or square onto a plane, over a grid of cells: pocket floors, ledges, a step's height, a face's tilt, a pad's tiers, an icon on a key in one call. axis is the way looked: -z (the default) looks down from above and gives the top surface's z; +z looks up from below and gives the underside's; ±x, ±y likewise. Cells lie on the two other axes in order — x, y for z; y, z for x; x, z for y — as u and v. plane, in place of axis: a plane element (id or name; its normal turned to the side the scan is not, so it looks at the face it was fitted on), a coordinate plane \"XY\", \"YZ\", \"
|
|
3080
|
+
"description": "Where the scan is first met looking along an axis, or square onto a plane, over a grid of cells: pocket floors, ledges, a step's height, a face's tilt, a pad's tiers, an icon on a key in one call. axis is the way looked: -z (the default) looks down from above and gives the top surface's z; +z looks up from below and gives the underside's; ±x, ±y likewise. Cells lie on the two other axes in order — x, y for z; y, z for x; x, z for y — as u and v. plane, in place of axis: a plane element (id or name; its normal turned to the side the scan is not, so it looks at the face it was fitted on), a coordinate plane \"XY\", \"YZ\", \"XZ\", or any other — a face of a model, say — as { origin, normal, u? }; the map then looks down the normal onto it, height is the distance from the plane along the normal, and u, v are the plane's own, laid as a sketch on that plane has them (section.render { plane } draws the same sheet) — u seeds its direction; flip turns the plane over. The answer's plane gives its frame in world: a cell's point is origin + u·U + v·V + height·normal — and, for an element or a plane given by its origin, center: where the element's centre (or that origin) lies in [u, v], for the frame's zero is the world origin's foot on the plane, not the element's centre. box: the part looked at, the scan's box by default; rays start at its face and stop at the far one. With plane, box is in the plane's frame: min and max are [u, v, height], and by default it takes in the whole scan; or box: { world: { min, max } } gives it in the world, [x, y, z] — the map takes the box round its corners in the plane's frame, so a box round a place on the part needs no working out. Where under a fifth of the cells meet the scan, scanLies says where the scan lies in the map's frame (min and max, [u, v, height] — or along the axis looked) beside the grid's span. of: height (the default); deviation — the scan's signed deviation where each ray lands (the map deviation.align or deviation.set_target measured, read off the triangle met), null where the map has no reading within its search distance; relief — the height less the surface round it (at each cell a plane fitted to its neighbours, weighed by a Gaussian smooth mm wide, three cells by default; make it about the width of what is looked for): icons, grooves, lettering and parting lines stand out of a face that curves or leans, positive proud and negative sunk. cell: mm (by default a round size that makes 40 cells on the longer side; widened to keep 1600 cells at most — and 160 and 25600 when the numbers are not returned). Returns along, across, cell, origin [u0, v0] (the grid's low corner), cols, rows and grid: rows of values (mm; heights to 0.01, deviation and relief to 0.001) from the low v up, null where there is none — grid[r][c] stands at u0 + (c + ½)·cell, v0 + (r + ½)·cell — with min, max, hit (cells met) and valued (cells with a value). levels: true returns, in place of the grid, the values gathered into levels — a pad's tiers, a pocket's floor, the face round them — the largest first (12 at most): each its height (the median), sigma, range, cells, area (mm²), sharePct of the cells counted, and box ([u, v] min and max). Of a height, the cells sloped more than slopeDeg (10° by default; 90 keeps every one) are left out first and counted as sloped — a fillet's ramp, a cone, a wall met at a glance — so two tiers a ramp joins stay two levels; a face that leans more is read by looking square onto it (plane). Two levels lie at least gap apart (mm; three times the cell-to-cell noise on the cells counted by default, 0.02 at least), and unassigned counts the cells counted that fall in none (walls, edges). Where the sloped cells are more than a fifth of those with a value, or one run of them borders a single level (a ramp off a tier that meets no other), ramps says so — \"ramps between tiers (sloped 34 %) — a section along them gives their profile\" — with the largest runs: cells, area, box and joins (the heights of the levels each borders). grid: true keeps the grid as well, false leaves it out and returns the picture. picture: true adds the map coloured by its values with coordinates in the margins and a scale (a deviation in the workspace's colour map over its range); needs the browser. Changes nothing.",
|
|
2990
3081
|
"input": {
|
|
2991
3082
|
"type": "object",
|
|
2992
3083
|
"properties": {
|
|
@@ -3010,14 +3101,39 @@
|
|
|
3010
3101
|
"description": "The highest corner, mm — [u, v, height] with plane.",
|
|
3011
3102
|
"minItems": 3,
|
|
3012
3103
|
"maxItems": 3
|
|
3104
|
+
},
|
|
3105
|
+
"world": {
|
|
3106
|
+
"type": "object",
|
|
3107
|
+
"properties": {
|
|
3108
|
+
"min": {
|
|
3109
|
+
"type": "array",
|
|
3110
|
+
"items": {
|
|
3111
|
+
"type": "number"
|
|
3112
|
+
},
|
|
3113
|
+
"description": "The lowest corner, [x, y, z] mm.",
|
|
3114
|
+
"minItems": 3,
|
|
3115
|
+
"maxItems": 3
|
|
3116
|
+
},
|
|
3117
|
+
"max": {
|
|
3118
|
+
"type": "array",
|
|
3119
|
+
"items": {
|
|
3120
|
+
"type": "number"
|
|
3121
|
+
},
|
|
3122
|
+
"description": "The highest corner, [x, y, z] mm.",
|
|
3123
|
+
"minItems": 3,
|
|
3124
|
+
"maxItems": 3
|
|
3125
|
+
}
|
|
3126
|
+
},
|
|
3127
|
+
"required": [
|
|
3128
|
+
"min",
|
|
3129
|
+
"max"
|
|
3130
|
+
],
|
|
3131
|
+
"additionalProperties": false,
|
|
3132
|
+
"description": "The box in the world, in place of min and max: with plane, the box round its corners in the plane’s frame."
|
|
3013
3133
|
}
|
|
3014
3134
|
},
|
|
3015
|
-
"required": [
|
|
3016
|
-
"min",
|
|
3017
|
-
"max"
|
|
3018
|
-
],
|
|
3019
3135
|
"additionalProperties": false,
|
|
3020
|
-
"description": "The part looked at; the scan’s box by default. In the plane’s frame with plane."
|
|
3136
|
+
"description": "The part looked at; the scan’s box by default. In the plane’s frame with plane — or world: { min, max } in the world."
|
|
3021
3137
|
},
|
|
3022
3138
|
"axis": {
|
|
3023
3139
|
"type": "string",
|
|
@@ -3046,7 +3162,7 @@
|
|
|
3046
3162
|
"minLength": 1
|
|
3047
3163
|
}
|
|
3048
3164
|
],
|
|
3049
|
-
"description": "A plane element, or a coordinate plane \"XY\", \"YZ\", \"
|
|
3165
|
+
"description": "A plane element, or a coordinate plane \"XY\", \"YZ\", \"XZ\"."
|
|
3050
3166
|
},
|
|
3051
3167
|
{
|
|
3052
3168
|
"type": "object",
|
|
@@ -3272,7 +3388,7 @@
|
|
|
3272
3388
|
{
|
|
3273
3389
|
"name": "scan.outline",
|
|
3274
3390
|
"title": "Read the scan’s outline",
|
|
3275
|
-
"description": "The scan’s outline seen along an axis, or square onto a plane, read as a sketch would draw it: a flange’s plan, a bezel’s opening, a gasket’s shape. Rays over a grid of cells (half the tolerance, widened to keep 250000 at most) find where the scan is and where it is not; the line between is traced round and each loop read as the fewest lines and arcs that follow it within tolerance (mm, 0.2 by default): straight sides are fitted as lines and met at sharp corners; an arc between two sides is that corner’s round (rounds: at, the corner’s index in points, radius and center); any other arc is a side of its own (arcs: from, the index of the point it starts at, running to the next, radius and center) — a slot’s ends; and a loop that is round all the way is one circle. axis, plane, flip and box as scan.heightmap takes them — the coordinates are u, v as it lays them (the two other axes in order, or the plane’s own). Returns loops, the largest first (loops: how many, 4 by default): each with hole (true for one inside another), area (mm²), box, points ([u, v] corners in order), rounds and arcs, or circle { center, radius, rms }, and worst — how far the traced outline strays from what is drawn, mm, with worstAt where, when it is past the tolerance. Changes nothing.",
|
|
3391
|
+
"description": "The scan’s outline seen along an axis, or square onto a plane, read as a sketch would draw it: a flange’s plan, a bezel’s opening, a gasket’s shape. Rays over a grid of cells (half the tolerance, widened to keep 250000 at most) find where the scan is and where it is not; the line between is traced round and each loop read as the fewest lines and arcs that follow it within tolerance (mm, 0.2 by default): straight sides are fitted as lines and met at sharp corners; an arc between two sides is that corner’s round (rounds: at, the corner’s index in points, radius and center); any other arc is a side of its own (arcs: from, the index of the point it starts at, running to the next, radius and center) — a slot’s ends; and a loop that is round all the way is one circle. axis, plane, flip and box as scan.heightmap takes them, box: { world: { min, max } } too — the coordinates are u, v as it lays them (the two other axes in order, or the plane’s own; plane.center is the element’s centre in them). Returns loops, the largest first (loops: how many, 4 by default): each with hole (true for one inside another), area (mm²), box, points ([u, v] corners in order), rounds and arcs, or circle { center, radius, rms }, and worst — how far the traced outline strays from what is drawn, mm, with worstAt where, when it is past the tolerance. Changes nothing.",
|
|
3276
3392
|
"input": {
|
|
3277
3393
|
"type": "object",
|
|
3278
3394
|
"properties": {
|
|
@@ -3303,7 +3419,7 @@
|
|
|
3303
3419
|
"minLength": 1
|
|
3304
3420
|
}
|
|
3305
3421
|
],
|
|
3306
|
-
"description": "A plane element, or a coordinate plane \"XY\", \"YZ\", \"
|
|
3422
|
+
"description": "A plane element, or a coordinate plane \"XY\", \"YZ\", \"XZ\"."
|
|
3307
3423
|
},
|
|
3308
3424
|
{
|
|
3309
3425
|
"type": "object",
|
|
@@ -3369,14 +3485,39 @@
|
|
|
3369
3485
|
"description": "The highest corner, mm — [u, v, height] with plane.",
|
|
3370
3486
|
"minItems": 3,
|
|
3371
3487
|
"maxItems": 3
|
|
3488
|
+
},
|
|
3489
|
+
"world": {
|
|
3490
|
+
"type": "object",
|
|
3491
|
+
"properties": {
|
|
3492
|
+
"min": {
|
|
3493
|
+
"type": "array",
|
|
3494
|
+
"items": {
|
|
3495
|
+
"type": "number"
|
|
3496
|
+
},
|
|
3497
|
+
"description": "The lowest corner, [x, y, z] mm.",
|
|
3498
|
+
"minItems": 3,
|
|
3499
|
+
"maxItems": 3
|
|
3500
|
+
},
|
|
3501
|
+
"max": {
|
|
3502
|
+
"type": "array",
|
|
3503
|
+
"items": {
|
|
3504
|
+
"type": "number"
|
|
3505
|
+
},
|
|
3506
|
+
"description": "The highest corner, [x, y, z] mm.",
|
|
3507
|
+
"minItems": 3,
|
|
3508
|
+
"maxItems": 3
|
|
3509
|
+
}
|
|
3510
|
+
},
|
|
3511
|
+
"required": [
|
|
3512
|
+
"min",
|
|
3513
|
+
"max"
|
|
3514
|
+
],
|
|
3515
|
+
"additionalProperties": false,
|
|
3516
|
+
"description": "The box in the world, in place of min and max: with plane, the box round its corners in the plane’s frame."
|
|
3372
3517
|
}
|
|
3373
3518
|
},
|
|
3374
|
-
"required": [
|
|
3375
|
-
"min",
|
|
3376
|
-
"max"
|
|
3377
|
-
],
|
|
3378
3519
|
"additionalProperties": false,
|
|
3379
|
-
"description": "Only the scan inside it; the whole scan by default."
|
|
3520
|
+
"description": "Only the scan inside it; the whole scan by default. In the plane’s frame with plane — or world: { min, max } in the world."
|
|
3380
3521
|
},
|
|
3381
3522
|
"tolerance": {
|
|
3382
3523
|
"type": "number",
|
|
@@ -3399,7 +3540,7 @@
|
|
|
3399
3540
|
{
|
|
3400
3541
|
"name": "scan.pattern",
|
|
3401
3542
|
"title": "Count the repeats round an axis",
|
|
3402
|
-
"description": "Rotational repeats about an axis — a fan's blades, a flange's holes and pads, a wheel's spokes, a gear's teeth — counted from the scan. The scan is cut square to the axis at each height in at, and each cut (only what lies between radius.min and radius.max) is turned against itself: count, the number of copies whose outlines land on each other going round (up to maxCount, 60 by default); pitchDeg, 360/count; phaseDeg, where the first copy's middle lies (under one pitch), and betweenDeg midway to the next — angles about the axis as section.cut { across: { axis, angleDeg } } takes them: 0° the coordinate axis next round (X about Z), turning by the right hand. score, 0 to 1, is how well the copies' outlines land on each other; under 0.5 nothing is taken to repeat and count is 1 (tried gives the best count and its score). Each copy in instances: angleDeg and radius of its outline's middle, offDeg from where an even spacing puts it, rms and worst — how far its outline lies from the other copies' turned onto it (the median over them), mm — and share, its outline's length against the median copy's (well under 1: the scan misses part of it, or the copy is not there). rms, worst and worstInstance over all the copies. Round outlines about the axis — a bore, a hub, a rim — are not copies: they come back as rings, each its radius, off (how far its centre lies off the axis, mm), towardDeg (which way) and rms. axis: a cylinder, cone, line or circle element, by id or name, a coordinate axis \"X\", \"Y\" or \"Z\" through the origin, or { origin, dir }. at: heights along the axis, mm, counted from the world origin's foot on it (the coordinate itself on a coordinate axis); by default 6 spread over the scan, 12 at most. Features lie at different heights and radii: cut through each, and keep radius to the ring one lies in where two share a height — in one cut the feature with the most outline sets the count, and the other reads as what its copies miss (worst). instances: false leaves the copies out. Changes nothing.",
|
|
3543
|
+
"description": "Rotational repeats about an axis — a fan's blades, a flange's holes and pads, a wheel's spokes, a gear's teeth — counted from the scan. The scan is cut square to the axis at each height in at, and each cut (only what lies between radius.min and radius.max) is turned against itself: count, the number of copies whose outlines land on each other going round (up to maxCount, 60 by default); pitchDeg, 360/count; phaseDeg, where the first copy's middle lies (under one pitch), and betweenDeg midway to the next — angles about the axis as section.cut { across: { axis, angleDeg } } takes them: 0° the coordinate axis next round (X about Z), turning by the right hand. score, 0 to 1, is how well the copies' outlines land on each other; under 0.5 nothing is taken to repeat and count is 1 (tried gives the best count and its score). Each copy in instances: angleDeg and radius of its outline's middle, offDeg from where an even spacing puts it, rms and worst — how far its outline lies from the other copies' turned onto it (the median over them), mm — and share, its outline's length against the median copy's (well under 1: the scan misses part of it, or the copy is not there). rms, worst and worstInstance over all the copies. Round outlines about the axis — a bore, a hub, a rim — are not copies: they come back as rings, each its radius, off (how far its centre lies off the axis, mm), towardDeg (which way) and rms. axis: a cylinder, cone, line or circle element, by id or name, a coordinate axis \"X\", \"Y\" or \"Z\" through the origin, or { origin, dir }. at: heights along the axis, mm, counted from the world origin's foot on it (the coordinate itself on a coordinate axis) — or points [x, y, z] in the world, each the height of its foot on the axis; by default 6 spread over the scan, 12 at most. Features lie at different heights and radii: cut through each, and keep radius to the ring one lies in where two share a height — in one cut the feature with the most outline sets the count, and the other reads as what its copies miss (worst). instances: false leaves the copies out. Changes nothing.",
|
|
3403
3544
|
"input": {
|
|
3404
3545
|
"type": "object",
|
|
3405
3546
|
"properties": {
|
|
@@ -3454,8 +3595,21 @@
|
|
|
3454
3595
|
"at": {
|
|
3455
3596
|
"type": "array",
|
|
3456
3597
|
"items": {
|
|
3457
|
-
"
|
|
3458
|
-
|
|
3598
|
+
"oneOf": [
|
|
3599
|
+
{
|
|
3600
|
+
"type": "number",
|
|
3601
|
+
"description": "mm along the axis."
|
|
3602
|
+
},
|
|
3603
|
+
{
|
|
3604
|
+
"type": "array",
|
|
3605
|
+
"items": {
|
|
3606
|
+
"type": "number"
|
|
3607
|
+
},
|
|
3608
|
+
"description": "A point in the world, mm: the height of its foot on the axis.",
|
|
3609
|
+
"minItems": 3,
|
|
3610
|
+
"maxItems": 3
|
|
3611
|
+
}
|
|
3612
|
+
]
|
|
3459
3613
|
},
|
|
3460
3614
|
"description": "Heights to cut at; 6 spread over the scan by default.",
|
|
3461
3615
|
"minItems": 1,
|
|
@@ -3501,7 +3655,7 @@
|
|
|
3501
3655
|
{
|
|
3502
3656
|
"name": "scan.qa",
|
|
3503
3657
|
"title": "Check the scan before modelling",
|
|
3504
|
-
"description": "One call before modelling, to know what the scan will and will not give: rims — the open edges of its holes (count, total length, the longest few with their number rim, length, centre and size, mm; circles: other rims a circle fits — a hole the scan did not see into); a rim that lies on a circle has circle { center, axis, radius, rms } (rms its scatter off the circle, mm), and element.fit { kind: \"circle\", rim } makes it an element; noise — the median scatter of small plane fits round a sample of vertices (mm; near 0 is a CAD tessellation) and its 90th percentile; thickness through the part along axis (x, y, z or a direction; by default the alignment’s z when the part is aligned, else the way most of the surface faces — a plate’s faces) over a grid — p5, p50, p95 (mm), and on the cells near the median (the main faces) the thickness’s linear trend as tiltDeg, how far apart faces that should be parallel are, with the way it thickens and its run from end to end; faces gives each face’s own tilt off square to the axis (topDeg, bottomDeg), so a lean of the whole part shows apart from faces out of parallel. notes: what looks wrong, plainly. Changes nothing.",
|
|
3658
|
+
"description": "One call before modelling, to know what the scan will and will not give: rims — the open edges of its holes (count, total length, the longest few with their number rim, length, centre and size, mm; circles: other rims a circle fits — a hole the scan did not see into); a rim that lies on a circle has circle { center, axis, radius, rms } (rms its scatter off the circle, mm), and element.fit { kind: \"circle\", rim } makes it an element; noise — the median scatter of small plane fits round a sample of vertices (mm; near 0 is a CAD tessellation) and its 90th percentile; thickness through the part along axis (x, y, z or a direction; by default the alignment’s z when the part is aligned, else the way most of the surface faces — a plate’s faces) over a grid — p5, p50, p95 (mm), and on the cells near the median (the main faces) the thickness’s linear trend as tiltDeg, how far apart faces that should be parallel are, with the way it thickens and its run from end to end; faces gives each face’s own tilt off square to the axis (topDeg, bottomDeg), so a lean of the whole part shows apart from faces out of parallel. notes: what looks wrong, plainly — a scanned skin with no rims at all among it, since a wrap bridges the holes it did not see through. Changes nothing.",
|
|
3505
3659
|
"input": {
|
|
3506
3660
|
"type": "object",
|
|
3507
3661
|
"properties": {
|
|
@@ -3650,7 +3804,7 @@
|
|
|
3650
3804
|
{
|
|
3651
3805
|
"name": "scan.segment",
|
|
3652
3806
|
"title": "Find the scan’s flat regions",
|
|
3653
|
-
"description": "The scan’s planar regions, found all at once: grown from the flattest places outward, a vertex joining while its normal lies within maxDeg of the region’s plane (15° by default) and it lies inside the region’s noise band; each vertex goes to one region; a region rougher than maxRms off its plane (mm, 0.05 by default) or smaller than minArea (mm², by default a square 2 % of the scan’s diagonal on a side) is given back. box: only the scan inside it. The largest first, at most limit (20); each with id (1 is the largest), normal (out of the part), point (its centroid, on the plane), sigma (RMS off the plane, mm), area (mm²), box, vertices (a count) and neighbours: the regions it meets across an edge or its rounding, each { id, deg } with the angle between their normals. symmetric: a plane element, or \"XY\", \"YZ\", \"
|
|
3807
|
+
"description": "The scan’s planar regions, found all at once: grown from the flattest places outward, a vertex joining while its normal lies within maxDeg of the region’s plane (15° by default) and it lies inside the region’s noise band; each vertex goes to one region; a region rougher than maxRms off its plane (mm, 0.05 by default) or smaller than minArea (mm², by default a square 2 % of the scan’s diagonal on a side) is given back. box: only the scan inside it. The largest first, at most limit (20); each with id (1 is the largest), normal (out of the part), point (its centroid, on the plane), sigma (RMS off the plane, mm), area (mm²), box, vertices (a count) and neighbours: the regions it meets across an edge or its rounding, each { id, deg } with the angle between their normals. symmetric: a plane element, or \"XY\", \"YZ\", \"XZ\" — each region gets mirror { id, deg, mm }: its twin across that plane (\"self\" when it straddles it), how far their planes differ in angle once mirrored and in place. mark: a region’s id, or several (their points together), leaves its points marked — element.fit_marked { marked: true } fits to them; with the same options it reuses the last run, and answers marked { points, from } and region, the marked region (a list of them for several), without the list of regions unless list: true. Returns found (regions in all), considered and claimed (vertices looked at and held by regions). Changes nothing.",
|
|
3654
3808
|
"input": {
|
|
3655
3809
|
"type": "object",
|
|
3656
3810
|
"properties": {
|
|
@@ -3725,12 +3879,30 @@
|
|
|
3725
3879
|
"minLength": 1
|
|
3726
3880
|
}
|
|
3727
3881
|
],
|
|
3728
|
-
"description": "Pair regions mirrored across this plane: a plane element, or \"XY\", \"YZ\", \"
|
|
3882
|
+
"description": "Pair regions mirrored across this plane: a plane element, or \"XY\", \"YZ\", \"XZ\"."
|
|
3729
3883
|
},
|
|
3730
3884
|
"mark": {
|
|
3731
|
-
"
|
|
3732
|
-
|
|
3733
|
-
|
|
3885
|
+
"oneOf": [
|
|
3886
|
+
{
|
|
3887
|
+
"type": "integer",
|
|
3888
|
+
"description": "A region’s id.",
|
|
3889
|
+
"minimum": 1
|
|
3890
|
+
},
|
|
3891
|
+
{
|
|
3892
|
+
"type": "array",
|
|
3893
|
+
"items": {
|
|
3894
|
+
"type": "integer",
|
|
3895
|
+
"minimum": 1
|
|
3896
|
+
},
|
|
3897
|
+
"description": "Several regions’ ids: their points together.",
|
|
3898
|
+
"minItems": 1
|
|
3899
|
+
}
|
|
3900
|
+
],
|
|
3901
|
+
"description": "Leave this region’s points marked, by its id — or several regions’."
|
|
3902
|
+
},
|
|
3903
|
+
"list": {
|
|
3904
|
+
"type": "boolean",
|
|
3905
|
+
"description": "With mark: the list of regions too, as without it."
|
|
3734
3906
|
}
|
|
3735
3907
|
},
|
|
3736
3908
|
"additionalProperties": false
|
|
@@ -3742,7 +3914,7 @@
|
|
|
3742
3914
|
{
|
|
3743
3915
|
"name": "section.cut",
|
|
3744
3916
|
"title": "Cut a section",
|
|
3745
|
-
"description": "Cut the scan with a plane and keep the cut as a section, measured in the 2D workspace (flat) — where it is put on the sheet. across is what the plane is taken across: an element with a direction (a plane, cylinder, cone, line or circle) by id or name, or a coordinate plane \"XY\", \"YZ\" or \"ZX\", which is laid through the part’s centre. Or { axis, angleDeg }: a plane through an axis — a cylinder’s, cone’s, line’s or circle’s, by id or name, or the coordinate axis \"X\", \"Y\" or \"Z\" through the origin — turned angleDeg about it: a half section of a turned part, u the distance out from the axis and v up it (towards the + end of the coordinate axis it lies nearest, whichever way the element points), normal u × v, at every angle. 0° is the coordinate axis next round (X about Z, Y about X, Z about Y) and the angle turns by the right hand about the axis — about Z, from +X towards +Y. offset slides the plane along its normal, mm — from the element, or for a coordinate plane the coordinate itself; through an axis, 0 by default. Returns the section: its plane and how many chains the cut has. One undo step.",
|
|
3917
|
+
"description": "Cut the scan with a plane and keep the cut as a section, measured in the 2D workspace (flat) — where it is put on the sheet. across is what the plane is taken across: an element with a direction (a plane, cylinder, cone, line or circle) by id or name, or a coordinate plane \"XY\", \"YZ\" or \"XZ\" (also \"ZX\"), which is laid through the part’s centre. Or { axis, angleDeg }: a plane through an axis — a cylinder’s, cone’s, line’s or circle’s, by id or name, or the coordinate axis \"X\", \"Y\" or \"Z\" through the origin — turned angleDeg about it: a half section of a turned part, u the distance out from the axis and v up it (towards the + end of the coordinate axis it lies nearest, whichever way the element points), normal u × v, at every angle. 0° is the coordinate axis next round (X about Z, Y about X, Z about Y) and the angle turns by the right hand about the axis — about Z, from +X towards +Y. offset slides the plane along its normal, mm — from the element, or for a coordinate plane the coordinate itself; through an axis, 0 by default. Returns the section: its plane and how many chains the cut has. One undo step.",
|
|
3746
3918
|
"input": {
|
|
3747
3919
|
"type": "object",
|
|
3748
3920
|
"properties": {
|
|
@@ -3755,7 +3927,7 @@
|
|
|
3755
3927
|
},
|
|
3756
3928
|
{
|
|
3757
3929
|
"type": "string",
|
|
3758
|
-
"description": "An element’s name, or a coordinate plane \"XY\", \"YZ\", \"
|
|
3930
|
+
"description": "An element’s name, or a coordinate plane \"XY\", \"YZ\", \"XZ\".",
|
|
3759
3931
|
"minLength": 1
|
|
3760
3932
|
},
|
|
3761
3933
|
{
|
|
@@ -3903,7 +4075,7 @@
|
|
|
3903
4075
|
{
|
|
3904
4076
|
"name": "section.render",
|
|
3905
4077
|
"title": "Picture a section",
|
|
3906
|
-
"description": "A picture of a section as a PNG, for checking a slice against what was built on it: the scan’s cut as points on the section’s sheet ([u, v] mm as section.get gives them, +u right, +v up), a grid ruled in millimetres with its values at the top and left margins — world coordinates where the sheet’s u or v runs along a world axis, sheet mm otherwise — the world direction across and up named in the margins (axes in the answer: per sheet axis the world axis it runs nearest, offDeg and, along it, at0, the world coordinate at the sheet’s 0), a scale bar, and over it what the workspaces’ layers draw — a model’s cut by the section’s plane as outlines, a sketch’s pieces with their ids where the sketch lies in that plane, whatever it was drawn on. Every scan point within ten tolerances of an outline is read against it: on it within ± tolerance (grey), or off it (red), outside the outline or inside it; points with no outline near are pale. The answer gives gap: points (the cut’s), read, over (red), outside and inside (of a closed outline — inside is scan within the model’s material, so the model stands proud there; outside, the model is short), max and rms (mm) and overBox (the sheet box round the red, to frame the next look); layers: each layer drawn by key, its outlines and pieces counted; map: picture pixel (column c, row r from the top) is the sheet place [left + c·unitsPerPx, top − r·unitsPerPx]. section names a section; or plane cuts the scan for the picture alone — no section is made, and the sheet is a sketch’s on that plane: zero at the world origin’s foot, u along the coordinate axis next round from the normal (YZ: u = Y, v = Z;
|
|
4078
|
+
"description": "A picture of a section as a PNG, for checking a slice against what was built on it: the scan’s cut as points on the section’s sheet ([u, v] mm as section.get gives them, +u right, +v up), a grid ruled in millimetres with its values at the top and left margins — world coordinates where the sheet’s u or v runs along a world axis, sheet mm otherwise — the world direction across and up named in the margins (axes in the answer: per sheet axis the world axis it runs nearest, offDeg and, along it, at0, the world coordinate at the sheet’s 0), a scale bar, and over it what the workspaces’ layers draw — a model’s cut by the section’s plane as outlines, a sketch’s pieces with their ids where the sketch lies in that plane, whatever it was drawn on. Every scan point within ten tolerances of an outline is read against it: on it within ± tolerance (grey), or off it (red), outside the outline or inside it; points with no outline near are pale. The answer gives gap: points (the cut’s), read, over (red), outside and inside (of a closed outline — inside is scan within the model’s material, so the model stands proud there; outside, the model is short), max and rms (mm) and overBox (the sheet box round the red, to frame the next look); layers: each layer drawn by key, its outlines and pieces counted; map: picture pixel (column c, row r from the top) is the sheet place [left + c·unitsPerPx, top − r·unitsPerPx]. section names a section; or plane cuts the scan for the picture alone — no section is made, and the sheet is a sketch’s on that plane: zero at the world origin’s foot, u along the coordinate axis next round from the normal (YZ: u = Y, v = Z; XZ: u = Z, v = X; XY: u = X, v = Y), so on a coordinate plane [u, v] are world coordinates (the answer’s sheet gives them). plane is { origin, normal }, a coordinate plane \"XY\", \"YZ\" or \"XZ\" (also \"ZX\"; through the part’s centre, as section.cut lays it — the answer’s sheet gives its origin), an element by id or name (the plane through its centre square to its direction — a plane element’s normal, a cylinder’s axis — on the sheet a sketch on it takes, not the fitter’s own axes), or { sketch } by id or name: the scan cut on that sketch’s plane, in its own frame, so [u, v] are its pieces’. A section’s own sheet counts from the part’s centre instead (across an element or through its axis, from the element’s centre). up: \"x\", \"y\" or \"z\" turns the picture’s sheet in its plane so that world axis runs up it — a side view with Z up: v is that axis laid into the plane, u the direction square to it running + to the right, the plane seen from whichever side gives that (the XZ plane with up \"z\": u = X, v = Z, seen from −Y, as a front view; a section’s sheet keeps its zero) — and everything the picture says in [u, v] (frame, map, overBox, axes) is then on that turned sheet, which the answer gives as sheet. Without up the sheet lies as above. The answer’s sheet gives the sheet in the world every time — origin, normal, basisU and basisV: a sheet point [u, v] is origin + u·basisU + v·basisV. offsets: 2 to 9 cuts in one picture — the section’s or plane’s slid along its normal by each, mm — side by side, each tile labelled with its offset, all on one frame and scale (the square round every cut unless frame is given); the answer gives per tile its offset, origin and gap, and map.tile and map.cols (map holds for each tile from its own corner). frame { at, size } looks at a square of the sheet — at as [u, v] on the sheet, or as [x, y, z] in the world, laid square onto the sheet, so a place on the part needs no working out of where the sheet counts from (framed gives where it came out on the sheet, and offPlane how far off the plane the point lay, mm) — or frame { world: { min, max } } at the square round a box of the world laid onto the sheet, a tenth wider; everything by default. tolerance: the Deviation workspace’s by default. layers: the keys to draw; every one by default, [] for the scan alone. 800 px on the long side by default, up to 2048. Needs the browser. Changes nothing.",
|
|
3907
4079
|
"input": {
|
|
3908
4080
|
"type": "object",
|
|
3909
4081
|
"properties": {
|
|
@@ -3959,7 +4131,7 @@
|
|
|
3959
4131
|
},
|
|
3960
4132
|
{
|
|
3961
4133
|
"type": "string",
|
|
3962
|
-
"description": "
|
|
4134
|
+
"description": "A coordinate plane \"XY\", \"YZ\", \"XZ\", or an element’s name.",
|
|
3963
4135
|
"minLength": 1
|
|
3964
4136
|
},
|
|
3965
4137
|
{
|
|
@@ -3985,7 +4157,7 @@
|
|
|
3985
4157
|
"additionalProperties": false
|
|
3986
4158
|
}
|
|
3987
4159
|
],
|
|
3988
|
-
"description": "A plane to cut the scan by for the picture alone, in place of a section: { origin, normal }, an element, or { sketch }."
|
|
4160
|
+
"description": "A plane to cut the scan by for the picture alone, in place of a section: { origin, normal }, a coordinate plane, an element, or { sketch }."
|
|
3989
4161
|
},
|
|
3990
4162
|
"offsets": {
|
|
3991
4163
|
"type": "array",
|
|
@@ -4013,22 +4185,47 @@
|
|
|
4013
4185
|
"items": {
|
|
4014
4186
|
"type": "number"
|
|
4015
4187
|
},
|
|
4016
|
-
"description": "The
|
|
4188
|
+
"description": "The place in the middle: [u, v] mm on the sheet, or [x, y, z] mm in the world, laid square onto the sheet.",
|
|
4017
4189
|
"minItems": 2,
|
|
4018
|
-
"maxItems":
|
|
4190
|
+
"maxItems": 3
|
|
4019
4191
|
},
|
|
4020
4192
|
"size": {
|
|
4021
4193
|
"type": "number",
|
|
4022
4194
|
"description": "The side of the square looked at, mm.",
|
|
4023
4195
|
"exclusiveMinimum": 0
|
|
4196
|
+
},
|
|
4197
|
+
"world": {
|
|
4198
|
+
"type": "object",
|
|
4199
|
+
"properties": {
|
|
4200
|
+
"min": {
|
|
4201
|
+
"type": "array",
|
|
4202
|
+
"items": {
|
|
4203
|
+
"type": "number"
|
|
4204
|
+
},
|
|
4205
|
+
"description": "The lowest corner, [x, y, z] mm.",
|
|
4206
|
+
"minItems": 3,
|
|
4207
|
+
"maxItems": 3
|
|
4208
|
+
},
|
|
4209
|
+
"max": {
|
|
4210
|
+
"type": "array",
|
|
4211
|
+
"items": {
|
|
4212
|
+
"type": "number"
|
|
4213
|
+
},
|
|
4214
|
+
"description": "The highest corner, [x, y, z] mm.",
|
|
4215
|
+
"minItems": 3,
|
|
4216
|
+
"maxItems": 3
|
|
4217
|
+
}
|
|
4218
|
+
},
|
|
4219
|
+
"required": [
|
|
4220
|
+
"min",
|
|
4221
|
+
"max"
|
|
4222
|
+
],
|
|
4223
|
+
"additionalProperties": false,
|
|
4224
|
+
"description": "A box in the world, in place of at and size: the square round it on the sheet."
|
|
4024
4225
|
}
|
|
4025
4226
|
},
|
|
4026
|
-
"required": [
|
|
4027
|
-
"at",
|
|
4028
|
-
"size"
|
|
4029
|
-
],
|
|
4030
4227
|
"additionalProperties": false,
|
|
4031
|
-
"description": "Look at a square of the sheet."
|
|
4228
|
+
"description": "Look at a square of the sheet: { at, size }, or { world: { min, max } }."
|
|
4032
4229
|
},
|
|
4033
4230
|
"tolerance": {
|
|
4034
4231
|
"type": "number",
|
|
@@ -4253,7 +4450,7 @@
|
|
|
4253
4450
|
{
|
|
4254
4451
|
"name": "view.render",
|
|
4255
4452
|
"title": "Picture the view",
|
|
4256
|
-
"description": "A picture of the 3D view as a PNG — what the person sees in the viewport, without the HTML labels over it (dimension values, names), and lit from a little above and left of the camera with more fill than the screen, so a face square to the camera keeps its shading. Give view and/or fit to turn the view first, as view.set does, or frame to frame a box or a place. show puts the scan, the reference, the sections, the elements or the labels — or what a workspace adds — on screen or away for the picture alone, by key, and back as they were after it — { scan: false } pictures what was built on the scan on its own; view.set lists the keys. section cuts everything open for the picture alone, as view.set does. width and height in pixels: the viewport’s own shape at most 800 pixels on its long side by default, enough to check a step by — ask for more (up to 2048) for a picture to keep; one of them alone keeps the viewport’s shape. views: two to six standard views in one picture, side by side, each fitted and named in its corner — iso, top, bottom and a side as one picture to look at instead of four (width and height are then the whole sheet’s; 1200 px across by default); the view stays at the last. In the Deviation workspace the answer says which map the picture shows — map: { on: \"scan\" | \"reference\", colormap, range } — or map: null and mapWhy, why none is painted (the map switch off, no map measured, the surface it is on put away) and what puts it there. With the scan shown, a reference shown with it is drawn over it as a ghost and dulls the colours (mapNote says so): show: { reference: false } gives the clean map. Waits for the session to settle first — a map being measured, on the scan or on the reference, too. Needs the viewport.",
|
|
4453
|
+
"description": "A picture of the 3D view as a PNG — what the person sees in the viewport, without the HTML labels over it (dimension values, names), and lit from a little above and left of the camera with more fill than the screen, so a face square to the camera keeps its shading. Give view and/or fit to turn the view first, as view.set does, or frame to frame a box or a place — a place’s size is the side of a square fitted in the picture, its shorter side, and the answer’s mmAcross: [width, height] says what the picture spans, mm. Only fit: true fits: a view alone turns and keeps the zoom, and a frame stays for the pictures after it — the answer says fitted, and framedEarlier: { box | at, size } while the camera still stands on an earlier frame (fit: true pictures it whole). show puts the scan, the reference, the sections, the elements or the labels — or what a workspace adds — on screen or away for the picture alone, by key, and back as they were after it — { scan: false } pictures what was built on the scan on its own; view.set lists the keys. section cuts everything open for the picture alone, as view.set does. width and height in pixels: the viewport’s own shape at most 800 pixels on its long side by default, enough to check a step by — ask for more (up to 2048) for a picture to keep; one of them alone keeps the viewport’s shape. views: two to six standard views in one picture, side by side, each fitted and named in its corner — iso, top, bottom and a side as one picture to look at instead of four (width and height are then the whole sheet’s; 1200 px across by default); the view stays at the last. In the Deviation workspace the answer says which map the picture shows — map: { on: \"scan\" | \"reference\", colormap, range } — or map: null and mapWhy, why none is painted (the map switch off, no map measured, the surface it is on put away) and what puts it there. With the scan shown, a reference shown with it is drawn over it as a ghost and dulls the colours (mapNote says so): show: { reference: false } gives the clean map. In another workspace, with a deviation map measured, map: null and mapWhy say it paints in the Deviation workspace alone (workspace.set deviation); a workspace that colours the part its own way answers map or mapWhy for its own. A workspace’s key that is off in the picture, and not put away by show, may say why and what shows it under <key>Why. Waits for the session to settle first — a map being measured, on the scan or on the reference, too. Pictures and view.set take the viewport one at a time: two asked for together come back as two, one after the other. Needs the viewport.",
|
|
4257
4454
|
"input": {
|
|
4258
4455
|
"type": "object",
|
|
4259
4456
|
"properties": {
|
|
@@ -4371,7 +4568,7 @@
|
|
|
4371
4568
|
},
|
|
4372
4569
|
"size": {
|
|
4373
4570
|
"type": "number",
|
|
4374
|
-
"description": "
|
|
4571
|
+
"description": "The side of the square the picture is fitted round, mm — its shorter side, in any view, the iso too: 40 in an 800 × 450 picture is 40 tall and 71 wide (mmAcross in the answer).",
|
|
4375
4572
|
"exclusiveMinimum": 0
|
|
4376
4573
|
}
|
|
4377
4574
|
},
|
|
@@ -4380,7 +4577,7 @@
|
|
|
4380
4577
|
"size"
|
|
4381
4578
|
],
|
|
4382
4579
|
"additionalProperties": false,
|
|
4383
|
-
"description": "A place in the middle of a view `size` mm
|
|
4580
|
+
"description": "A place in the middle of a view, a square `size` mm on a side fitted in it."
|
|
4384
4581
|
}
|
|
4385
4582
|
],
|
|
4386
4583
|
"description": "Frame a box or a place instead of everything shown — a corner or a fillet looked at closely; the direction looked from stays, and fit is left alone."
|
|
@@ -4407,7 +4604,7 @@
|
|
|
4407
4604
|
"minLength": 1
|
|
4408
4605
|
}
|
|
4409
4606
|
],
|
|
4410
|
-
"description": "A coordinate plane \"XY\", \"YZ\", \"
|
|
4607
|
+
"description": "A coordinate plane \"XY\", \"YZ\", \"XZ\", or an element with a direction."
|
|
4411
4608
|
},
|
|
4412
4609
|
"offset": {
|
|
4413
4610
|
"type": "number",
|
|
@@ -4436,7 +4633,7 @@
|
|
|
4436
4633
|
{
|
|
4437
4634
|
"name": "view.set",
|
|
4438
4635
|
"title": "Turn the view",
|
|
4439
|
-
"description": "Turn the 3D view to a standard view and/or fit everything shown into the frame — with neither given, it fits — or frame a box or a place (frame). show puts the scan, the reference, the sections, the elements or the labels on screen or away, by key, and leaves them so — { scan: false } to look at what was built on the scan without it. section cuts everything open at a plane to look inside, and leaves it so. It waits for the session to settle first (a fit, a map, a rebuild), so what was just made is in the frame. Not a step of the history. Needs the viewport. Returns the view, the section view (null when off) and, under shown, every key that can be shown now and whether it is.",
|
|
4636
|
+
"description": "Turn the 3D view to a standard view and/or fit everything shown into the frame — with neither given, it fits — or frame a box or a place (frame); the zoom a frame leaves stays for what comes after it, a standard view without fit included. show puts the scan, the reference, the sections, the elements or the labels on screen or away, by key, and leaves them so — { scan: false } to look at what was built on the scan without it. section cuts everything open at a plane to look inside, and leaves it so. It waits for the session to settle first (a fit, a map, a rebuild), so what was just made is in the frame. Not a step of the history. Needs the viewport. Returns the view, fitted (whether it fitted), framed (the frame asked), framedEarlier (the frame of an earlier call the camera still stands on, not fitted since), mmAcross ([width, height], mm the viewport spans), the section view (null when off) and, under shown, every key that can be shown now and whether it is — a workspace’s key that is off, and not put away by show, may say why and what shows it under <key>Why.",
|
|
4440
4637
|
"input": {
|
|
4441
4638
|
"type": "object",
|
|
4442
4639
|
"properties": {
|
|
@@ -4523,7 +4720,7 @@
|
|
|
4523
4720
|
},
|
|
4524
4721
|
"size": {
|
|
4525
4722
|
"type": "number",
|
|
4526
|
-
"description": "
|
|
4723
|
+
"description": "The side of the square the picture is fitted round, mm — its shorter side, in any view, the iso too: 40 in an 800 × 450 picture is 40 tall and 71 wide (mmAcross in the answer).",
|
|
4527
4724
|
"exclusiveMinimum": 0
|
|
4528
4725
|
}
|
|
4529
4726
|
},
|
|
@@ -4532,7 +4729,7 @@
|
|
|
4532
4729
|
"size"
|
|
4533
4730
|
],
|
|
4534
4731
|
"additionalProperties": false,
|
|
4535
|
-
"description": "A place in the middle of a view `size` mm
|
|
4732
|
+
"description": "A place in the middle of a view, a square `size` mm on a side fitted in it."
|
|
4536
4733
|
}
|
|
4537
4734
|
],
|
|
4538
4735
|
"description": "Frame a box or a place instead of everything shown — a corner or a fillet looked at closely; the direction looked from stays, and fit is left alone."
|
|
@@ -4559,7 +4756,7 @@
|
|
|
4559
4756
|
"minLength": 1
|
|
4560
4757
|
}
|
|
4561
4758
|
],
|
|
4562
|
-
"description": "A coordinate plane \"XY\", \"YZ\", \"
|
|
4759
|
+
"description": "A coordinate plane \"XY\", \"YZ\", \"XZ\", or an element with a direction."
|
|
4563
4760
|
},
|
|
4564
4761
|
"offset": {
|
|
4565
4762
|
"type": "number",
|