Progress of this week:
a. figuring out why multiple faces on one edge would fail
I tried to figure out why current Roco does not allow multiple faces on one edge. After a closer analysis, it actually allows that. The issue is that when we perform connect((faceA,edgeA),(faceB,edgeB)), Roco would add the edgeA in faceA to the edgeB in faceB and delete edgeA from faceA. Therefore, the result would be (faceA,None) and (faceB,{edgeB,edgeA}).
For the next round of connecting, if we do connect((faceC,edgeC),(faceA,edgeA)), edgeA does not exist any more, and thus the connection would fail. But if we do connect((faceC,edgeC),(faceB,{edgeB,edgeA})) instead, then we can connect faceC on B.
So the two possible implementations of multiple faces on one edge that I can think of at this point are:
(1) Update the edge of fromSurface (e.g. faceA) at every cycle of connection. So that faceC can connect to edgeA.
(2) Reorder the connection order, and make sure that when connecting multiple faces, they all have the same toSurface in the addConnection function.
b. build a bookshelf
Since the current system allows multiple faces on one edge, I tried to build a bookshelf with the current system.
Goals for next week:
a. Figure out how Roco determines which face is the front, and which face is the back. This is important because it determines how system interpret angle, left, right, bottom, left.
b. Try to implement the multiple faces on one edge adjustment.
c. Try to implement the offset function.