FlorianPommerening / FingerJoints

Fusion 360 add-in for creating finger joints
121 stars 10 forks source link

Support overlap where bodies are not at 90 degrees #13

Open AdamMSmith1 opened 2 years ago

AdamMSmith1 commented 2 years ago

Howdy!

Just discovered this add-in, and I love it! Works great for joints that meet at 90 degrees.

However, when the bodies overlap at a different angle, such as when using flat faces as a piecewise approximation of a curve, the tool only removes "divots" out of the ends of each piece. This is because the tool bodies are created by calculating the finger/notch boxes then intersecting this with the original overlap body.

This is a great sanity/bounding condition for most cases!

To support, say, a 135 degree joint, it seems like this could be accomplished by running the tool as normal, with one minor tweak. Alas, my 360 add-in skills are not (yet?) up to snuff.

The tweak would be to accept an (optional?) cut face for each of the two bodies. Then, when generating the tool bodies, rather than intersect with the overlap body, you'd intersect with the bounding box of overlap region, in a local coordinate space defined by the direction vector and the face normal.

That is, just by transforming (which will always be a "rotation about z" in local space, as the add-in defines things) the overlap body immediately prior to intersecting with the bounding box, you'll get the "projection onto the selected face", which is also "the path the laser cutter needs to cut to ensure no overlap of pieces."

I believe this will work for pieces of uniform, and identical, thickness.

To support uniform but different thicknesses, we'd likely need to literally project the overlap body onto each face, then "extruding" it until it hits the "opposite", parallel face to the face the user selects. In theory this can be done by using the body object...? This would work in the more general case, but seems to involve a little more geometry object manipulation.

I'd be happy to help, if I can, but I'm mostly thinking in terms of "stuff I'd do in the UI", which I don't know how to do in the SDK.

Thanks!

FlorianPommerening commented 2 years ago

Hi Adam,

I can't quite follow your description but it sounds like an interesting addition. Could you post some screenshots or drawings as examples? I tried to keep the add-in independent of the particular way two pieces meet and the shape those two pieces have. So even non-flat, non-uniform pieces meeting at different angles should work. Like this one for example

Example

Now this is probably not what you have in mind, so could you explain it again with screenshots of what the add-in currently does, of what you would expect in this case, and ideally also on your proposed solution?

AdamMSmith1 commented 2 years ago

Sorry - see this image: image

The add on does a great job of making a really clean fit, if only the laser cutter could cut it. :)

When I do this manually, for each board I project onto its convex face the concave face of the other board, and then make cuts perpendicular to the convex face equal to that extent.

This clearly doesn't have as strong of an overlap, but, with the laser limitation meaning that all cuts are perpendicular, what are you going to do, yeah? :)

FlorianPommerening commented 2 years ago

OK, I think I understand the problem now. Not so sure about the solution yet. Is this what you had in mind:

I have to think about this a bit. So far, I limited the cut to the actual overlap of the two parts (plus maybe a small area around it for the experimental gaps). Then there is no potential for accidentally cutting away another piece of the part. But if we extend a profile through the whole part, this could happen. It would be limited to cases where the part somehow loops back on itself, I guess. Maybe that is OK for an optional feature. Maybe that is even desired with an option like this ...

AdamMSmith1 commented 2 years ago

Yes, you've got it exactly. And, yes, this would not be a good idea for situations where we have non-planar or even just non-uniform-thickness materials, or at least it would have the risk of doing Bad Things(tm) to the rest of the body.
On the other hand, that's always going to be the reality for laser cutters. I think it would often be the case for standard router CNC, but since those can do partial depth cuts, it's not a gimme.

Since I have a laser cutter, though... ;)