From a01731649c15b9c8c4d9981788ebcd01ce2913fb Mon Sep 17 00:00:00 2001 From: theb0b12 <103223932+theb0b12@users.noreply.github.com> Date: Thu, 30 Jul 2026 17:10:16 -0600 Subject: [PATCH] Add documentation for the path shape in outlines --- docs/assets/path_example.png | Bin 0 -> 9551 bytes docs/outlines.md | 111 +++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 docs/assets/path_example.png diff --git a/docs/assets/path_example.png b/docs/assets/path_example.png new file mode 100644 index 0000000000000000000000000000000000000000..a25ea7344343e7f981ed4444774467cc598ded10 GIT binary patch literal 9551 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 literal 0 HcmV?d00001 diff --git a/docs/outlines.md b/docs/outlines.md index 2f57e42..e70337f 100644 --- a/docs/outlines.md +++ b/docs/outlines.md @@ -508,9 +508,120 @@ With this, let's see a list of what actual shapes we can place, what extra attri ::: +- **`path`**: A custom vector path shape made of connected segments. + - **`segments`**: A mandatory array of segment definitions. Each segment specifies a structural portion of the path using a **`type`** (such as `line` or `arc`) and an array of **`points`** using standard Ergogen anchors. Consecutive segments automatically start from where the previous segment left off. +

Path Example - from b0b's board Good-Wings +

+ + + + +```yaml + outer_outline: + - what: path + segments: + - type: arc # thumb arc + points: + - ref: thumbs_far_thumb + shift: [0.6px, -0.6py] + - ref: thumbs_middle_thumb + shift: [0px, -0.6py] + - ref: thumbs_tuck_thumb + shift: [-0.6px, -0.6py] + + - type: line # thumb to pinky line + points: + - ref: thumbs_tuck_thumb + shift: [-0.6px, 0ky] + - ref: matrix_pinky_bottom + shift: [0.6px, -0.6ky] + - ref: matrix_outer-pinky_bottom + shift: [-0.6px, -0.6ky] + - ref: matrix_outer-pinky_top + shift: [-0.6px, 0.6ky] + + - type: line # top steplike lines + points: + - ref: matrix_ring_top + shift: [-0.6px, 0ky] + - ref: matrix_ring_top + shift: [-0.6px, 0.6ky] + - ref: matrix_middle_top + shift: [-0.6px, 0.15ky] + - ref: matrix_middle_top + shift: [-0.6px, 0.6ky] + - ref: matrix_middle_top + shift: [0.6px, 0.6ky] + - ref: matrix_middle_top + shift: [0.6px, 0.4ky] + + - type: arc # top arc + points: + - ref.aggregate.parts: [matrix_inner_top, mirror_matrix_inner_top] + shift: [0px, 0.6py] + - ref: mirror_matrix_middle_top + shift: [0.6px, 0.4ky] + + - type: line # top steplike lines mirror + points: + - ref: mirror_matrix_middle_top + shift: [0.6px, 0.4ky] + - ref: mirror_matrix_middle_top + shift: [0.6px, 0.6ky] + - ref: mirror_matrix_middle_top + shift: [-0.6px, 0.6ky] + - ref: mirror_matrix_middle_top + shift: [-0.6px, 0.15ky] + - ref: mirror_matrix_ring_top + shift: [-0.6px, 0.6ky] + - ref: mirror_matrix_ring_top + shift: [-0.6px, 0ky] + + - type: line # thumb to pinky line mirror + points: + - ref: mirror_matrix_outer-pinky_top + shift: [-0.6px, 0.6ky] + - ref: mirror_matrix_outer-pinky_bottom + shift: [-0.6px, -0.6ky] + - ref: mirror_matrix_pinky_bottom + shift: [0.6px, -0.6ky] + - ref: mirror_thumbs_tuck_thumb + shift: [-0.6px, 0ky] + - ref: mirror_thumbs_tuck_thumb + shift: [-0.6px, -0.6ky] + + - type: arc # thumb arc mirror + points: + - ref: mirror_thumbs_middle_thumb + shift: [0px, -0.6py] + - ref: mirror_thumbs_far_thumb + shift: [0.6px, -0.6py] + + - type: line # thumb v shape thing bottom + points: + - ref: mirror_thumbs_far_thumb + shift: [0.6px, 0.3py] + - ref: thumbs_far_thumb + shift: [0.6px, 0.3py] + + fillet: 1 +``` + + + +

+ +![Good-Wings Path Example](./assets/path_example.png) + +
+ + + +

+