Current Progress on Offset
To date, the offset connection is able to build a multi-level bookshelf with all finger joints properly added on all edges. This bookshelf would be buildable with lazer cutter and wood.
The current implementation is based on the original addConnection() function. I add a third parameter offset to differentiate offset connection with plain connection. Also, I have rewritten part of the addFingerJoint() and the place() functions.
Some Fundamental Issues about the Implentation:
-Flip true true vs Flip true false:
- the problem with flip true true: Suppose we are building the below shape, all the faces initially are stacked above each other with their front pointing toward the same direction. top edge of A is connected to C with 90 degrees. left edge of A is connection to B with 90 degrees. Now, if we want to connect B to C, we would find that if we fold B and C toward each other so that they seemed to be stacked together, the front of B and C are pointing toward reverse direction (i.e. they now have flip true false relation), which violates the flip true true relation.
- the problem with flip true false: We can see the relation of A B C D and their front in the graph. If we use flip true false to connect D on B, then the front of D would be pointing to right as in the graph. However, if we now try to connect C and D, we would find that C and D are of flip true true relation, which violates the flip true false relation.
Conclusion: It seems like we need to enable both simultaneously, and users to specify flip true true or flip false false relation.
-addConnection() no longer compatible with face to edge connection:
Suppose we want to build the bookshelf with an additional board D. faceA has edge1, faceB has edge2, etc. In the current implementation of connection, we would have a dictionary to record the connection: {A 1:B 2,C 3,D 4,D 5}. However, the two edges 4 and 5 of D cannot possibly belong to one group of connection.
Conclusion: The current implementation works for lots of cases, and putting more effort into it, it can work for even more cases. However, we may need to diverge more from original implementation.