void Edge::adjust() { if (!source || !dest) return; QRectF srect = source->boundingRect(); QRectF drect = dest->boundingRect(); QLineF line(mapFromItem(source, srect.width() / 2, srect.height() / 2), mapFromItem(dest, drect.width() / 2, drect.height() / 2)); qreal length = line.length(); prepareGeometryChange(); if (length > qreal(40.)) { qreal line_angle = line.angle(); qreal angle = line_angle > 90. ? fmod(line_angle, 90.0) : line_angle; qreal dist = qMax(angle, 45.0) - qMin(angle, 45.0); dist += 80.0 - dist; QPointF edgeOffset((line.dx() * dist) / length, (line.dy() * dist) / length); sourcePoint = line.p1() + edgeOffset; destPoint = line.p2() - edgeOffset; qreal new_angle = QLineF(sourcePoint, destPoint).angle(); if (qAbs(new_angle - line_angle) > 90.) sourcePoint = destPoint = line.p1(); } else { sourcePoint = destPoint = line.p1(); } }
void GEdge::adjust() { if (!source || !dest) return; QLineF * line = new QLineF (source->x(), source->y(), dest->x(), dest->y()); qreal length = line->length(); prepareGeometryChange(); if (length > qreal(20.)) { QPointF edgeOffset((line->dx() * 10) / length, (line->dy() * 10) / length); if (is_from_dummy_node) sourcePoint = line->p1(); else sourcePoint = line->p1() + edgeOffset; if (is_to_dummy_node) destPoint = line->p2(); else destPoint = line->p2() - edgeOffset; } else { sourcePoint = destPoint = line->p1(); } }
/** * Labels the edges of the given graph using Par and Low values. * Edge labels are stored in the graph itself as values for each edge in the CSR representation */ void labelEdges(Graph *graph, int *Par, int *Low) { #pragma omp parallel for schedule(static) for(int u = 0; u < graph->numVertices; u++) { int uLow = Low[u]; int uPar = Par[u]; int start = edgeOffset(graph, u); int end = edgeOffset(graph, u + 1); for(int i = start; i < end; i++) { int v = graph->edgeArray[i]; if(Low[v] == uLow || uPar == v) { graph->edgeLabels[i] = uLow; } else { graph->edgeLabels[i] = Low[v]; } } } }
void Edge::adjust() { if (!source || !dest) return; QPointF pStart = mapFromItem(source, 0, 0); QPointF pEnd = mapFromItem(dest, 0, 0); QRectF sourceBounds = source->boundingRect(); QRectF destBounds = dest->boundingRect(); //move points to middle of boundingboxes pStart.setX(pStart.x() + source->boundingRect().width()/2); pEnd.setX(pEnd.x() + dest->boundingRect().width()/2); pStart.setY(pStart.y() + source->boundingRect().height()/2); pEnd.setY(pEnd.y() + dest->boundingRect().height()/2); //adjust docking edges relative to point positions if (abs(pStart.y() - pEnd.y()) < destBounds.height()+30.f)//start and end are approximately at same height { if (pStart.x() > pEnd.x()) //start is to the right of end { pStart.setX(pStart.x()-sourceBounds.width()/2); pEnd.setX(pEnd.x()+destBounds.width()/2); } else //start is to the left of end { pStart.setX(pStart.x()+sourceBounds.width()/2); pEnd.setX(pEnd.x()-destBounds.width()/2); } } else if (pStart.y() > pEnd.y())//start is over end { pStart.setY(pStart.y()-sourceBounds.height()/2); pEnd.setY(pEnd.y()+destBounds.height()/2); } else //start is under end { pStart.setY(pStart.y()+sourceBounds.height()/2); pEnd.setY(pEnd.y()-destBounds.height()/2); } QLineF line(pStart, pEnd); qreal length = line.length(); prepareGeometryChange(); if (length > qreal(20.)) { QPointF edgeOffset((line.dx() * 10) / length, (line.dy() * 10) / length); sourcePoint = line.p1() + edgeOffset; destPoint = line.p2() - edgeOffset; } else { sourcePoint = destPoint = line.p1(); } }
void Connection::resizeLine() { QLineF line( mapFromItem( m_fromNode, 0, 0 ), mapFromItem( m_toNode, 0, 0 ) ); const qreal length = line.length(); QPointF edgeOffset(( line.dx() * 10 ) / length, ( line.dy() * 10 ) / length ); prepareGeometryChange(); //prepareGeometryChange() will call update() if this is necessary m_sourcePoint = line.p1() + edgeOffset; m_destPoint = line.p2() - edgeOffset; }
void Edge::adjust() { if (!source || !dest) return; QLineF line(mapFromItem(source, 0, 0), mapFromItem(dest, 0, 0)); qreal length = line.length(); QPointF edgeOffset((line.dx() * 30) / length, (line.dy() * 30) / length); prepareGeometryChange(); sourcePoint = line.p1() + edgeOffset; destPoint = line.p2() - edgeOffset; }
void Edge::adjust() { /// sourcePoint=source->myPos; /// NOTE: mapfrom Item is the key;) QLineF line(mapFromItem(source, 0, 0), mapFromItem(dest, 0, 0)); //QLineF line(sourcePoint,destPoint); qreal length = line.length(); QPointF edgeOffset((line.dx() * 3) / length, (line.dy() * 3) / length); //prepareGeometryChange(); update(); sourcePoint = line.p1() ;//+ edgeOffset; destPoint = line.p2() ;//- edgeOffset; }
void Edge::adjust() { if (!source || !dest) return; QLineF line(mapFromItem(source, 0, 0), mapFromItem(dest, 0, 0)); qreal length = line.length(); prepareGeometryChange(); if (!qFuzzyCompare(length, qreal(0.0))) { QPointF edgeOffset((line.dx() * 10) / length, (line.dy() * 10) / length); sourcePoint = line.p1() + edgeOffset; destPoint = line.p2() - edgeOffset; } else { sourcePoint = destPoint = line.p1(); } }
void GraphicsEdge<GNode>::adjust() { if (!this->startN || !this->endN) return; QLineF line(mapFromItem(this->startN, 0, 0), mapFromItem(this->endN, 0, 0)); qreal length = line.length(); prepareGeometryChange(); if (length > qreal(20.)) { QPointF edgeOffset((line.dx() * 10) / length, (line.dy() * 10) / length); startPoint = line.p1() + edgeOffset; endPoint = line.p2() - edgeOffset; } else { startPoint = endPoint = line.p1(); } }
void Edge::adjust() { if (!srcN_ || !tarN_) return; QLineF line(mapFromItem(srcN_, 0, 0), mapFromItem(tarN_, 0, 0)); qreal length = line.length(); prepareGeometryChange(); if (length > qreal(20.)) { QPointF edgeOffset((line.dx() * 37) / length, (line.dy() * 12) / length); srcP_ = line.p1() + edgeOffset; tarP_ = line.p2() - edgeOffset; } else { srcP_ = tarP_ = line.p1(); } }
void WGraphicsArrowItem::adjust() { if (!m_startNode || !m_endNode) return; QLineF line(mapFromItem(m_startNode, 0, 0), mapFromItem(m_endNode, 0, 0)); qreal length = line.length(); prepareGeometryChange(); if (length > m_minDisplayableSize) { QPointF edgeOffset((line.dx() * 10) / length, (line.dy() * 10) / length); m_line.setP1(line.p1() + edgeOffset); m_line.setP2(line.p2() - edgeOffset); } else { m_line.setPoints(line.p1(), line.p1()); } }
void Edge::adjust() { if (!source || !dest) return; QLineF line(mapFromItem(source, 0, 0), mapFromItem(dest, 0, 0)); qreal length = line.length(); prepareGeometryChange(); int ballSize = source->getBallSize(); if (length > qreal(ballSize)) { QPointF edgeOffset((line.dx() * ballSize/2) / length, (line.dy() * ballSize/2) / length); sourcePoint = line.p1() + edgeOffset; destPoint = line.p2() - edgeOffset; } else { sourcePoint = destPoint = line.p1(); } }