В моем понимании это может быть реализовано в виде линии и шейпа как независимых от канвы объектов. Но вот сам написать такие объекты я еще не в состоянии.
Я знаю про это, но дело в том, что рисуется все динамически непосредственно во время работы программы, т.е. мне придется писать очередной костыль, который будет вычислять координаты начала и конца каждой линии и перерисовывать их. А тут еще всплывет первый пункт и все линии нарисуются поверх шейпов, т.е. придется перерисовывать еще и все шейпы.