I've reverted to the initial code, where the points are stored and the constraint shapes reference the points, and fixed the lines constraints. I've made a list of all the checks for line constraints and recorded the current behaviour for all of them:
- a rectangle can be rotated and resized by dragging a corner
- we can add constraints to existing lines:
* parallel * perpendicular * horizontal * vertical * equal length * collinear- after drawing two parallel lines, any of them can be moved/resized by dragging any of the points
- after drawing parallel lines and fixing a point (adding a constraint point) dragging the other point causes the other line to be updated so that the constraint is maintained.