diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index c85a1e19..7c2ceeae 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -37,8 +37,8 @@ Generated-in-code assets are original and have no file to list: | assets/icon.iconset/icon_512x512.png | SolidCraft contributors | native sips export from assets/icon.png | MIT OR Apache-2.0 | | assets/icon.iconset/icon_512x512@2x.png | SolidCraft contributors | native sips export from assets/icon.png | MIT OR Apache-2.0 | | docs/screenshots/sample-plate.png | SolidCraft contributors | screenshot of SolidCraft itself (`solidcraft --sample`) | MIT OR Apache-2.0 | -| docs/screenshots/demo-0.6.gif | SolidCraft contributors | original screen recording of the actual SolidCraft 0.6 English desktop UI modelling an original Raspberry Pi 4 case (no logos or branding), generated with examples/demo/record_ui.sh and its original animated pointer overlay (6× playback) | MIT OR Apache-2.0 | -| docs/screenshots/demo-0.6.mp4 | SolidCraft contributors | original screen recording of the actual SolidCraft 0.6 English desktop UI modelling an original Raspberry Pi 4 case (no logos or branding), generated with examples/demo/record_ui.sh and its original animated pointer overlay (6× playback) | MIT OR Apache-2.0 | +| docs/screenshots/demo-0.8.gif | SolidCraft contributors | original screen recording of the actual SolidCraft 0.8 English desktop UI modelling an original Raspberry Pi 4 case (no logos or branding; the engraved text is set in the system's DejaVu Sans Bold), generated with examples/demo/record_ui.sh and its original animated pointer overlay (9× playback) | MIT OR Apache-2.0 | +| docs/screenshots/demo-0.8.mp4 | SolidCraft contributors | original screen recording of the actual SolidCraft 0.8 English desktop UI modelling an original Raspberry Pi 4 case (no logos or branding; the engraved text is set in the system's DejaVu Sans Bold), generated with examples/demo/record_ui.sh and its original animated pointer overlay (9× playback) | MIT OR Apache-2.0 | | docs/book/src/og.png | SolidCraft contributors | original 1280 × 640 social preview card (the SolidCraft mark, name and tagline), served by the docs site for link previews | MIT OR Apache-2.0 | | docs/book/src/generated/sample-plate.png | SolidCraft contributors | copy of docs/screenshots/sample-plate.png made by `cargo xtask book` (gitignored) | MIT OR Apache-2.0 | | docs/book/src/generated/bracket.png | SolidCraft contributors | rendered by `cargo xtask book` (`solidcraft-cli snapshot examples/bracket.json`; gitignored) | MIT OR Apache-2.0 | diff --git a/README.md b/README.md index 7ea77180..89bbb1f4 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ Sketch, constrain, and build solids with a parametric feature timeline. Change a and watch your model rebuild. Run it on your desktop, in your browser, or let AI agents model through the built-in MCP server. -![SolidCraft 0.6: model a Raspberry Pi 4 case from an empty design: a sketch dimensioned with parameters, extrude, fillets and shell, standoffs patterned on the board's mounting holes, port cut-outs, vent slots, a colour and a height change in Parameters](docs/screenshots/demo-0.6.gif) +![SolidCraft 0.8: model a Raspberry Pi 4 case from an empty design: a sketch dimensioned with parameters, extrude, fillets and shell, a rim rounded in one pick, standoffs patterned on the board's mounting holes, port cut-outs, vent slots, "Pi 4" engraved in a font, a PETG material with its mass in Properties, and a height change in Parameters](docs/screenshots/demo-0.8.gif) -*A Raspberry Pi 4 case from an empty design: a sketch dimensioned with the board's parameters, extrude, fillet, shell, an M2.5 standoff patterned on the 58 × 49 mm hole rectangle, port cut-outs, vent slots and a colour, then height 24 → 32 mm in Parameters and it all rebuilds. 6× playback. [Full video](https://github.com/bherbruck/solidcraft/raw/refs/heads/main/docs/screenshots/demo-0.6.mp4), recorded with the [demo script](examples/demo/record_ui.sh).* +*A Raspberry Pi 4 case from an empty design: a sketch dimensioned with the board's parameters, extrude, fillet, shell, the rim rounded in one pick, an M2.5 standoff patterned on the 58 × 49 mm hole rectangle, port cut-outs, vent slots, "Pi 4" engraved in DejaVu Sans Bold and a PETG material defined in the design, with its mass in Properties, then height 24 → 32 mm in Parameters and it all rebuilds. 9× playback. [Full video](https://github.com/bherbruck/solidcraft/raw/refs/heads/main/docs/screenshots/demo-0.8.mp4), recorded with the [demo script](examples/demo/record_ui.sh).* ## Download diff --git a/docs/action-matrix.md b/docs/action-matrix.md index 8c9811c1..512e44fb 100644 --- a/docs/action-matrix.md +++ b/docs/action-matrix.md @@ -37,7 +37,9 @@ lists which still fail; skip `action_matrix_` to leave out the matrix itself). - `oracle/*`: the 76 reference recipes, rebuilt (`solidcraft-cli recipe`). - `demo/enclosure_steps`: the electronics enclosure built over MCP; `demo/pi-case`: the Raspberry Pi 4 case of the 0.6 README demo, built through the desktop UI - and saved by `examples/demo/enclosure_ui_mcp.py --story pi --save`. + and saved by `examples/demo/enclosure_ui_mcp.py --story pi-0.6 --save`; + `demo/pi-case-0.8`: the 0.8 README demo's case (`--story pi`), with a rounded rim, engraved + text and a PETG material. - `typical/*`: [`tests/action_matrix/designs`](../tests/action_matrix/designs/), parts made the ordinary way: a stacked extrude, a filleted and shelled box, a revolved knob, a plate with a counterbored hole patterned 3 × 2 and a chamfered outline, a sheet metal L bracket with holes, a diff --git a/docs/screenshots/demo-0.6.gif b/docs/screenshots/demo-0.8.gif similarity index 53% rename from docs/screenshots/demo-0.6.gif rename to docs/screenshots/demo-0.8.gif index 3a1d5f07..af80e2c4 100644 Binary files a/docs/screenshots/demo-0.6.gif and b/docs/screenshots/demo-0.8.gif differ diff --git a/docs/screenshots/demo-0.6.mp4 b/docs/screenshots/demo-0.8.mp4 similarity index 52% rename from docs/screenshots/demo-0.6.mp4 rename to docs/screenshots/demo-0.8.mp4 index 62fe154e..bae76463 100644 Binary files a/docs/screenshots/demo-0.6.mp4 and b/docs/screenshots/demo-0.8.mp4 differ diff --git a/examples/demo/enclosure_ui_mcp.py b/examples/demo/enclosure_ui_mcp.py index f6f467dd..586d1038 100644 --- a/examples/demo/enclosure_ui_mcp.py +++ b/examples/demo/enclosure_ui_mcp.py @@ -2,10 +2,12 @@ """Demo v2/v3: build an electronics enclosure in a running SolidCraft the way a person would, with the parametric steps sent over MCP. ---story pi (default, the 0.6 README demo): a case for a Raspberry Pi 4, from a sketch dimensioned -with the board's parameters to standoffs patterned on its mounting holes, port cut-outs, vent -slots, a colour and a height change in the Parameters dialog. Camera moves orbit about the +--story pi (default, the 0.8 README demo): a case for a Raspberry Pi 4, from a sketch dimensioned +with the board's parameters to standoffs patterned on its mounting holes, the rim rounded in one +pick, port cut-outs, vent slots, "Pi 4" engraved in DejaVu Sans Bold, a PETG material with its +mass in Properties and a height change in the Parameters dialog. Camera moves orbit about the model under the pointer. +--story pi-0.6: the 0.6 README demo, with a colour instead of the rim, text and material. --story v3: one standoff placed from the parameters and patterned 2 x 2 in the Rectangular Pattern dialog, then width and wall changed in the Parameters dialog. --story v2: four standoffs from one sketch, then the width changed over MCP. @@ -225,7 +227,7 @@ def build_box(d, params): d.settle_camera() d.caption("Center rectangle from the origin", "UI click") - d.tool("sketch.rectangle.center") + d.tool("sketch.rectangle.center", panel="family:Rectangle") d.click(d.at(sketch=[0, 0]), settle=0.15) d.click(d.at(sketch=[40, 30]), dur=0.45, settle=0.2) d.key("Escape") @@ -276,7 +278,7 @@ def build_box(d, params): d.tool("sketch.create") d.click(d.at(world=[40, 10, 20]), settle=0.9) d.settle_camera() - d.tool("sketch.rectangle.center") + d.tool("sketch.rectangle.center", panel="family:Rectangle") d.click(d.at(world=[40, 0, 12]), settle=0.15) d.click(d.at(world=[40, 6, 15.5]), dur=0.4, settle=0.2) d.key("Escape") @@ -429,7 +431,7 @@ def rectangle(d, centre, half): """A centre rectangle drawn on the active sketch's face with world-space picks (`half` is the corner's offset from `centre`); returns its four sides' ids.""" before = {c["id"] for c in sketch_curves(d)} - d.tool("sketch.rectangle.center") + d.tool("sketch.rectangle.center", panel="family:Rectangle") d.click(d.at(world=centre), settle=0.15) d.click(d.at(world=[c + h for c, h in zip(centre, half)]), dur=0.35, settle=0.2) d.key("Escape") @@ -472,11 +474,95 @@ def last_feature(d): HOLE = (-(85 / 2 - 3.5), -(56 / 2 - 3.5)) -def run_pi(d): - """pi (the 0.6 README demo): a case for a Raspberry Pi 4. A sketch dimensioned from the +def colour(d): + """0.6: drag ABS red from the Appearance dialog onto the case.""" + d.caption("Give it a colour") + D = 33.0 + d.key("A") + d.wait(0.3) + d.drag(swatch(d, 1, 5), d.at(world=[0, -D, 18]), steps=30) + # The dialog adds a note under the swatches: let it lay out before finding OK. + d.glide((1500, 700), 0.3) + d.settle_camera() + d.click(d.at(handle="dialog:OK"), settle=0.4) + if "Appearance" in (d.ui("ui.inspect").get("dialog") or ""): + raise RuntimeError("the Appearance dialog did not close") + + +def engrave(d): + """0.8: "Pi 4" in DejaVu Sans Bold, engraved 0.6 mm into the floor behind the vents.""" + d.caption("Engrave “Pi 4” in the floor") + d.tool("sketch.create") + d.click(d.at(world=[-5, 18, 2]), settle=0.9) + d.settle_camera() + d.tool("sketch.text", panel="panel:SKETCH:CREATE") + d.click(d.at(world=[-9, 20, 2]), settle=0.4) + d.ui("ui.text", {"text": "Pi 4"}) + d.wait(0.6) + d.ui("ui.key", {"key": "Enter"}) + d.wait(0.4) + d.settle_camera() + d.caption("Font: DejaVu Sans Bold, 6 mm") + link = next(l["id"] for l in inspect_sketch(d)["links"] if l["kind"] == "text") + d.execute("sketch.edit_text", {"link": link, "font": "DejaVu Sans Bold", "height": 6}) + # Centre it on the free floor between the vents and the back wall. + sk = inspect_sketch(d) + pts = [c[k] for c in sk["curves"] if c.get("link") == link for k in ("start_at", "end_at") if k in c] + x0, x1 = min(p[0] for p in pts), max(p[0] for p in pts) + y0, y1 = min(p[1] for p in pts), max(p[1] for p in pts) + at = next(l["source"]["at"] for l in sk["links"] if l["id"] == link) + d.execute("sketch.edit_text", {"link": link, "at": [round(at[0] - (x0 + x1) / 2, 2), round(at[1] + 22.5 - (y0 + y1) / 2, 2)]}) + d.wait(0.6) + sk = inspect_sketch(d) + letters = {c["id"] for c in sk["curves"] if c.get("link") == link} + profiles = [p for p in sk["profiles"] if set(p["curves"]) <= letters] + counters = {frozenset(h) for p in profiles for h in p["holes"]} + loops = [p["curves"] for p in profiles if frozenset(p["curves"]) not in counters] + d.tool("sketch.finish") + d.view("home", 0.4) + extrude(d, loops, "-0.6 mm") + + +def material(d): + """0.8: a PETG physical material defined in the design and assigned to the case over MCP, + then the mass it gives in Properties (the body's browser menu).""" + d.caption("PETG: a material of its own, 1.27 g/cm³") + d.execute("material.create", {"name": "PETG", "density_g_cm3": 1.27, "color": "#2a8696"}) + d.execute("material.assign", {"bodies": ["Body1"], "material": "PETG"}) + d.wait(0.6) + d.caption("Properties: material and mass") + body = d.at(handle="row:Body1") + d.glide(body, 0.3) + d.ui("ui.click", {"x": body[0], "y": body[1], "button": "right"}) + d.mark(cursor=list(body), click=True) + d.wait(0.4) + d.settle_camera() + d.click(d.at(handle="menu:ui.properties"), settle=0.5) + # Real seconds, not scaled by --speed: long enough to read at playback speed. + time.sleep(PROPERTIES_HOLD) + d.click(PROPERTIES_CLOSE, settle=0.3) + d.key("Escape") + + +# Seconds the Properties window stays up (about 1.5 s at 8-9x playback). +PROPERTIES_HOLD = 13.0 +# The Properties window's close button (it opens centred on the 1920 x 1080 window). +PROPERTIES_CLOSE = (1112.0, 387.0) + + +def inspect_sketch(d): + sk = json.loads(d.mcp.tool("execute", {"command": "sketch.inspect", "params": {}})) + return sk.get("result", sk) + + +def run_pi(d, release="0.8"): + """pi (the 0.8 README demo): a case for a Raspberry Pi 4. A sketch dimensioned from the board's parameters, extrude, fillets and shell, one standoff with its M2.5 hole patterned on the board's 58 x 49 mm hole rectangle, port cut-outs on a side and an end, a row of vent - slots, a colour, then the height changed in the Parameters dialog.""" + slots, then the height changed in the Parameters dialog. 0.8 also rounds the top rim, + engraves "Pi 4" in a font into the floor and makes the case PETG (a material defined + in the design) with its mass in Properties; 0.6 (`--story pi-0.6`) gave it a colour instead.""" + v08 = release == "0.8" d.caption("A case for a Raspberry Pi 4") for name, expr in [("board_w", "85 mm"), ("board_d", "56 mm"), ("wall", "2 mm"), ("height", "24 mm")]: d.execute("parameters.change", {"name": name, "expression": expr}) @@ -487,7 +573,7 @@ def run_pi(d): d.tool("sketch.create") d.click(d.at(plane="XY"), settle=0.8) d.settle_camera() - d.tool("sketch.rectangle.center") + d.tool("sketch.rectangle.center", panel="family:Rectangle") d.click(d.at(sketch=[0, 0]), settle=0.15) d.click(d.at(sketch=[W, D]), dur=0.45, settle=0.2) d.key("Escape") @@ -523,6 +609,13 @@ def run_pi(d): d.click(d.at(world=[0, 0, H]), settle=0.3) d.type("wall") + if v08: + # Before the port cuts, so the rim's edges are whole when it is picked. + d.caption("Round the rim in one pick") + d.tool("solid.fillet") + d.click(d.at(world=[0, D, H]), settle=0.3) + d.type("1") + d.caption("A standoff with an M2.5 hole") hx, hy = HOLE d.tool("sketch.create") @@ -595,16 +688,11 @@ def run_pi(d): extrude(d, [loop], "-wall") pattern(d, last_feature(d), [([W, 0, 0], 5, "7 mm")]) - d.caption("Give it a colour") - d.key("A") - d.wait(0.3) - d.drag(swatch(d, 1, 5), d.at(world=[0, -D, 18]), steps=30) - # The dialog adds a note under the swatches: let it lay out before finding OK. - d.glide((1500, 700), 0.3) - d.settle_camera() - d.click(d.at(handle="dialog:OK"), settle=0.4) - if "Appearance" in (d.ui("ui.inspect").get("dialog") or ""): - raise RuntimeError("the Appearance dialog did not close") + if v08: + engrave(d) + material(d) + else: + colour(d) d.caption("Change a parameter: height 24 → 32 mm") d.tool("parameters.change", panel="panel:SOLID:CONFIGURE") @@ -637,7 +725,7 @@ def main(): ap.add_argument("--port", type=int, default=7878, help="the app's --control port") ap.add_argument("--cli", default="solidcraft-cli", help="path to solidcraft-cli") ap.add_argument("--log", help="write a JSON line per caption and pointer event") - ap.add_argument("--story", choices=["v2", "v3", "pi"], default="pi", help="v2: standoffs from one sketch, width over MCP; v3: one standoff patterned, Parameters dialog; pi: the 0.6 README demo, a Raspberry Pi 4 case") + ap.add_argument("--story", choices=["v2", "v3", "pi", "pi-0.6"], default="pi", help="v2: standoffs from one sketch, width over MCP; v3: one standoff patterned, Parameters dialog; pi: the 0.8 README demo, a Raspberry Pi 4 case; pi-0.6: the 0.6 one") ap.add_argument("--until", type=int, default=10**6, help="stop before step N (trying the script out)") ap.add_argument("--speed", type=float, default=0.55, help="scale the pauses (2 = twice as long)") ap.add_argument("--save", help="save the completed healthy enclosure and measured proof") @@ -650,7 +738,7 @@ def main(): mcp.send("notifications/initialized", notify=True) d = Demo(a.port, mcp, open(a.log, "w") if a.log else None, a.speed, a.minimum_caption) # The pi story's camera moves orbit about the point under the pointer (Preferences > Navigation). - d.ui("ui.prefs", {"language": "en", "theme": "dark", "ui_scale": 1, "nav": "fusion", "orbit_cursor": a.story == "pi", "button": "apply"}) + d.ui("ui.prefs", {"language": "en", "theme": "dark", "ui_scale": 1, "nav": "fusion", "orbit_cursor": a.story.startswith("pi"), "button": "apply"}) d.ui("ui.resize", {"width": 1920, "height": 1080}) d.ui("ui.home", {"open": False}) d.ui("ui.documents", {"action": "new"}) @@ -660,10 +748,10 @@ def main(): d.stop = a.until - 1 t0 = time.time() try: - {"v2": run_v2, "v3": run_v3, "pi": run_pi}[a.story](d) + {"v2": run_v2, "v3": run_v3, "pi": run_pi, "pi-0.6": lambda d: run_pi(d, "0.6")}[a.story](d) except StopIteration: pass - if a.story == "pi" and a.until == 10**6: + if a.story.startswith("pi") and a.until == 10**6: # Check the finished case without changing what is on screen. d.settle_camera() design = d.ui("document.inspect", {"measure": True}) diff --git a/examples/demo/record_ui.sh b/examples/demo/record_ui.sh index 105e163b..5606eea9 100755 --- a/examples/demo/record_ui.sh +++ b/examples/demo/record_ui.sh @@ -1,6 +1,6 @@ #!/bin/bash -# record_ui.sh DISPLAY PORT OUTDIR [STORY] [PLAYBACK_RATE]: record enclosure_ui_mcp.py --story STORY (v2, v3 -# or pi, default pi) driving the app on X display DISPLAY (1920x1080, started with --control PORT) to +# record_ui.sh DISPLAY PORT OUTDIR [STORY] [PLAYBACK_RATE]: record enclosure_ui_mcp.py --story STORY (v2, v3, +# pi or pi-0.6, default pi) driving the app on X display DISPLAY (1920x1080, started with --control PORT) to # OUTDIR/enclosure-demo-STORY.mp4 (H.264) and .gif, with captions and a drawn pointer (the app # gets synthetic pointer events, so the screen's own pointer never moves). Needs ffmpeg with # x11grab and libass. @@ -9,8 +9,8 @@ # minimum real-time caption duration, and HOLD keeps the live completed model on screen. # For a readable 4x preview use SOLIDCRAFT_DEMO_CAPTION=4 and SOLIDCRAFT_DEMO_HOLD=8. # SOLIDCRAFT_DEMO_GIF_WIDTH and SOLIDCRAFT_DEMO_GIF_FPS size the README GIF (default 800 px, 10 fps). -# The README demo (0.6): SOLIDCRAFT_DEMO_NAME=demo-0.6 SOLIDCRAFT_DEMO_PAUSE=0.4 SOLIDCRAFT_DEMO_CAPTION=7 -# SOLIDCRAFT_DEMO_HOLD=8 record_ui.sh :74 7974 OUT pi 6 +# The README demo (0.8): SOLIDCRAFT_DEMO_NAME=demo-0.8 SOLIDCRAFT_DEMO_PAUSE=0.4 SOLIDCRAFT_DEMO_CAPTION=9 +# SOLIDCRAFT_DEMO_HOLD=10 record_ui.sh :74 7974 OUT pi 9 set -e DISP=${1:-:0}; PORT=${2:-7878}; OUT=$(cd "${3:-.}" && pwd); STORY=${4:-pi}; RATE=${5:-1} HERE=$(cd "$(dirname "$0")" && pwd) diff --git a/tests/action_matrix/designs/pi-case-0.8.solidcraft b/tests/action_matrix/designs/pi-case-0.8.solidcraft new file mode 100644 index 00000000..85f1420f --- /dev/null +++ b/tests/action_matrix/designs/pi-case-0.8.solidcraft @@ -0,0 +1,4371 @@ +{ + "format": "solidcraft/16", + "name": "enclosure-pi", + "units": "mm", + "params": [ + { + "name": "board_w", + "expr": "85 mm", + "unit": "mm", + "model": false + }, + { + "name": "board_d", + "expr": "56 mm", + "unit": "mm", + "model": false + }, + { + "name": "wall", + "expr": "2 mm", + "unit": "mm", + "model": false + }, + { + "name": "height", + "expr": "32 mm", + "unit": "mm", + "model": false + }, + { + "name": "d1", + "expr": "board_w + 10 mm", + "unit": "mm", + "model": true + }, + { + "name": "d2", + "expr": "board_d + 10 mm", + "unit": "mm", + "model": true + }, + { + "name": "d7", + "expr": "board_w / 2 - 3.5 mm", + "unit": "mm", + "model": true + }, + { + "name": "d8", + "expr": "board_d / 2 - 3.5 mm", + "unit": "mm", + "model": true + }, + { + "name": "d9", + "expr": "6 mm", + "unit": "mm", + "model": true + }, + { + "name": "d10", + "expr": "2.5 mm", + "unit": "mm", + "model": true + } + ], + "features": [ + { + "id": 1, + "name": "Sketch1", + "suppressed": false, + "type": "sketch", + "plane": { + "type": "origin", + "name": "XY" + }, + "sketch": { + "points": [ + { + "id": "origin", + "pos": [ + 0.0, + 0.0 + ], + "fixed": true + }, + { + "id": "p1", + "pos": [ + -47.5, + -33.0 + ], + "fixed": false + }, + { + "id": "p2", + "pos": [ + 47.5, + -33.0 + ], + "fixed": false + }, + { + "id": "p3", + "pos": [ + 47.5, + 33.0 + ], + "fixed": false + }, + { + "id": "p4", + "pos": [ + -47.5, + 33.0 + ], + "fixed": false + }, + { + "id": "p5", + "pos": [ + 0.0, + 0.0 + ], + "fixed": false + } + ], + "curves": [ + { + "id": "l1", + "type": "line", + "a": 1, + "b": 2, + "construction": false + }, + { + "id": "l2", + "type": "line", + "a": 2, + "b": 3, + "construction": false + }, + { + "id": "l3", + "type": "line", + "a": 3, + "b": 4, + "construction": false + }, + { + "id": "l4", + "type": "line", + "a": 4, + "b": 1, + "construction": false + }, + { + "id": "l5", + "type": "line", + "a": 1, + "b": 3, + "construction": true + }, + { + "id": "l6", + "type": "line", + "a": 2, + "b": 4, + "construction": true + } + ], + "constraints": [ + { + "id": "k1", + "type": "horizontal", + "l": 0 + }, + { + "id": "k2", + "type": "horizontal", + "l": 2 + }, + { + "id": "k3", + "type": "vertical", + "l": 1 + }, + { + "id": "k4", + "type": "vertical", + "l": 3 + }, + { + "id": "k5", + "type": "midpoint", + "p": 5, + "l": 4 + }, + { + "id": "k6", + "type": "coincident", + "p": 0, + "q": 5 + }, + { + "id": "k7", + "type": "length", + "l": 2, + "value": 95.0, + "param": "d1", + "text": [ + 0.0, + -8.0 + ] + }, + { + "id": "k8", + "type": "length", + "l": 3, + "value": 66.0, + "param": "d2", + "text": [ + -0.0, + -8.0 + ] + } + ], + "counters": { + "k": 8, + "l": 6, + "p": 5 + } + } + }, + { + "id": 2, + "name": "Extrude1", + "suppressed": false, + "param_names": [ + "d3" + ], + "type": "extrude", + "sketch": 1, + "profiles": { + "type": "curves", + "loops": [ + [ + "l1", + "l2", + "l3", + "l4" + ] + ] + }, + "extent": { + "distance": "height", + "direction": "positive" + }, + "operation": "new_body" + }, + { + "id": 3, + "name": "Fillet1", + "suppressed": false, + "param_names": [ + "d4" + ], + "edge_refs": [ + { + "dir": [ + 0.0, + 0.0, + 1.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.5, + 33.0, + 24.0 + ] + }, + { + "dir": [ + 0.0, + 0.0, + -1.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.5, + 33.0, + 24.0 + ] + }, + { + "dir": [ + 0.0, + 0.0, + 1.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.5, + 33.0, + 24.0 + ] + }, + { + "dir": [ + 0.0, + 0.0, + 1.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.5, + 33.0, + 24.0 + ] + } + ], + "edge_names": [ + "F2:side:l1|F2:side:l2", + "F2:side:l1|F2:side:l4", + "F2:side:l2|F2:side:l3", + "F2:side:l3|F2:side:l4" + ], + "type": "fillet", + "edges": [ + [ + 47.5, + -33.0, + 12.0 + ], + [ + -47.5, + -33.0, + 12.0 + ], + [ + 47.5, + 33.0, + 12.0 + ], + [ + -47.5, + 33.0, + 12.0 + ] + ], + "radius": "5" + }, + { + "id": 4, + "name": "Shell1", + "suppressed": false, + "param_names": [ + "d5" + ], + "face_names": [ + "F2:top" + ], + "type": "shell", + "faces": [ + [ + 9.814026498133899e-7, + -4.161589913564967e-6, + 23.999999999999943 + ] + ], + "thickness": "wall", + "tangent_chain": true + }, + { + "id": 5, + "name": "Fillet2", + "suppressed": false, + "param_names": [ + "d6" + ], + "edge_refs": [ + { + "dir": [ + 1.0, + 3.343730521224001e-16, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + 0.0, + 0.0, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + 0.0, + 0.0, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + 5.075305255429287e-16, + -1.0, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + 0.0, + 0.0, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + -1.0, + -3.343730521224001e-16, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + 0.0, + 0.0, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + }, + { + "dir": [ + -1.2688263138573217e-16, + 1.0, + 0.0 + ], + "min": [ + -47.5, + -33.0, + 0.0 + ], + "max": [ + 47.500000000000014, + 33.00000000000001, + 24.00000000000001 + ] + } + ], + "edge_names": [ + "F2:side:l3|F2:top", + "F2:top|F3:blend:F2:side:l3|F2:side:l4", + "F2:top|F3:blend:F2:side:l2|F2:side:l3", + "F2:side:l2|F2:top", + "F2:top|F3:blend:F2:side:l1|F2:side:l2", + "F2:side:l1|F2:top", + "F2:top|F3:blend:F2:side:l1|F2:side:l4", + "F2:side:l4|F2:top" + ], + "type": "fillet", + "edges": [ + [ + 0.0, + 32.999999999999986, + 24.0 + ], + [ + -46.03553390593275, + 31.535533905932738, + 24.0 + ], + [ + 46.03553390593274, + 31.535533905932745, + 24.000000000000004 + ], + [ + 47.499999999999986, + 0.0, + 24.0 + ], + [ + 46.03553390593275, + -31.535533905932738, + 24.0 + ], + [ + 0.0, + -32.999999999999986, + 24.0 + ], + [ + -46.03553390593273, + -31.53553390593274, + 23.999999999999996 + ], + [ + -47.5, + -3.552713678800501e-15, + 24.0 + ] + ], + "radius": "1" + }, + { + "id": 6, + "name": "Sketch2", + "suppressed": false, + "type": "sketch", + "plane": { + "type": "face", + "plane": { + "origin": [ + 0.0, + 0.0, + 1.999999999999998 + ], + "x_dir": [ + 1.0, + 0.0, + 0.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "at": [ + -5.000003765078077, + 18.000004375539675, + 2.000000000000057 + ], + "name": "F4:inner:F2:start", + "anchor": { + "target": { + "body": "Body1", + "origin_feature": 4, + "name": "F4:shell:inner:cap:low:ed6121d9bed14d3fd103f347231990d103349f33b7874ad292d3c4d3539266c3", + "point": [ + 0.0, + 0.0, + 2.0 + ], + "certificate": { + "kind": "shell_planar", + "source_producer": 2, + "source": { + "kind": "extrude_cap", + "sketch": 1, + "high": false, + "outer": [ + "l1", + "l2", + "l3", + "l4" + ], + "holes": [] + }, + "inner": true + } + }, + "component": 0, + "path": [], + "author_path": [], + "coordinates": [ + 0.0, + 0.0 + ], + "x_axis": [ + 1.0, + 0.0 + ] + } + }, + "sketch": { + "points": [ + { + "id": "origin", + "pos": [ + 0.0, + 0.0 + ], + "fixed": true + }, + { + "id": "p1", + "pos": [ + -42.49999999999991, + -27.999999999999872 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p2", + "pos": [ + -45.500000000000036, + -27.99999999999999 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p3", + "pos": [ + -42.5, + -31.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p4", + "pos": [ + -45.5, + 27.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p5", + "pos": [ + -42.4999999999997, + 27.999999999999833 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p6", + "pos": [ + -42.50000000000001, + 31.00000000000013 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p7", + "pos": [ + 42.5, + -31.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p8", + "pos": [ + 42.5, + 30.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p9", + "pos": [ + 42.50000000000015, + -28.000000000000092 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p10", + "pos": [ + 45.5, + -27.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p11", + "pos": [ + 42.499999999999886, + 27.999999999999773 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p12", + "pos": [ + 45.50000000000011, + 28.000000000000004 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "c1.center", + "pos": [ + -39.0, + -24.5 + ], + "fixed": false + } + ], + "curves": [ + { + "id": "a1", + "type": "arc", + "c": 1, + "a": 2, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l1", + "type": "line", + "a": 2, + "b": 4, + "construction": false, + "link": "j1" + }, + { + "id": "a2", + "type": "arc", + "c": 5, + "a": 6, + "b": 4, + "construction": false, + "link": "j1" + }, + { + "id": "l2", + "type": "line", + "a": 7, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l3", + "type": "line", + "a": 6, + "b": 8, + "construction": false, + "link": "j1" + }, + { + "id": "a3", + "type": "arc", + "c": 9, + "a": 7, + "b": 10, + "construction": false, + "link": "j1" + }, + { + "id": "a4", + "type": "arc", + "c": 11, + "a": 12, + "b": 8, + "construction": false, + "link": "j1" + }, + { + "id": "l4", + "type": "line", + "a": 12, + "b": 10, + "construction": false, + "link": "j1" + }, + { + "id": "c1", + "type": "circle", + "c": 13, + "r": 3.0, + "construction": false + }, + { + "id": "c2", + "type": "circle", + "c": 13, + "r": 1.25, + "construction": false + } + ], + "constraints": [ + { + "id": "k1", + "type": "distance_x", + "p": 0, + "q": 13, + "value": 39.0, + "param": "d7" + }, + { + "id": "k2", + "type": "distance_y", + "p": 0, + "q": 13, + "value": 24.5, + "param": "d8" + }, + { + "id": "k3", + "type": "diameter", + "c": 8, + "value": 6.0, + "param": "d9" + }, + { + "id": "k4", + "type": "diameter", + "c": 9, + "value": 2.5, + "param": "d10" + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "type": "face", + "body": "Body1", + "at": [ + -15.166666666666663, + -29.99999999999999, + 1.9999999999999976 + ] + }, + "face_name": "F4:shell:inner:cap:low:ed6121d9bed14d3fd103f347231990d103349f33b7874ad292d3c4d3539266c3", + "auto_face": true + } + ], + "counters": { + "a": 4, + "c": 2, + "j": 1, + "k": 4, + "l": 4, + "p": 12 + } + } + }, + { + "id": 7, + "name": "Extrude2", + "suppressed": false, + "param_names": [ + "d11" + ], + "type": "extrude", + "sketch": 6, + "profiles": { + "type": "curves", + "loops": [ + [ + "c1" + ] + ] + }, + "extent": { + "distance": "4 mm", + "direction": "positive" + }, + "operation": "join" + }, + { + "id": 8, + "name": "RectangularPattern1", + "suppressed": false, + "param_names": [ + "d12", + "d13", + "d14", + "d15" + ], + "type": "pattern", + "features": [ + "Extrude2" + ], + "pattern": { + "type": "rectangular", + "dir1": [ + 1.0, + 0.0, + 0.0 + ], + "count1": "2", + "spacing1": "58 mm", + "dir2": [ + 0.0, + 1.0, + 0.0 + ], + "count2": "2", + "spacing2": "49 mm" + } + }, + { + "id": 9, + "name": "Sketch3", + "suppressed": false, + "type": "sketch", + "plane": { + "type": "face", + "plane": { + "origin": [ + 0.0, + -32.99999999999997, + 0.0 + ], + "x_dir": [ + 1.0, + 0.0, + -0.0 + ], + "y_dir": [ + 0.0, + 0.0, + 1.0 + ] + }, + "at": [ + 10.000004238290387, + -33.0, + 15.999996572036082 + ], + "name": "F2:side:l1", + "anchor": { + "target": { + "body": "Body1", + "origin_feature": 4, + "name": "F4:shell:outer:side:l1", + "point": [ + 0.0, + -33.0, + 0.0 + ], + "certificate": { + "kind": "shell_planar", + "source_producer": 2, + "source": { + "kind": "extrude_side", + "sketch": 1, + "curve": "l1" + }, + "inner": false + } + }, + "component": 0, + "path": [], + "author_path": [], + "coordinates": [ + 0.0, + 0.0 + ], + "x_axis": [ + 1.0, + 0.0 + ] + } + }, + "sketch": { + "points": [ + { + "id": "origin", + "pos": [ + 0.0, + 0.0 + ], + "fixed": true + }, + { + "id": "p1", + "pos": [ + -42.5, + 0.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p2", + "pos": [ + -42.5, + 22.999999999999968 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p3", + "pos": [ + 42.5, + 0.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p4", + "pos": [ + 42.5, + 22.999999999999968 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p5", + "pos": [ + -36.5, + 7.5 + ], + "fixed": false + }, + { + "id": "p6", + "pos": [ + -26.5, + 7.5 + ], + "fixed": false + }, + { + "id": "p7", + "pos": [ + -26.5, + 11.5 + ], + "fixed": false + }, + { + "id": "p8", + "pos": [ + -36.5, + 11.5 + ], + "fixed": false + }, + { + "id": "p9", + "pos": [ + -31.5, + 9.5 + ], + "fixed": false + }, + { + "id": "p10", + "pos": [ + -20.500001157466368, + 7.5 + ], + "fixed": false + }, + { + "id": "p11", + "pos": [ + -12.499998842533632, + 7.5 + ], + "fixed": false + }, + { + "id": "p12", + "pos": [ + -12.499998842533632, + 11.5 + ], + "fixed": false + }, + { + "id": "p13", + "pos": [ + -20.500001157466368, + 11.5 + ], + "fixed": false + }, + { + "id": "p14", + "pos": [ + -16.5, + 9.5 + ], + "fixed": false + }, + { + "id": "p15", + "pos": [ + -7.000003005960782, + 7.5 + ], + "fixed": false + }, + { + "id": "p16", + "pos": [ + 1.0000030059607816, + 7.5 + ], + "fixed": false + }, + { + "id": "p17", + "pos": [ + 1.0000030059607816, + 11.5 + ], + "fixed": false + }, + { + "id": "p18", + "pos": [ + -7.000003005960782, + 11.5 + ], + "fixed": false + }, + { + "id": "p19", + "pos": [ + -3.0, + 9.5 + ], + "fixed": false + } + ], + "curves": [ + { + "id": "l1", + "type": "line", + "a": 1, + "b": 2, + "construction": false, + "link": "j1" + }, + { + "id": "l2", + "type": "line", + "a": 1, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l3", + "type": "line", + "a": 4, + "b": 2, + "construction": false, + "link": "j1" + }, + { + "id": "l4", + "type": "line", + "a": 4, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l5", + "type": "line", + "a": 5, + "b": 6, + "construction": false + }, + { + "id": "l6", + "type": "line", + "a": 6, + "b": 7, + "construction": false + }, + { + "id": "l7", + "type": "line", + "a": 7, + "b": 8, + "construction": false + }, + { + "id": "l8", + "type": "line", + "a": 8, + "b": 5, + "construction": false + }, + { + "id": "l9", + "type": "line", + "a": 5, + "b": 7, + "construction": true + }, + { + "id": "l10", + "type": "line", + "a": 6, + "b": 8, + "construction": true + }, + { + "id": "l11", + "type": "line", + "a": 10, + "b": 11, + "construction": false + }, + { + "id": "l12", + "type": "line", + "a": 11, + "b": 12, + "construction": false + }, + { + "id": "l13", + "type": "line", + "a": 12, + "b": 13, + "construction": false + }, + { + "id": "l14", + "type": "line", + "a": 13, + "b": 10, + "construction": false + }, + { + "id": "l15", + "type": "line", + "a": 10, + "b": 12, + "construction": true + }, + { + "id": "l16", + "type": "line", + "a": 11, + "b": 13, + "construction": true + }, + { + "id": "l17", + "type": "line", + "a": 15, + "b": 16, + "construction": false + }, + { + "id": "l18", + "type": "line", + "a": 16, + "b": 17, + "construction": false + }, + { + "id": "l19", + "type": "line", + "a": 17, + "b": 18, + "construction": false + }, + { + "id": "l20", + "type": "line", + "a": 18, + "b": 15, + "construction": false + }, + { + "id": "l21", + "type": "line", + "a": 15, + "b": 17, + "construction": true + }, + { + "id": "l22", + "type": "line", + "a": 16, + "b": 18, + "construction": true + } + ], + "constraints": [ + { + "id": "k1", + "type": "horizontal", + "l": 4 + }, + { + "id": "k2", + "type": "horizontal", + "l": 6 + }, + { + "id": "k3", + "type": "vertical", + "l": 5 + }, + { + "id": "k4", + "type": "vertical", + "l": 7 + }, + { + "id": "k5", + "type": "midpoint", + "p": 9, + "l": 8 + }, + { + "id": "k6", + "type": "horizontal", + "l": 10 + }, + { + "id": "k7", + "type": "horizontal", + "l": 12 + }, + { + "id": "k8", + "type": "vertical", + "l": 11 + }, + { + "id": "k9", + "type": "vertical", + "l": 13 + }, + { + "id": "k10", + "type": "midpoint", + "p": 14, + "l": 14 + }, + { + "id": "k11", + "type": "horizontal", + "l": 16 + }, + { + "id": "k12", + "type": "horizontal", + "l": 18 + }, + { + "id": "k13", + "type": "vertical", + "l": 17 + }, + { + "id": "k14", + "type": "vertical", + "l": 19 + }, + { + "id": "k15", + "type": "midpoint", + "p": 19, + "l": 20 + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "type": "face", + "body": "Body1", + "at": [ + -14.166666666666666, + -32.99999999999997, + 15.333333333333309 + ] + }, + "face_name": "F4:shell:outer:side:l1", + "auto_face": true + } + ], + "counters": { + "j": 1, + "k": 15, + "l": 22, + "p": 19 + } + } + }, + { + "id": 10, + "name": "Extrude3", + "suppressed": false, + "param_names": [ + "d16" + ], + "type": "extrude", + "sketch": 9, + "profiles": { + "type": "curves", + "loops": [ + [ + "l5", + "l6", + "l7", + "l8" + ], + [ + "l11", + "l12", + "l13", + "l14" + ], + [ + "l17", + "l18", + "l19", + "l20" + ] + ] + }, + "extent": { + "distance": "-wall", + "direction": "positive" + }, + "operation": "cut" + }, + { + "id": 11, + "name": "Sketch4", + "suppressed": false, + "type": "sketch", + "plane": { + "type": "face", + "plane": { + "origin": [ + 47.49999999999997, + 0.0, + 0.0 + ], + "x_dir": [ + 0.0, + 1.0, + 0.0 + ], + "y_dir": [ + 0.0, + 0.0, + 1.0 + ] + }, + "at": [ + 47.49999999999983, + -0.00001051725462275499, + 4.000003857314084 + ], + "name": "F2:side:l2", + "anchor": { + "target": { + "body": "Body1", + "origin_feature": 4, + "name": "F4:shell:outer:side:l2", + "point": [ + 47.5, + 0.0, + 0.0 + ], + "certificate": { + "kind": "shell_planar", + "source_producer": 2, + "source": { + "kind": "extrude_side", + "sketch": 1, + "curve": "l2" + }, + "inner": false + } + }, + "component": 0, + "path": [], + "author_path": [], + "coordinates": [ + 0.0, + 0.0 + ], + "x_axis": [ + 1.0, + 0.0 + ] + } + }, + "sketch": { + "points": [ + { + "id": "origin", + "pos": [ + 0.0, + 0.0 + ], + "fixed": true + }, + { + "id": "p1", + "pos": [ + -28.0, + 22.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p2", + "pos": [ + -28.0, + 0.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p3", + "pos": [ + 28.0, + 0.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p4", + "pos": [ + 28.0, + 22.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p5", + "pos": [ + -25.0, + 8.0 + ], + "fixed": false + }, + { + "id": "p6", + "pos": [ + 25.0, + 8.0 + ], + "fixed": false + }, + { + "id": "p7", + "pos": [ + 25.0, + 22.0 + ], + "fixed": false + }, + { + "id": "p8", + "pos": [ + -25.0, + 22.0 + ], + "fixed": false + }, + { + "id": "p9", + "pos": [ + -0.0, + 15.0 + ], + "fixed": false + } + ], + "curves": [ + { + "id": "l1", + "type": "line", + "a": 1, + "b": 2, + "construction": false, + "link": "j1" + }, + { + "id": "l2", + "type": "line", + "a": 2, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l3", + "type": "line", + "a": 4, + "b": 1, + "construction": false, + "link": "j1" + }, + { + "id": "l4", + "type": "line", + "a": 4, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l5", + "type": "line", + "a": 5, + "b": 6, + "construction": false + }, + { + "id": "l6", + "type": "line", + "a": 6, + "b": 7, + "construction": false + }, + { + "id": "l7", + "type": "line", + "a": 7, + "b": 8, + "construction": false + }, + { + "id": "l8", + "type": "line", + "a": 8, + "b": 5, + "construction": false + }, + { + "id": "l9", + "type": "line", + "a": 5, + "b": 7, + "construction": true + }, + { + "id": "l10", + "type": "line", + "a": 6, + "b": 8, + "construction": true + } + ], + "constraints": [ + { + "id": "k1", + "type": "horizontal", + "l": 4 + }, + { + "id": "k2", + "type": "horizontal", + "l": 6 + }, + { + "id": "k3", + "type": "vertical", + "l": 5 + }, + { + "id": "k4", + "type": "vertical", + "l": 7 + }, + { + "id": "k5", + "type": "midpoint", + "p": 9, + "l": 8 + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "type": "face", + "body": "Body1", + "at": [ + 47.49999999999997, + -9.333333333333334, + 15.333333333333329 + ] + }, + "face_name": "F4:shell:outer:side:l2", + "auto_face": true + } + ], + "counters": { + "j": 1, + "k": 5, + "l": 10, + "p": 9 + } + } + }, + { + "id": 12, + "name": "Extrude4", + "suppressed": false, + "param_names": [ + "d17" + ], + "type": "extrude", + "sketch": 11, + "profiles": { + "type": "curves", + "loops": [ + [ + "l5", + "l6", + "l7", + "l8" + ] + ] + }, + "extent": { + "distance": "-wall", + "direction": "positive" + }, + "operation": "cut" + }, + { + "id": 13, + "name": "Sketch5", + "suppressed": false, + "type": "sketch", + "plane": { + "type": "face", + "plane": { + "origin": [ + 0.0, + 0.0, + 1.9999999999999984 + ], + "x_dir": [ + 1.0, + 0.0, + 0.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "at": [ + -5.00000376507802, + 18.000004375539675, + 2.000000000000057 + ], + "name": "F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F7:side:c1]#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F7:side:c1,F7:side:c1@F8.1,F7:side:c1@F8.2,F7:side:c1@F8.3]", + "anchor": { + "target": { + "body": "Body1", + "origin_feature": 4, + "name": "F4:shell:inner:cap:low:ed6121d9bed14d3fd103f347231990d103349f33b7874ad292d3c4d3539266c3", + "point": [ + 0.0, + 0.0, + 2.0 + ], + "certificate": { + "kind": "shell_planar", + "source_producer": 2, + "source": { + "kind": "extrude_cap", + "sketch": 1, + "high": false, + "outer": [ + "l1", + "l2", + "l3", + "l4" + ], + "holes": [] + }, + "inner": true + } + }, + "component": 0, + "path": [], + "author_path": [], + "coordinates": [ + 0.0, + 0.0 + ], + "x_axis": [ + 1.0, + 0.0 + ] + } + }, + "sketch": { + "points": [ + { + "id": "origin", + "pos": [ + 0.0, + 0.0 + ], + "fixed": true + }, + { + "id": "p1", + "pos": [ + -42.49999999999991, + -27.999999999999872 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p2", + "pos": [ + -45.500000000000036, + -27.99999999999999 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p3", + "pos": [ + -42.5, + -31.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p4", + "pos": [ + -45.5, + 27.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p5", + "pos": [ + -42.4999999999997, + 27.999999999999833 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p6", + "pos": [ + -42.50000000000001, + 31.00000000000013 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p7", + "pos": [ + 42.5, + -31.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p8", + "pos": [ + 42.5, + 30.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p9", + "pos": [ + 42.50000000000015, + -28.000000000000092 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p10", + "pos": [ + 45.5, + -27.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p11", + "pos": [ + 42.499999999999886, + 27.999999999999773 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p12", + "pos": [ + 45.50000000000011, + 28.000000000000004 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p13", + "pos": [ + -38.999999999999986, + -24.49999999999994 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p14", + "pos": [ + -41.99999999999998, + -24.499999965311186 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p15", + "pos": [ + -35.99999999999999, + -24.499999991327797 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p16", + "pos": [ + -39.00000000000001, + 24.499999999999964 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p17", + "pos": [ + -42.000000000000014, + 24.500000034688817 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p18", + "pos": [ + -36.0, + 24.500000008672213 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p19", + "pos": [ + 19.000000000000007, + -24.500000000000014 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p20", + "pos": [ + 16.00000000000001, + -24.499999965311183 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p21", + "pos": [ + 22.000000000000004, + -24.49999999132779 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p22", + "pos": [ + 19.000000000000007, + 24.499999999999986 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p23", + "pos": [ + 16.000000000000018, + 24.500000034688817 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p24", + "pos": [ + 21.999999999999996, + 24.500000008672206 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p25", + "pos": [ + -40.25, + -24.500000014453715 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p26", + "pos": [ + -37.750000000000014, + -24.50000000361343 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p27", + "pos": [ + -40.25, + 24.499999985546296 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p28", + "pos": [ + -37.749999999999915, + 24.49999999638657 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p29", + "pos": [ + 17.750000000000004, + -24.500000014453708 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p30", + "pos": [ + 20.249999999999947, + -24.500000003613422 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p31", + "pos": [ + 17.75, + 24.499999985546296 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p32", + "pos": [ + 20.249999999999964, + 24.49999999638658 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p33", + "pos": [ + -22.0, + -15.5 + ], + "fixed": false + }, + { + "id": "p34", + "pos": [ + 6.0, + -15.5 + ], + "fixed": false + }, + { + "id": "p35", + "pos": [ + 6.0, + -12.5 + ], + "fixed": false + }, + { + "id": "p36", + "pos": [ + -22.0, + -12.5 + ], + "fixed": false + }, + { + "id": "p37", + "pos": [ + -8.0, + -14.0 + ], + "fixed": false + } + ], + "curves": [ + { + "id": "a1", + "type": "arc", + "c": 1, + "a": 2, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l1", + "type": "line", + "a": 2, + "b": 4, + "construction": false, + "link": "j1" + }, + { + "id": "a2", + "type": "arc", + "c": 5, + "a": 6, + "b": 4, + "construction": false, + "link": "j1" + }, + { + "id": "l2", + "type": "line", + "a": 7, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l3", + "type": "line", + "a": 6, + "b": 8, + "construction": false, + "link": "j1" + }, + { + "id": "a3", + "type": "arc", + "c": 9, + "a": 7, + "b": 10, + "construction": false, + "link": "j1" + }, + { + "id": "a4", + "type": "arc", + "c": 11, + "a": 12, + "b": 8, + "construction": false, + "link": "j1" + }, + { + "id": "l4", + "type": "line", + "a": 12, + "b": 10, + "construction": false, + "link": "j1" + }, + { + "id": "a5", + "type": "arc", + "c": 13, + "a": 14, + "b": 15, + "construction": false, + "link": "j1" + }, + { + "id": "a6", + "type": "arc", + "c": 13, + "a": 15, + "b": 14, + "construction": false, + "link": "j1" + }, + { + "id": "a7", + "type": "arc", + "c": 16, + "a": 17, + "b": 18, + "construction": false, + "link": "j1" + }, + { + "id": "a8", + "type": "arc", + "c": 16, + "a": 18, + "b": 17, + "construction": false, + "link": "j1" + }, + { + "id": "a9", + "type": "arc", + "c": 19, + "a": 20, + "b": 21, + "construction": false, + "link": "j1" + }, + { + "id": "a10", + "type": "arc", + "c": 19, + "a": 21, + "b": 20, + "construction": false, + "link": "j1" + }, + { + "id": "a11", + "type": "arc", + "c": 22, + "a": 23, + "b": 24, + "construction": false, + "link": "j1" + }, + { + "id": "a12", + "type": "arc", + "c": 22, + "a": 24, + "b": 23, + "construction": false, + "link": "j1" + }, + { + "id": "a13", + "type": "arc", + "c": 13, + "a": 25, + "b": 26, + "construction": false, + "link": "j1" + }, + { + "id": "a14", + "type": "arc", + "c": 13, + "a": 26, + "b": 25, + "construction": false, + "link": "j1" + }, + { + "id": "a15", + "type": "arc", + "c": 16, + "a": 27, + "b": 28, + "construction": false, + "link": "j1" + }, + { + "id": "a16", + "type": "arc", + "c": 16, + "a": 28, + "b": 27, + "construction": false, + "link": "j1" + }, + { + "id": "a17", + "type": "arc", + "c": 19, + "a": 29, + "b": 30, + "construction": false, + "link": "j1" + }, + { + "id": "a18", + "type": "arc", + "c": 19, + "a": 30, + "b": 29, + "construction": false, + "link": "j1" + }, + { + "id": "a19", + "type": "arc", + "c": 22, + "a": 31, + "b": 32, + "construction": false, + "link": "j1" + }, + { + "id": "a20", + "type": "arc", + "c": 22, + "a": 32, + "b": 31, + "construction": false, + "link": "j1" + }, + { + "id": "l5", + "type": "line", + "a": 33, + "b": 34, + "construction": false + }, + { + "id": "l6", + "type": "line", + "a": 34, + "b": 35, + "construction": false + }, + { + "id": "l7", + "type": "line", + "a": 35, + "b": 36, + "construction": false + }, + { + "id": "l8", + "type": "line", + "a": 36, + "b": 33, + "construction": false + }, + { + "id": "l9", + "type": "line", + "a": 33, + "b": 35, + "construction": true + }, + { + "id": "l10", + "type": "line", + "a": 34, + "b": 36, + "construction": true + } + ], + "constraints": [ + { + "id": "k1", + "type": "horizontal", + "l": 24 + }, + { + "id": "k2", + "type": "horizontal", + "l": 26 + }, + { + "id": "k3", + "type": "vertical", + "l": 25 + }, + { + "id": "k4", + "type": "vertical", + "l": 27 + }, + { + "id": "k5", + "type": "midpoint", + "p": 37, + "l": 28 + } + ], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "type": "face", + "body": "Body1", + "at": [ + 43.05005776197402, + -30.913093669479007, + 2.0 + ] + }, + "face_name": "F4:shell:inner:cap:low:ed6121d9bed14d3fd103f347231990d103349f33b7874ad292d3c4d3539266c3", + "auto_face": true + } + ], + "counters": { + "a": 20, + "j": 1, + "k": 5, + "l": 10, + "p": 37 + } + } + }, + { + "id": 14, + "name": "Extrude5", + "suppressed": false, + "param_names": [ + "d18" + ], + "type": "extrude", + "sketch": 13, + "profiles": { + "type": "curves", + "loops": [ + [ + "l5", + "l6", + "l7", + "l8" + ] + ] + }, + "extent": { + "distance": "-wall", + "direction": "positive" + }, + "operation": "cut" + }, + { + "id": 15, + "name": "RectangularPattern2", + "suppressed": false, + "param_names": [ + "d19", + "d20" + ], + "type": "pattern", + "features": [ + "Extrude5" + ], + "pattern": { + "type": "rectangular", + "dir1": [ + 0.0, + 1.0, + 0.0 + ], + "count1": "5", + "spacing1": "7 mm" + } + }, + { + "id": 16, + "name": "Sketch6", + "suppressed": false, + "type": "sketch", + "plane": { + "type": "face", + "plane": { + "origin": [ + 0.0, + 0.0, + 1.9999999999999976 + ], + "x_dir": [ + 1.0, + 0.0, + 0.0 + ], + "y_dir": [ + 0.0, + 1.0, + 0.0 + ] + }, + "at": [ + -5.000003765077963, + 18.000004375539675, + 2.000000000000057 + ], + "name": "F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F7:side:c1]#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F7:side:c1,F7:side:c1@F8.1,F7:side:c1@F8.2,F7:side:c1@F8.3]", + "anchor": { + "target": { + "body": "Body1", + "origin_feature": 4, + "name": "F4:shell:inner:cap:low:ed6121d9bed14d3fd103f347231990d103349f33b7874ad292d3c4d3539266c3", + "point": [ + 0.0, + 0.0, + 2.0 + ], + "certificate": { + "kind": "shell_planar", + "source_producer": 2, + "source": { + "kind": "extrude_cap", + "sketch": 1, + "high": false, + "outer": [ + "l1", + "l2", + "l3", + "l4" + ], + "holes": [] + }, + "inner": true + } + }, + "component": 0, + "path": [], + "author_path": [], + "coordinates": [ + 0.0, + 0.0 + ], + "x_axis": [ + 1.0, + 0.0 + ] + } + }, + "sketch": { + "points": [ + { + "id": "origin", + "pos": [ + 0.0, + 0.0 + ], + "fixed": true + }, + { + "id": "p1", + "pos": [ + -42.49999999999991, + -27.999999999999872 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p2", + "pos": [ + -45.500000000000036, + -27.99999999999999 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p3", + "pos": [ + -42.5, + -31.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p4", + "pos": [ + -45.5, + 27.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p5", + "pos": [ + -42.4999999999997, + 27.999999999999833 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p6", + "pos": [ + -42.50000000000001, + 31.00000000000013 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p7", + "pos": [ + 42.5, + -31.0 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p8", + "pos": [ + 42.5, + 30.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p9", + "pos": [ + 42.50000000000015, + -28.000000000000092 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p10", + "pos": [ + 45.5, + -27.999999999999993 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p11", + "pos": [ + 42.499999999999886, + 27.999999999999773 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p12", + "pos": [ + 45.50000000000011, + 28.000000000000004 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p13", + "pos": [ + -22.0, + -15.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p14", + "pos": [ + -22.0, + -12.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p15", + "pos": [ + 6.0, + -15.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p16", + "pos": [ + 6.0, + -12.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p17", + "pos": [ + -22.0, + -8.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p18", + "pos": [ + -22.0, + -5.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p19", + "pos": [ + 6.0, + -8.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p20", + "pos": [ + 6.0, + -5.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p21", + "pos": [ + -22.0, + -1.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p22", + "pos": [ + -22.0, + 1.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p23", + "pos": [ + 6.0, + -1.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p24", + "pos": [ + 6.0, + 1.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p25", + "pos": [ + -22.0, + 5.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p26", + "pos": [ + -22.0, + 8.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p27", + "pos": [ + 6.0, + 5.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p28", + "pos": [ + 6.0, + 8.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p29", + "pos": [ + -22.0, + 12.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p30", + "pos": [ + -22.0, + 15.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p31", + "pos": [ + 6.0, + 12.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p32", + "pos": [ + 6.0, + 15.5 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p33", + "pos": [ + -38.999999999999986, + -24.49999999999994 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p34", + "pos": [ + -41.99999999999998, + -24.499999965311186 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p35", + "pos": [ + -35.99999999999999, + -24.499999991327797 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p36", + "pos": [ + -39.00000000000001, + 24.499999999999964 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p37", + "pos": [ + -42.000000000000014, + 24.500000034688817 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p38", + "pos": [ + -36.0, + 24.500000008672213 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p39", + "pos": [ + 19.000000000000007, + -24.500000000000014 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p40", + "pos": [ + 16.00000000000001, + -24.499999965311183 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p41", + "pos": [ + 22.000000000000004, + -24.49999999132779 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p42", + "pos": [ + 19.000000000000007, + 24.499999999999986 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p43", + "pos": [ + 16.000000000000018, + 24.500000034688817 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p44", + "pos": [ + 21.999999999999996, + 24.500000008672206 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p45", + "pos": [ + -40.25, + -24.500000014453715 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p46", + "pos": [ + -37.750000000000014, + -24.50000000361343 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p47", + "pos": [ + -40.25, + 24.499999985546296 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p48", + "pos": [ + -37.749999999999915, + 24.49999999638657 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p49", + "pos": [ + 17.750000000000004, + -24.500000014453708 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p50", + "pos": [ + 20.249999999999947, + -24.500000003613422 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p51", + "pos": [ + 17.75, + 24.499999985546296 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p52", + "pos": [ + 20.249999999999964, + 24.49999999638658 + ], + "fixed": true, + "link": "j1" + }, + { + "id": "p101", + "pos": [ + -8.154474212993971, + 25.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p102", + "pos": [ + -5.586490288010717, + 25.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p103", + "pos": [ + -3.828285331547221, + 24.861627595445412 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p104", + "pos": [ + -4.4411453449430685, + 25.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p105", + "pos": [ + -3.2154253181513734, + 23.41286671131949 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p106", + "pos": [ + -3.2154253181513734, + 24.353255190890824 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p107", + "pos": [ + -3.828285331547221, + 21.96008707300737 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p108", + "pos": [ + -3.2154253181513734, + 22.468459477561957 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p109", + "pos": [ + -5.586490288010717, + 21.45171466845278 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p110", + "pos": [ + -4.4411453449430685, + 21.45171466845278 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p111", + "pos": [ + -6.607253851306096, + 21.45171466845278 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p112", + "pos": [ + -6.607253851306096, + 19.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p113", + "pos": [ + -8.154474212993971, + 19.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p114", + "pos": [ + -6.607253851306096, + 24.248767582049567 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p115", + "pos": [ + -6.607253851306096, + 22.572947086403214 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p116", + "pos": [ + -5.75125920964501, + 22.572947086403214 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p117", + "pos": [ + -5.056014735432017, + 22.79196918955124 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p118", + "pos": [ + -5.301158740790355, + 22.572947086403214 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p119", + "pos": [ + -4.8108707300736775, + 23.41286671131949 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p120", + "pos": [ + -4.8108707300736775, + 23.010991292699263 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p121", + "pos": [ + -5.056014735432017, + 24.03175485599464 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p122", + "pos": [ + -4.8108707300736775, + 23.81474212993972 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p123", + "pos": [ + -5.75125920964501, + 24.248767582049567 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p124", + "pos": [ + -5.301158740790355, + 24.248767582049567 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p125", + "pos": [ + -2.186624246483591, + 23.871004688546552 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p126", + "pos": [ + -0.7479102478231745, + 23.871004688546552 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p127", + "pos": [ + -0.7479102478231745, + 19.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p128", + "pos": [ + -2.186624246483591, + 19.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p129", + "pos": [ + -2.186624246483591, + 25.623181513730742 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p130", + "pos": [ + -0.7479102478231745, + 25.623181513730742 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p131", + "pos": [ + -0.7479102478231745, + 24.449705291359678 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p132", + "pos": [ + -2.186624246483591, + 24.449705291359678 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p133", + "pos": [ + 5.838827863362358, + 24.096054922973877 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p134", + "pos": [ + 4.142913596784997, + 21.584333556597457 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p135", + "pos": [ + 5.838827863362358, + 21.584333556597457 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p136", + "pos": [ + 5.581627595445411, + 25.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p137", + "pos": [ + 7.301654387139987, + 25.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p138", + "pos": [ + 7.301654387139987, + 21.584333556597457 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p139", + "pos": [ + 8.157649028801071, + 21.584333556597457 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p140", + "pos": [ + 8.157649028801071, + 20.46310113864702 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p141", + "pos": [ + 7.301654387139987, + 20.46310113864702 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p142", + "pos": [ + 7.301654387139987, + 19.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p143", + "pos": [ + 5.838827863362358, + 19.37 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p144", + "pos": [ + 5.838827863362358, + 20.46310113864702 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p145", + "pos": [ + 3.17841259209645, + 20.46310113864702 + ], + "fixed": true, + "link": "j2" + }, + { + "id": "p146", + "pos": [ + 3.17841259209645, + 21.789290020093773 + ], + "fixed": true, + "link": "j2" + } + ], + "curves": [ + { + "id": "a1", + "type": "arc", + "c": 1, + "a": 2, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l1", + "type": "line", + "a": 2, + "b": 4, + "construction": false, + "link": "j1" + }, + { + "id": "a2", + "type": "arc", + "c": 5, + "a": 6, + "b": 4, + "construction": false, + "link": "j1" + }, + { + "id": "l2", + "type": "line", + "a": 7, + "b": 3, + "construction": false, + "link": "j1" + }, + { + "id": "l3", + "type": "line", + "a": 6, + "b": 8, + "construction": false, + "link": "j1" + }, + { + "id": "a3", + "type": "arc", + "c": 9, + "a": 7, + "b": 10, + "construction": false, + "link": "j1" + }, + { + "id": "a4", + "type": "arc", + "c": 11, + "a": 12, + "b": 8, + "construction": false, + "link": "j1" + }, + { + "id": "l4", + "type": "line", + "a": 12, + "b": 10, + "construction": false, + "link": "j1" + }, + { + "id": "l5", + "type": "line", + "a": 13, + "b": 14, + "construction": false, + "link": "j1" + }, + { + "id": "l6", + "type": "line", + "a": 15, + "b": 13, + "construction": false, + "link": "j1" + }, + { + "id": "l7", + "type": "line", + "a": 14, + "b": 16, + "construction": false, + "link": "j1" + }, + { + "id": "l8", + "type": "line", + "a": 16, + "b": 15, + "construction": false, + "link": "j1" + }, + { + "id": "l9", + "type": "line", + "a": 17, + "b": 18, + "construction": false, + "link": "j1" + }, + { + "id": "l10", + "type": "line", + "a": 19, + "b": 17, + "construction": false, + "link": "j1" + }, + { + "id": "l11", + "type": "line", + "a": 18, + "b": 20, + "construction": false, + "link": "j1" + }, + { + "id": "l12", + "type": "line", + "a": 20, + "b": 19, + "construction": false, + "link": "j1" + }, + { + "id": "l13", + "type": "line", + "a": 21, + "b": 22, + "construction": false, + "link": "j1" + }, + { + "id": "l14", + "type": "line", + "a": 23, + "b": 21, + "construction": false, + "link": "j1" + }, + { + "id": "l15", + "type": "line", + "a": 22, + "b": 24, + "construction": false, + "link": "j1" + }, + { + "id": "l16", + "type": "line", + "a": 24, + "b": 23, + "construction": false, + "link": "j1" + }, + { + "id": "l17", + "type": "line", + "a": 25, + "b": 26, + "construction": false, + "link": "j1" + }, + { + "id": "l18", + "type": "line", + "a": 27, + "b": 25, + "construction": false, + "link": "j1" + }, + { + "id": "l19", + "type": "line", + "a": 26, + "b": 28, + "construction": false, + "link": "j1" + }, + { + "id": "l20", + "type": "line", + "a": 28, + "b": 27, + "construction": false, + "link": "j1" + }, + { + "id": "l21", + "type": "line", + "a": 29, + "b": 30, + "construction": false, + "link": "j1" + }, + { + "id": "l22", + "type": "line", + "a": 31, + "b": 29, + "construction": false, + "link": "j1" + }, + { + "id": "l23", + "type": "line", + "a": 30, + "b": 32, + "construction": false, + "link": "j1" + }, + { + "id": "l24", + "type": "line", + "a": 32, + "b": 31, + "construction": false, + "link": "j1" + }, + { + "id": "a5", + "type": "arc", + "c": 33, + "a": 34, + "b": 35, + "construction": false, + "link": "j1" + }, + { + "id": "a6", + "type": "arc", + "c": 33, + "a": 35, + "b": 34, + "construction": false, + "link": "j1" + }, + { + "id": "a7", + "type": "arc", + "c": 36, + "a": 37, + "b": 38, + "construction": false, + "link": "j1" + }, + { + "id": "a8", + "type": "arc", + "c": 36, + "a": 38, + "b": 37, + "construction": false, + "link": "j1" + }, + { + "id": "a9", + "type": "arc", + "c": 39, + "a": 40, + "b": 41, + "construction": false, + "link": "j1" + }, + { + "id": "a10", + "type": "arc", + "c": 39, + "a": 41, + "b": 40, + "construction": false, + "link": "j1" + }, + { + "id": "a11", + "type": "arc", + "c": 42, + "a": 43, + "b": 44, + "construction": false, + "link": "j1" + }, + { + "id": "a12", + "type": "arc", + "c": 42, + "a": 44, + "b": 43, + "construction": false, + "link": "j1" + }, + { + "id": "a13", + "type": "arc", + "c": 33, + "a": 45, + "b": 46, + "construction": false, + "link": "j1" + }, + { + "id": "a14", + "type": "arc", + "c": 33, + "a": 46, + "b": 45, + "construction": false, + "link": "j1" + }, + { + "id": "a15", + "type": "arc", + "c": 36, + "a": 47, + "b": 48, + "construction": false, + "link": "j1" + }, + { + "id": "a16", + "type": "arc", + "c": 36, + "a": 48, + "b": 47, + "construction": false, + "link": "j1" + }, + { + "id": "a17", + "type": "arc", + "c": 39, + "a": 49, + "b": 50, + "construction": false, + "link": "j1" + }, + { + "id": "a18", + "type": "arc", + "c": 39, + "a": 50, + "b": 49, + "construction": false, + "link": "j1" + }, + { + "id": "a19", + "type": "arc", + "c": 42, + "a": 51, + "b": 52, + "construction": false, + "link": "j1" + }, + { + "id": "a20", + "type": "arc", + "c": 42, + "a": 52, + "b": 51, + "construction": false, + "link": "j1" + }, + { + "id": "l57", + "type": "line", + "a": 53, + "b": 54, + "construction": false, + "link": "j2" + }, + { + "id": "k9", + "type": "conic", + "a": 54, + "b": 55, + "apex": 56, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "k10", + "type": "conic", + "a": 55, + "b": 57, + "apex": 58, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "k11", + "type": "conic", + "a": 57, + "b": 59, + "apex": 60, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "k12", + "type": "conic", + "a": 59, + "b": 61, + "apex": 62, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "l58", + "type": "line", + "a": 61, + "b": 63, + "construction": false, + "link": "j2" + }, + { + "id": "l59", + "type": "line", + "a": 63, + "b": 64, + "construction": false, + "link": "j2" + }, + { + "id": "l60", + "type": "line", + "a": 64, + "b": 65, + "construction": false, + "link": "j2" + }, + { + "id": "l61", + "type": "line", + "a": 65, + "b": 53, + "construction": false, + "link": "j2" + }, + { + "id": "l62", + "type": "line", + "a": 66, + "b": 67, + "construction": false, + "link": "j2" + }, + { + "id": "l63", + "type": "line", + "a": 67, + "b": 68, + "construction": false, + "link": "j2" + }, + { + "id": "k13", + "type": "conic", + "a": 68, + "b": 69, + "apex": 70, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "k14", + "type": "conic", + "a": 69, + "b": 71, + "apex": 72, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "k15", + "type": "conic", + "a": 71, + "b": 73, + "apex": 74, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "k16", + "type": "conic", + "a": 73, + "b": 75, + "apex": 76, + "rho": 0.5, + "construction": false, + "link": "j2" + }, + { + "id": "l64", + "type": "line", + "a": 75, + "b": 66, + "construction": false, + "link": "j2" + }, + { + "id": "l65", + "type": "line", + "a": 77, + "b": 78, + "construction": false, + "link": "j2" + }, + { + "id": "l66", + "type": "line", + "a": 78, + "b": 79, + "construction": false, + "link": "j2" + }, + { + "id": "l67", + "type": "line", + "a": 79, + "b": 80, + "construction": false, + "link": "j2" + }, + { + "id": "l68", + "type": "line", + "a": 80, + "b": 77, + "construction": false, + "link": "j2" + }, + { + "id": "l69", + "type": "line", + "a": 81, + "b": 82, + "construction": false, + "link": "j2" + }, + { + "id": "l70", + "type": "line", + "a": 82, + "b": 83, + "construction": false, + "link": "j2" + }, + { + "id": "l71", + "type": "line", + "a": 83, + "b": 84, + "construction": false, + "link": "j2" + }, + { + "id": "l72", + "type": "line", + "a": 84, + "b": 81, + "construction": false, + "link": "j2" + }, + { + "id": "l73", + "type": "line", + "a": 85, + "b": 86, + "construction": false, + "link": "j2" + }, + { + "id": "l74", + "type": "line", + "a": 86, + "b": 87, + "construction": false, + "link": "j2" + }, + { + "id": "l75", + "type": "line", + "a": 87, + "b": 85, + "construction": false, + "link": "j2" + }, + { + "id": "l76", + "type": "line", + "a": 88, + "b": 89, + "construction": false, + "link": "j2" + }, + { + "id": "l77", + "type": "line", + "a": 89, + "b": 90, + "construction": false, + "link": "j2" + }, + { + "id": "l78", + "type": "line", + "a": 90, + "b": 91, + "construction": false, + "link": "j2" + }, + { + "id": "l79", + "type": "line", + "a": 91, + "b": 92, + "construction": false, + "link": "j2" + }, + { + "id": "l80", + "type": "line", + "a": 92, + "b": 93, + "construction": false, + "link": "j2" + }, + { + "id": "l81", + "type": "line", + "a": 93, + "b": 94, + "construction": false, + "link": "j2" + }, + { + "id": "l82", + "type": "line", + "a": 94, + "b": 95, + "construction": false, + "link": "j2" + }, + { + "id": "l83", + "type": "line", + "a": 95, + "b": 96, + "construction": false, + "link": "j2" + }, + { + "id": "l84", + "type": "line", + "a": 96, + "b": 97, + "construction": false, + "link": "j2" + }, + { + "id": "l85", + "type": "line", + "a": 97, + "b": 98, + "construction": false, + "link": "j2" + }, + { + "id": "l86", + "type": "line", + "a": 98, + "b": 88, + "construction": false, + "link": "j2" + } + ], + "constraints": [], + "links": [ + { + "id": "j1", + "kind": "project", + "source": { + "type": "face", + "body": "Body1", + "at": [ + 43.05005776197402, + -30.913093669479007, + 2.0 + ] + }, + "face_name": "F4:shell:inner:cap:low:ed6121d9bed14d3fd103f347231990d103349f33b7874ad292d3c4d3539266c3", + "auto_face": true + }, + { + "id": "j2", + "kind": "text", + "source": { + "type": "text", + "text": "Pi 4", + "at": [ + -8.91, + 19.37 + ], + "height": 6.0, + "angle": 0.0, + "font": "DejaVu Sans Bold" + } + } + ], + "counters": { + "a": 20, + "j": 2, + "k": 16, + "l": 86, + "p": 146 + } + } + }, + { + "id": 17, + "name": "Extrude6", + "suppressed": false, + "param_names": [ + "d21" + ], + "type": "extrude", + "sketch": 16, + "profiles": { + "type": "curves", + "loops": [ + [ + "l57", + "l61", + "l60", + "l59", + "l58", + "k12", + "k11", + "k10", + "k9" + ], + [ + "l65", + "l68", + "l67", + "l66" + ], + [ + "l69", + "l72", + "l71", + "l70" + ], + [ + "l76", + "l86", + "l85", + "l84", + "l83", + "l82", + "l81", + "l80", + "l79", + "l78", + "l77" + ] + ] + }, + "extent": { + "distance": "-0.6 mm", + "direction": "positive" + }, + "operation": "cut" + } + ], + "next_id": 18, + "materials": { + "Body1": "PETG" + }, + "user_materials": [ + { + "name": "PETG", + "density": 1.27, + "appearance": { + "name": "PETG", + "color": [ + 42, + 134, + 150 + ], + "opacity": 1.0 + } + } + ] +} \ No newline at end of file