Joints: gears, rack and pinion, and screws (#1524)
Motion links can carry a coupling (gear pair, rack and pinion, screw) whose ratio follows radii, picked round faces or pitch. Design format 23. Co-authored-by: SychPL <SychPL@users.noreply.github.com> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
29 files changed
+1476
-54
No files matched your search
@@ -28,6 +28,33 @@ made. Contact sets stop motion where bodies would pass through each other,
|
||||
**Motion Study** keys joint values along a timeline, and **Interference** shows overlapping
|
||||
volumes in red.
|
||||
|
||||
**Gear**, **Rack and Pinion** and **Screw** (on the **ASSEMBLE** panel) are motion links whose
|
||||
ratio comes from the parts rather than a typed number:
|
||||
|
||||
- **Gear** (`joint.gear {a, b, ra, rb}`) couples two joints that turn. Joint 2 turns ra/rb as far
|
||||
as joint 1, the other way round; **Internal gear** (one of them is a ring gear) turns both the
|
||||
same way. Pick the round face of each gear, such as its pitch cylinder, or type the radii. Tooth
|
||||
counts work as well as radii, since only their proportion counts. Picking a gear's face also
|
||||
chooses the joint that gear turns on.
|
||||
- **Rack and Pinion** (`joint.rack_pinion {a, b, radius}`) couples a joint that turns with one
|
||||
that slides: the rack travels the pinion's pitch radius times its turn in radians (r·θ). Either
|
||||
joint may drive the other. In `joint.list` the ratio is given per degree, as for any link between
|
||||
an angle and a distance.
|
||||
- **Screw** (`joint.screw {joint, pitch}`, or `{a, b, pitch}` for a revolute joint and a slider)
|
||||
advances `pitch` per turn. A cylindrical joint is a screw on its own: its turn drives its travel.
|
||||
The thread is right-handed; **Reverse** makes it left-handed.
|
||||
|
||||
A radius or pitch may be an expression of the design's parameters, and a picked face is found
|
||||
again whenever the design changes. Change the parameter or the gear's diameter, and the ratio
|
||||
follows. The new link leaves the driven joint where it is, so teeth modelled in mesh stay in mesh.
|
||||
**Reverse** turns the driven joint the other way, for joints whose axes point opposite ways. These
|
||||
couplings are motion links, so they work in closed loops, with contact sets and in motion studies:
|
||||
a rack can push the piston of a slider-crank, or a pinion can steer through a rack and its tie
|
||||
rods. Drive the joint that drives the coupling (joint 1, the pinion, or the screw's turn), not the
|
||||
driven one. A joint follows one link at most, and a coupling that would drive its own driver is
|
||||
refused. `joint.list` lists each coupling's definition under `links` with an `error` when it can't
|
||||
be worked out (the picked face is gone); the link then keeps its last ratio.
|
||||
|
||||
A joint moves one component against another, so its two picks must be on different components.
|
||||
A STEP file with several parts often comes in as bodies of one component, and picks on two of
|
||||
those bodies make no joint. The Joint and As-built Joint dialogs say so under the picks and offer
|
||||
|
||||
@@ -7,7 +7,7 @@ self-contained input/output format. `io::write_design` keeps its JSON contract;
|
||||
`io::write_design_container` is the fallible container writer.
|
||||
|
||||
Packages have `container.json` with `{"format":"solidcraft-container/1"}` and
|
||||
`document.json` with the versioned parametric document (currently `solidcraft/22`).
|
||||
`document.json` with the versioned parametric document (currently `solidcraft/23`).
|
||||
The independent versions let document migrations evolve without changing blob encodings.
|
||||
Existing serialized document fields are retained automatically, without a second copy
|
||||
of the document schema or a deep clone of embedded payloads.
|
||||
|
||||
+5
-2
@@ -1,6 +1,6 @@
|
||||
# Features
|
||||
|
||||
SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solidcraft-cli commands`). **373 commands.** Planned (registered, not built yet): 3. Every command runs the same way from the toolbar, a script, `solidcraft-cli exec <id> '<json>'`, the control channel and MCP; parameters are in the [command reference](book/src/reference/commands.md) (`cargo xtask book`). Status and plans: [ROADMAP](../ROADMAP.md).
|
||||
SolidCraft's commands by area, generated by `cargo xtask features` from the command registry (`solidcraft-cli commands`). **376 commands.** Planned (registered, not built yet): 3. Every command runs the same way from the toolbar, a script, `solidcraft-cli exec <id> '<json>'`, the control channel and MCP; parameters are in the [command reference](book/src/reference/commands.md) (`cargo xtask book`). Status and plans: [ROADMAP](../ROADMAP.md).
|
||||
|
||||
## Sketch (102)
|
||||
|
||||
@@ -246,7 +246,7 @@ SolidCraft's commands by area, generated by `cargo xtask features` from the comm
|
||||
| Break Link | `component.break_link` | – |
|
||||
| List Links | `component.links` | – |
|
||||
|
||||
## Assembly joints (11)
|
||||
## Assembly joints (14)
|
||||
|
||||
| Command | Id | Toolbar |
|
||||
|---|---|---|
|
||||
@@ -256,6 +256,9 @@ SolidCraft's commands by area, generated by `cargo xtask features` from the comm
|
||||
| Rigid Group | `joint.rigid_group` | SOLID › ASSEMBLE |
|
||||
| Drive Joints | `joint.drive` | SOLID › ASSEMBLE |
|
||||
| Motion Link | `joint.motion_link` | SOLID › ASSEMBLE |
|
||||
| Gear | `joint.gear` | SOLID › ASSEMBLE |
|
||||
| Rack and Pinion | `joint.rack_pinion` | SOLID › ASSEMBLE |
|
||||
| Screw | `joint.screw` | SOLID › ASSEMBLE |
|
||||
| Joint Limits | `joint.limits` | – |
|
||||
| Edit Joint | `joint.edit` | – |
|
||||
| Delete Joint | `joint.delete` | – |
|
||||
|
||||
Reference in new issue
Block a user