Ответ на этот вопрос лучше всего иллюстрируется, когда мы пытаемся нарисовать квадратный путь, одна из сторон которого намеренно не указана в пути.
Допустим, мы хотим нарисовать квадрат размером с одну пользовательскую единицу, одна из сторон которого не включена в атрибут пути (d
). Итак, мы получим r.path('M0 0L1 0L1 1L0 1Z')
; или r.path(M0 0 1 0 1 1 0 1)
. Здесь мы явно не нарисовали последнюю сторону квадрата.
Мы ожидаем, что путь getTotalLength вернет 3, но вернет 4. Это потому, что перо должно закрыть путь от последней точки пути к первой точке пути (задание z
). Даже если вы не укажете z
в конце атрибута пути d
, перо будет перемещаться от своей последней точки на пути к первой точке пути с белым штрихом. Таким образом, общий нарисованный путь - это 3 стороны квадрата с черными чернилами и одна сторона квадрата с белыми чернилами, поэтому он возвращает 4. То же самое относится и к линиям.