diff --git a/attachments.scad b/attachments.scad index c6d7c84..661f8e0 100644 --- a/attachments.scad +++ b/attachments.scad @@ -2348,13 +2348,13 @@ module edge_profile(edges=EDGES_ALL, except=[], excess=0.01, convexity=10) { // 2. Top // 3. Front or Back // . -// What this means is that if an edge string contains any edge on the bottom then the bottom edges will be oriented to joint the bottom face -// to something, and the rest of the string consistently oriented. If no bottom edges are present but top edges are present then the -// string will be oriented so that it can join its top face to something. If no top or bottom edges are present, then the edge (which must -// be just a single edge) will be oriented so that either the front or back face of the cube can make a smooth joint. +// What this means is that if an edge string contains any edge on the bottom then the bottom edges will be oriented to join the bottom face +// to something, and the rest of the string consistently oriented. If the string contains no bottom edges but it has top edges then +// the edge string will be oriented so that the object can join its top face to something. If the string has no top or bottom edges then it +// must be just a single edge and it will be is oriented so that either the front or back face of the cube can make a smooth joint. // If the edge orientation is reversed from what you need, set `flip=true`. If these rules seem complicated, just create your model, -// examine the edges, and flip them as required. Note that creating fillets with {{yflip()}} may partially work but is **not** the correct -// way to flip edges and can produce incomplete results. +// examine the edges, and flip them as required. Note that creating fillets with {{yflip()}} may seem similar to setting `flip=true` and +// may partially work but is **not** the correct way to flip edge profile; it can produce incomplete results. // // Arguments: // edges = Edges to mask. See [Specifying Edges](attachments.scad#subsection-specifying-edges). Default: All edges. diff --git a/vnf.scad b/vnf.scad index 8b14fa8..1349a7c 100644 --- a/vnf.scad +++ b/vnf.scad @@ -1418,6 +1418,18 @@ function _slice_3dpolygons(polys, dir, cuts) = // vnf_polyhedron([VNF, VNF, VNF, ...]) [ATTACHMENTS]; // Description: // Given a VNF structure, or a list of VNF structures, creates a polyhedron from them. +// . +// An arbitrary VNF may not have a geometry that matches well with the anchoring system. The anchors are +// automatically generated using one of two methods, the "hull" anchor type and the "intersect" anchor type. +// The "hull" method is the default. It finds an anchor point on the convex hull of the shape. It does this +// by taking a plane normal to the anchor direction and and shifting it to the most distant point on the VNF. +// This plane may intersect the VNF in one point, several points, or even a face. If it intersects in a face +// the anchor is the face centroid. Otherwise the anchor is the mean of the vertices of VNF that intersect the +// plane. The anchor direction will be the direction you originally specified. +// . +// The "intersect" method creates a ray based at the VNF center point that points in the anchor direction and +// chooses the most distant intersection point as the anchor. In this case, the anchor direction is +// computed from the VNF geometry based on the face or edge where that intersection point lies. // Arguments: // vnf = A VNF structure, or list of VNF structures. // convexity = Max number of times a line could intersect a wall of the shape.