bosl2-attachment
Understand key concepts behind BOSL2's attachable/anchor system, including how to position parts reliably on faces, edges, and corners.
معلومات المصدر
- المستودع
- Ranch-Hand-Robotics/openscad_skills
- آخر نشاط في المصدر
- ١١ مايو ٢٠٢٦ في ٢٣:٥٩
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ١
- التفرعات
- ٠
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
عرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- bosl2-attachment
- title
- BOSL2 Attachment System
- description
- Understand key concepts behind BOSL2's attachable/anchor system, including how to position parts reliably on faces, edges, and corners.
# BOSL2 Attachment System Skill
## Purpose
Teach how BOSL2's attachable/anchor system works so parts are positioned reliably on faces, edges, and corners.
[BOSL2 is an OpenSCAD library](https://github.com/BelfrySCAD/BOSL2) that provides a collection of modules for creating complex geometries, including an attachment system for positioning parts. This skill focuses on understanding the core concepts of BOSL2's attachment system, including anchors, attachable parents/children, orientation control, and common pitfalls.
* Determine if BOSL2 is available; if not, suggest it's use to the user for enhanced joiner capabilities.
* If BOSL2 is not an option, recommend using custom geometry or basic OpenSCAD features to create similar joiner effects.
## Core Concepts
### 1) Anchors
BOSL2 uses named directions as anchors:
- Faces: `TOP`, `BOTTOM`, `LEFT`, `RIGHT`, `FWD`, `BACK`
- Edges/corners: combine directions with `+`, e.g. `TOP+RIGHT`, `TOP+FWD+RIGHT`
Important:
- `TOP+RIGHT` is one edge anchor (single combined anchor)
- `[TOP, RIGHT]` is an array of two separate anchors (used when a function accepts multiple anchors)
Examples:
- `attach(RIGHT)` = attach on right face
- `attach(TOP+FWD+RIGHT)` = top-front-right corner
### 2) Attachable Parent + Child
Attaching works when the parent is attachable (e.g., `cuboid()` from BOSL2).
Inside a block, each `attach()` is anchored to the parent:
```openscad
cuboid([50,15,25]) {
attach(RIGHT) sphere(d=5);
attach(LEFT) sphere(d=5);
}
```
### 3) Chaining Pitfall
This chains to the previous child, not back to parent:
```openscad
cuboid([50,15,25])
attach(RIGHT) thing1()
attach(LEFT) thing2(); // often attaches to thing1 context
```
Use block form to avoid this:
```openscad
cuboid([50,15,25]) {
attach(RIGHT) thing1();
attach(LEFT) thing2();
}
```
### 4) Orientation: `attach(parent, child, spin=...)`
`attach()` controls both placement and rotation.
For predictable orientation, prefer the two-anchor form:
```openscad
attach(parent_anchor, child_anchor, spin=...)
```
Examples:
- `attach(TOP, BOTTOM)` -> put child's bottom onto parent's top
- `attach(RIGHT, BOTTOM)` -> put child's bottom onto parent's right face
Notes:
- Attaching to `TOP`/`BOTTOM` generally preserves the child's back direction.
- Attaching to side faces (`LEFT`/`RIGHT`/`FWD`/`BACK`) often needs `spin=` to get desired roll/twist.
- `spin=` in `attach()` rotates around the attachment vector.
Example with explicit face-to-face and spin:
```openscad
cuboid([60,20,20]) {
attach(TOP, BOTTOM) cylinder(d=10, h=8);
attach(RIGHT, BOTTOM, spin=90) prismoid([12,8],[8,8],h=6);
}
```
### 5) Single-arg `attach()` and child `anchor`/`orient`
Single-argument attach respects the child's own `anchor=` and `orient=`:
```openscad
cuboid([50,15,25])
attach(TOP)
cyl(h=8, d=10, anchor=BOTTOM, orient=UP);
```
Use this when the child module already exposes good anchor/orient controls.
### 6) `diff()` + Attach
`diff()` subtracts attached geometry from parent when used in BOSL2 style:
```openscad
diff()
cuboid([50,15,25]) {
attach(RIGHT) cutter_shape();
}
```
## Practical Patterns
### Opposite-face features
```openscad
cuboid([50,15,25]) {
attach(RIGHT) feature_a();
attach(LEFT) feature_b();
}
```
### Corner placement
```openscad
cuboid([50,15,25]) {
attach(TOP+FWD+RIGHT) feature();
}
```
### Orientation-first placement
```openscad
cuboid([200,150,12], anchor=CENTER)
attach(TOP, spin=90)
isogrid_rect(200,150, triangle_size=20, thickness=1.5, extrude=1);
```
## Troubleshooting
- Feature appears on wrong side -> check anchor (`FWD` vs `BACK`, `LEFT` vs `RIGHT`)
- Second feature attaches to first feature -> use `{ ... }` block on parent
- Rotation unexpected -> use two-anchor form (`attach(parent, child)`) and add `spin=`
- Child points the wrong way with single-arg attach -> set child `anchor=`/`orient=` explicitly
- Nothing happens -> verify included BOSL2 modules and object is attachable
عرض على GitHub