Edges ===== Edges are what makes Boxes.py work. They draw a -- more or less -- straight border to the current piece. They are part of the turtle graphics part of Boxes.py. This means they start at the current position and current direction and move the current position to the end of the edge. Edge instances have a Settings object associated with them that keeps the details about what the edge should look like. Edges that are supposed to work together share the same Settings object to ensure they fit together - assuming they have the same length. Most edges are symmetrical to ensure they fit together even when drawn from different directions. Although there are a few exceptions - mainly edges that provide special features like hinges. As edges started out as methods of the main Boxes class they still are callables. It turned out that the edges need to provide a bit more information to allow the surrounding code to handle them properly. When drawing an Edge there is a virtual straight line that is the border the shape of the part (e.g. an rectangle). But the actual Edge often has to be drawn elsewhere. The best example is probably the ``F`` Edge that matches the normal finger joints. It has to start one material thickness outside of the virtual border of the part so the cutouts for the opposing fingers just touch the border. The Edge classes have a number of methods to deal with these kinds of offsets. A set of instances are kept in the ``.edges`` attribute of the ``Boxes`` class. It is a dict with strings of length one as keys: * aAbB : reserved to be used in generators * c : ClickConnector * C : ClickEdge * d : DoveTailJoint * D : DoveTailJointCounterPart * e : Edge * E : OutSetEdge * f : FingerJointEdge * F : FingerJointEdgeCounterPart * g : GrippingEdge * G : MountingEdge * h : FingerHoleEdge * ijk : Hinge (start, end, both sides) * IJK : HingePin (start, end, both sides) * L : LidHoleEdge * l : LidEdge * M : LidSideLeft * m : LidLeft * N : LidSideRight * n : LidRight * Oo : ChestHinge * Pp : ChestHingeTop * Q : ChestHingeFront * q : ChestHingePin * R : RackEdge * s : StackableEdge * S : StackableEdgeTop * š : StackableFeet * Š : StackableHoleEdgeTop * T : RoundedTriangleFingerHolesEdge * t : RoundedTriangleEdge * uUvV : CabinetHingeEdge * X : FlexEdge * y : HandleEdge * Y : HandleHoleEdge * Z : GroovedEdgeCounterPart * z : GroovedEdge Edge base class --------------- .. autoclass:: boxes.edges.BaseEdge :members: .. automethod:: boxes.edges.BaseEdge.__call__ Settings Class -------------- .. autoclass:: boxes.edges.Settings :members: Straight Edges -------------- .. autoclass:: boxes.edges.Edge .. autoclass:: boxes.edges.OutSetEdge Grip ---- .. autoclass:: boxes.edges.GripSettings .. autoclass:: boxes.edges.GrippingEdge Stackable Edges --------------- .. autoclass:: boxes.edges.StackableEdge .. autoclass:: boxes.edges.StackableEdgeTop Stackable Edge Settings ....................... .. autoclass:: boxes.edges.StackableSettings :members: Finger joints ------------- Finger joints are a simple way of joining two sheets (e.g. of plywood). They work best at an 90° angle. There are two different sides matching each other. As a third alternative there are holes that the fingers of one sheet can plug into. This allows stable T connections especially useful for inner walls. .. autoclass:: boxes.edges.FingerJointEdge .. autoclass:: boxes.edges.FingerJointEdgeCounterPart .. autoclass:: boxes.edges.FingerHoleEdge .. autoclass:: boxes.edges.CrossingFingerHoleEdge In addition there is .. autoclass:: boxes.edges.FingerHoles which is no Edge but fits ``FingerJointEdge``. An instance of is accessible as **Boxes.fingerHolesAt**. Finger Joint Settings ..................... .. autoclass:: boxes.edges.FingerJointSettings :members: Bed Bolts ......... .. autoclass:: boxes.edges.BoltPolicy .. autoclass:: boxes.edges.Bolts Dovetail Joints ---------------- Dovetails joints can only be used to join two pieces flatly. This limits their use to closing some round form created with flex areas or for joining several parts to a bigger one. For this use case they are much stronger than simple finger joints and can also bare pulling forces. .. autoclass:: boxes.edges.DoveTailJoint .. autoclass:: boxes.edges.DoveTailJointCounterPart Dovetail Settings .................. .. autoclass:: boxes.edges.DoveTailSettings :members: Flex ---- .. autoclass:: boxes.edges.FlexEdge Flex Settings ............. .. autoclass:: boxes.edges.FlexSettings Slots ----- .. autoclass:: boxes.edges.Slot .. autoclass:: boxes.edges.SlottedEdge CompoundEdge ------------ .. autoclass:: boxes.edges.CompoundEdge Hinges ------ Hinge Settings .............. .. autoclass:: boxes.edges.HingeSettings Hinge ..... .. autoclass:: boxes.edges.Hinge HingePin ........ .. autoclass:: boxes.edges.HingePin