Skip to main content

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