crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Пересечение QGraphicsItem на QGrahicsScene
Гость_MAx_*
сообщение 7.4.2011, 21:07
Сообщение #1





Гости








    


Столкнулся со следующей проблемой. Необходимо найти точку пересечения линии и Залитой фигуры QGraphicsItem. Пробовал использовать QLineF::intersect но она возвращает если пересекаются две линии. Подскажите как узнать точку пересечения QLineF и QPainterPath; Заранее спасибо ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 8.4.2011, 8:31
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(MAx @ 7.4.2011, 22:07) *
Столкнулся со следующей проблемой. Необходимо найти точку пересечения линии и Залитой фигуры QGraphicsItem. Пробовал использовать QLineF::intersect но она возвращает если пересекаются две линии. Подскажите как узнать точку пересечения QLineF и QPainterPath; Заранее спасибо ...

Доброе время суток. Узнать можно лишь перебрав все отрезки из QPainterPath и проверив их на пересечение с твоим отрезком. QPainterPath intersect возвращает результат лишь в том случае, если при пересечении получается контур. Напрямую получить точку пересечения в любом случае не получится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_MAx_*
сообщение 17.4.2011, 10:04
Сообщение #3





Гости








    


Пробую, но не получается, не правильно возвращает координату с метода QLineF::intersect(QLineF, *QPointF);
Кто сталкивался с такой проблемой хелп плиз...

Прямая вращается и когда сталкивается с обьектом она вызывает метод и передает в него указаталь на этот обьект:
QPointF Arthur::intersectPoint(QGraphicsItem *it)
{
    bool first = true;
    QPointF t1, t2, t3;
    QPainterPath h = it->shape();
    for (int i = 1; i< h.elementCount(); i++)
    {
        if (!first)
        {
            t1 = h.elementAt(i);
            continue;
        }
        t2 = h.elementAt(i);

        QLineF l1 (it->mapToScene(t1),it->mapToScene(t2));
        if(Linne->intersect(l1, &t3) == 2)
        {
            break;
        }
        t1 = t2;
    }
    
    sc->addRect(t3.x(),t3.y(),150,150,QPen(),QBrush(QColor(Qt::red))); // Этот QRect рисует черт знает где , а не в точке пересечения...
    
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 15:25