Skip to content

Commit

Permalink
attachments fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianVmariano committed Sep 27, 2024
1 parent 9671a8a commit c2f5fa7
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 6 deletions.
12 changes: 6 additions & 6 deletions attachments.scad
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,7 @@ module attach(parent, child, overlap, align, spin=0, norot, inset=0, shiftout=0,

two_d = _attach_geom_2d($parent_geom);
basegeom = $parent_geom[0]=="conoid" ? attach_geom(r=2,h=2)
: $parent_geom[0]=="spheroid" ? echo("here")attach_geom(r=2)
: attach_geom(size=[2,2,2]);
child_abstract_anchor = is_vector(child) && !two_d ? _find_anchor(child, basegeom) : undef;
overlap = (overlap!=undef)? overlap : $overlap;
Expand Down Expand Up @@ -939,7 +940,7 @@ module attach(parent, child, overlap, align, spin=0, norot, inset=0, shiftout=0,
anchor_spin = two_d || !inside || anchor==TOP || anchor==BOT ? anchor_data[3]
: let(spin_dir = rot(anchor_data[3],from=UP, to=-anchor_dir, p=BACK))
_compute_spin(anchor_dir,spin_dir);
parent_abstract_anchor = is_vector(parent) && !two_d ? _find_anchor(parent,basegeom) : undef;
parent_abstract_anchor = is_vector(anchor) && !two_d ? _find_anchor(anchor,basegeom) : undef;
for(align_ind = idx(align_list)){
align = is_undef(align_list[align_ind]) ? undef
: assert(is_vector(align_list[align_ind],2) || is_vector(align_list[align_ind],3), "align direction must be a 2-vector or 3-vector")
Expand All @@ -953,7 +954,7 @@ module attach(parent, child, overlap, align, spin=0, norot, inset=0, shiftout=0,
pos = is_undef(align) ? anchor_data[1] : _find_anchor(anchor+align, $parent_geom)[1];
$attach_anchor = list_set(anchor_data, 1, pos); // Never used; For user informational use? Should this be set at all?
// Compute adjustment to the child anchor for position purposes. This adjustment
// accounts for the change in the anchor needed to to alignment.
// accounts for the change in the anchor needed to to alignment.
child_adjustment = is_undef(align)? CTR
: two_d ? rot(to=child,from=-factor*anchor,p=align)
: apply( rot(to=child_abstract_anchor[2],from=UP)
Expand Down Expand Up @@ -3569,8 +3570,7 @@ function _attach_transform(anchor, spin, orient, geom, p) =
// if $anchor_override is set it defines the object position anchor (but note not direction or spin).
// Otherwise we use the provided anchor for the object.
pos = is_undef($anchor_override) ? anch[1]
: _find_anchor(_make_anchor_legal($anchor_override,geom),geom)[1],
f=is_undef($anchor_override) ? 0 : echo(geo=_find_anchor(_make_anchor_legal($anchor_override,geom),geom)[1])
: _find_anchor(_make_anchor_legal($anchor_override,geom),geom)[1]
)
two_d?
assert(is_num(spin))
Expand Down Expand Up @@ -3861,7 +3861,8 @@ function _find_anchor(anchor, geom) =
// may appear twice WITH DIFFERENT VERTEX INDICES if repeated points appear in the vnf.
edges_faces = len(idxs)==2 ? // Simple case, no repeated points, [idxs] gives the edge
approx(vnf[0][idxs[0]],vnf[0][idxs[1]]) ? [] // Are edge points identical?
: [[idxs],_vnf_find_edge_faces(vnf,idxs)]
: let( facelist = _vnf_find_edge_faces(vnf,idxs))
len(facelist)==2 ? [[idxs], facelist] : []
: len(idxs)!=4 ? [] // If we don't have four points it's not an edge pair
: let(
pts = select(vnf[0],idxs),
Expand Down Expand Up @@ -4784,7 +4785,6 @@ function _force_anchor_2d(anchor) =
// direction and gives the spin angle that achieves it.
function _compute_spin(anchor_dir, spin_dir) =
let(
f=echo(ad=anchor_dir, spin_dir),
native_dir = rot(from=UP, to=anchor_dir, p=BACK),
spin_dir = spin_dir - (spin_dir*anchor_dir)*anchor_dir, // component of spin_dir perpendicular to anchor_dir
dummy = assert(!approx(spin_dir,[0,0,0]),"spin direction is parallel to anchor"),
Expand Down
4 changes: 4 additions & 0 deletions tutorials/Attachments.md
Original file line number Diff line number Diff line change
Expand Up @@ -2011,6 +2011,7 @@ value drived from the standard anchor will be used. Below we override
position of the FWD anchor:

```openscad-3D
include<BOSL2/std.scad>
module cubic_barbell(s=100, anchor=CENTER, spin=0, orient=UP) {
override = [
[FWD, [[0,-s/8,0]]]
Expand All @@ -2031,6 +2032,7 @@ you wanted to also change its direction and spin you could do it like
this:

```openscad-3D
include<BOSL2/std.scad>
module cubic_barbell(s=100, anchor=CENTER, spin=0, orient=UP) {
override = [
[FWD, [[0,-s/8,0], FWD+LEFT, 225]]
Expand All @@ -2055,6 +2057,7 @@ the x=0 anchors to be on the cylinder, with their standard directions,
you can do that by supplying a list:

```openscad-3D
include<BOSL2/std.scad>
module cubic_barbell(s=100, anchor=CENTER, spin=0, orient=UP) {
override = [
for(j=[-1:1:1], k=[-1:1:1])
Expand All @@ -2079,6 +2082,7 @@ default. As before, you can omit values to keep their default.
Here is the same example using a function literal for the override:

```openscad-3D
include<BOSL2/std.scad>
module cubic_barbell(s=100, anchor=CENTER, spin=0, orient=UP) {
override = function (anchor)
anchor.x!=0 || anchor==CTR ? undef // Keep these
Expand Down

0 comments on commit c2f5fa7

Please sign in to comment.