Название: Вычисление координат в элементе после трансофрмации Отправлено: Fregloin от Ноябрь 01, 2013, 14:12 Есть прямоугольный элемент. По сути это ресайзер - элемент, который позволяет с помощью маркеров изменять размер дочернего.
Перемещение и изменение размеров делаю вручную. Все работает до того, как не использовать поворот. После этого все координаты сбиваются. Что то я не пойму, как после трансформации получить координаты в пространстве элемента? Привожу код Код: void CRailItemResizer::mousePressEvent(QGraphicsSceneMouseEvent *event) Без поворта все работает отлично, как только поворот сделан, все, все плывет.. Поворт раньше делал через setRotation а теперь так Код: QTransform matrix; Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: GreatSnake от Ноябрь 01, 2013, 14:17 Код
Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Fregloin от Ноябрь 01, 2013, 15:20 и как мне это доолжно помочь?
Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Igors от Ноябрь 02, 2013, 11:39 Что то я не пойму, как после трансформации получить координаты в пространстве элемента? Не работал с QGraphics, но математика везде одинакова. Должно быть так. В пространстве элемента все остается неизменным. matrix переводит из пр-ва элемента в мир. После того как Вы сделали первый поворот нужно сохранить полученную матрицу и при следующем повороте домножать ее на новую. Как они множат -хз, ну вариантов всего 2, методом втыка попадете.Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Fregloin от Ноябрь 04, 2013, 18:40 Вобщем проблема так и не решена.
Задача - создать класс, который позволял бы "редактировать" элементы на сцене. Под редактированием подразумевается: Клик по объекту на сцене, над этим элементом создается редактор, задача которого отслеживать перемещение мыши и транслировать их в элемент под ним. Например для изменения размера элемента или перемещения опортных точек полигона, из которого он состоит. Все бы хорошо, все работает, но после поворта уже все не так работает как хотелось бы. Уже неделю бьюсь, ничего не могу понять. В инете все прошерстил. Эти трансформации... Хоть убей не пойму. Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Old от Ноябрь 04, 2013, 19:01 Вобщем проблема так и не решена. Почитайте в ассистенте тему "The Graphics View Coordinate System".У вас есть методы mapFromXXX и mapToXXX, которые позволяют преобразовывать координаты из/в системы координат элемента, например, в систему координат сцены. Вам нужно взять координаты курсора мыши, преобразовать их в координатную систему элемента, тогда их можно сравнивать, или наоборот, преобразовать координаты всех узлов из системы координат элемента в систему координат сцены. Вот вышеназванная тема как раз описывает все системы координат и их взаимодействия друг с другом. Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Fregloin от Ноябрь 04, 2013, 22:12 Вот сделал минимальный пример, вырезал все, оставил только все что касается перемещение и изменения размеров элемента на сцене. Посмотрите пожклуйста и подскажите где я ошибся. Уже несколько дней бьюсь, не могу понять в упор что не так.
Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Igors от Ноябрь 05, 2013, 22:58 Пример: тянем правый верхний угол. Считаем что противоположный (левый нижний) остается на месте. Начало координат вйтема в левом верхнем углу
Код Edit: ошибка (которую я тоже повторил :)) была в том что pos() в координатах сцены, а event->pos() в координатах айтема. Складывая/вычитая их получаем ерунду Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Fregloin от Ноябрь 06, 2013, 10:40 Спасибо за ответ, но у меня он не заработал как надо. По сути ничего не изменилось, после поворота начинается расколбас.
Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: GreatSnake от Ноябрь 06, 2013, 13:10 Очень всё усложнил.
Вот переделанный CRailItemResizer::mouseMoveEvent(): Код но всё равно остаются проблемы с логикой расчёта. Может проще использовать QGraphicsPolygonItem с уже повёрнутым прямоугольником внутри? Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Igors от Ноябрь 06, 2013, 13:45 Спасибо за ответ, но у меня он не заработал как надо. По сути ничего не изменилось, после поворота начинается расколбас. У меня все норм - конечно только для одного угла который после поворота справаНазвание: Re: Вычисление координат в элементе после трансофрмации Отправлено: Fregloin от Ноябрь 06, 2013, 18:10 мне тоже кажется что логика рассчета у меня не ахти, но как говорится маемо те що маемо.
спасибо за советы, попробую еще совет от GreatSnake. Название: Re: Вычисление координат в элементе после трансофрмации Отправлено: Maestro от Ноябрь 12, 2013, 01:45 Помнится, нечто похожее есть в Embedded Dialogs Example
http://qt-project.org/doc/qt-5.0/qtwidgets/graphicsview-embeddeddialogs.html (http://qt-project.org/doc/qt-5.0/qtwidgets/graphicsview-embeddeddialogs.html) |