mirror of
https://github.com/revarbat/BOSL2.git
synced 2025-08-21 07:41:30 +02:00
fix align() and add alignment to attach(). Deprecate norot from attach()
This commit is contained in:
@@ -470,9 +470,9 @@ prismoid([50,50],[30,30],h=40)
|
||||
You may have noticed that with position() and orient(), specifying the
|
||||
child anchors to position objects flush with their parent can be
|
||||
annoying, or sometimes even tricky. You can simplify this task by
|
||||
using the align() module. This module positions children at specified
|
||||
anchor points on the parent while picking the correct anchor points on
|
||||
the children so that they line up with faces on the parent object.
|
||||
using the align() module. This module positions children on faces
|
||||
of a parent and aligns to edges or corners, while picking the correct anchor points on
|
||||
the children so that the children line up correctly with the parent.
|
||||
|
||||
In the simplest case, if you want to place a child on the RIGHT side
|
||||
of its parent, you need to anchor the child to its LEFT anchor:
|
||||
@@ -501,7 +501,7 @@ with position():
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cuboid([50,40,15])
|
||||
align(RIGHT+FRONT+TOP)
|
||||
align(TOP,RIGHT+FRONT)
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4);
|
||||
```
|
||||
|
||||
@@ -514,54 +514,81 @@ single call to position(), but easily done using align():
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cuboid([50,40,15])
|
||||
align([RIGHT+TOP,LEFT+TOP])
|
||||
align(TOP,[RIGHT,LEFT])
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4);
|
||||
```
|
||||
|
||||
Align also accepts a spin argument, which lets you spin the child
|
||||
while still aligning it:
|
||||
If you want the children close to the edge but not actually flush you
|
||||
can use the `inset=` parameter of align to achieve this:
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cuboid([50,40,15])
|
||||
align(RIGHT+TOP,spin=90)
|
||||
align(TOP,[FWD,RIGHT,LEFT,BACK],inset=3)
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4);
|
||||
```
|
||||
|
||||
Note that this is different than using the spin argument to the child
|
||||
object, which will apply after alignment has been done.
|
||||
|
||||
If you spin the children then align will still do the right thing
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cuboid([50,40,15])
|
||||
align(RIGHT+TOP)
|
||||
align(TOP,[RIGHT,LEFT])
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4,spin=90);
|
||||
```
|
||||
|
||||
If you orient the object DOWN it will be attached from its top anchor:
|
||||
If you orient the object DOWN it will be attached from its top anchor,
|
||||
correctly aligned.
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cuboid([50,40,15])
|
||||
align(RIGHT+TOP,DOWN)
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4);
|
||||
align(TOP,RIGHT)
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4,orient=DOWN);
|
||||
```
|
||||
|
||||
When placing children on the RIGHT and LEFT, there is a spin applied.
|
||||
This means that setting spin=0 changes the orientation. Here we have
|
||||
one object with the default and one object with zero spin:
|
||||
Note that align() never changes the orientation of the children. If
|
||||
you put the blue prismoid on the right side the anchors line up but
|
||||
the edges of the child and parent don't.
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
prismoid(50,30,25){
|
||||
align(RIGHT+TOP,RIGHT,spin=0)
|
||||
align(RIGHT,TOP)
|
||||
color("lightblue")prismoid([10,5],[7,4],height=4);
|
||||
align(RIGHT+BOT,RIGHT)
|
||||
color("green")prismoid([10,5],[7,4],height=4);
|
||||
}
|
||||
```
|
||||
|
||||
If you apply spin that is not a multiple of 90 degrees then alignment
|
||||
will line up the corner
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cuboid([50,40,15])
|
||||
align(TOP,RIGHT)
|
||||
color("lightblue")cuboid(8,spin=33);
|
||||
```
|
||||
|
||||
You can also attach objects to a cylinder. If you use the usual cubic
|
||||
anchors then a cube will attach on a face as shown here:
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cyl(h=20,d=10,$fn=128)
|
||||
align(RIGHT,TOP)
|
||||
color("lightblue")cuboid(5);
|
||||
```
|
||||
|
||||
But with a cylinder you can choose an arbitrary horizontal angle for
|
||||
the anchor. If you do this, similar to the case of arbitrary spin,
|
||||
the cube will attach on the nearest corner.
|
||||
|
||||
```openscad-3D
|
||||
include<BOSL2/std.scad>
|
||||
cyl(h=20,d=10,$fn=128)
|
||||
align([1,.3],TOP)
|
||||
color("lightblue")cuboid(5);
|
||||
```
|
||||
|
||||
## Attachment overview
|
||||
|
||||
|
Reference in New Issue
Block a user