Raphael.js получает позиции отдельных элементов в наборе после поворота

1

У меня есть набор точек и линий. Очки - это просто круги и для меня важно отслеживать их позиции. Если я поверну свой набор, все элементы в наборе меняют положение на холсте. Мне нужно получить информацию о позиции для каждой точки. Если я пойду к своей точке и сделаю point.attr('cx'), я вижу, что ничего не изменилось. Я попробовал один метод, где в точке, которую я вызываю var bb = point.getBBox() и это, кажется, тянет обновленную точку, но если я попытаюсь установить обновленную информацию о точке в данной точке, например point.attr('cx',(bb.x + (bb.width/2)) это приводит к тому, что мой объект перемещается, что похоже на одно и то же вращение, поэтому моя 15-градусная поворачиваемость на 30 градусов (я думаю, что это происходит, но не уверен). Я заметил также я могу console.log объекта и увидеть point.attrs.cx, и он не обновляется, поэтому я сделал попытку вручную обновить его, и это вызвало другие нечетные поведения. Я знаю, что это трудно выполнить, не видя его, но возможно, если есть какая-то общая информация или какая-то лучшая практика для управления набором и убедитесь, что вы можете отслеживать объекты внутри, кажется, что-то, что должно быть встроено, но, возможно, есть способ легко добавить его. Спасибо.

Теги:
svg
raphael

1 ответ

1
Лучший ответ

Вот что я закончил с... call getBBox() получает новые координаты, которые обновляются до каждого атрибута точки. Вызов transform() - это мой недостающий кусок и ключ к ответу на мой вопрос. Он сбрасывает данные преобразования на объект, так что положение точки может быть верным для координат холста.

for (i = 0; i < points.length; i++) {
     var bb = tools.points[i].getBBox();
     points[i].attr('cx',bb.cx);
     points[i].attr('cy',bb.cy);
     points[i].transform('1 0 0 1 0 0');
}

Благодаря следующему сообщению, чтобы лучше понять SVG-преобразования https://www.sarasoueidan.com/blog/svg-transformations/, я также получил хорошую информацию из этой публикации. Что такое "матрица" для raphael

Ещё вопросы

Сообщество Overcoder
Наверх
Меню