| 426 | } |
| 427 | |
| 428 | void |
| 429 | Edge::initLine() |
| 430 | { |
| 431 | NodeGuiPtr source = _imp->source.lock(); |
| 432 | NodeGuiPtr dest = _imp->dest.lock(); |
| 433 | |
| 434 | if (!source && !dest) { |
| 435 | return; |
| 436 | } |
| 437 | |
| 438 | double sc = scale(); |
| 439 | QRectF sourceBBOX = source ? mapFromItem( source.get(), source->boundingRect() ).boundingRect() : QRectF(0, 0, 1, 1); |
| 440 | QRectF destBBOX = dest ? mapFromItem( dest.get(), dest->boundingRect() ).boundingRect() : QRectF(0, 0, 1, 1); |
| 441 | QSize dstNodeSize; |
| 442 | QSize srcNodeSize; |
| 443 | if (dest) { |
| 444 | dstNodeSize = QSize( destBBOX.width(), destBBOX.height() ); |
| 445 | } |
| 446 | if (source) { |
| 447 | srcNodeSize = QSize( sourceBBOX.width(), sourceBBOX.height() ); |
| 448 | } |
| 449 | |
| 450 | QPointF dst; |
| 451 | |
| 452 | if (dest) { |
| 453 | dst = destBBOX.center(); |
| 454 | } else if (source && !dest) { |
| 455 | dst = QPointF( sourceBBOX.x(), sourceBBOX.y() ) + QPointF(srcNodeSize.width() / 2., srcNodeSize.height() + 10); |
| 456 | } |
| 457 | |
| 458 | std::vector<QLineF> dstEdges; |
| 459 | std::vector<QLineF> srcEdges; |
| 460 | if (dest) { |
| 461 | makeEdges(destBBOX, dstEdges); |
| 462 | } |
| 463 | if (source) { |
| 464 | makeEdges(sourceBBOX, srcEdges); |
| 465 | } |
| 466 | |
| 467 | |
| 468 | QPointF srcpt; |
| 469 | |
| 470 | if (source && dest) { |
| 471 | /// This is a connected edge, either input or output |
| 472 | srcpt = sourceBBOX.center(); |
| 473 | setLine( dst.x(), dst.y(), srcpt.x(), srcpt.y() ); |
| 474 | } else if (!source && dest) { |
| 475 | /// The edge is an input edge which is unconnected |
| 476 | srcpt = QPointF( dst.x() + (std::cos(_imp->angle) * 100000 * sc), |
| 477 | dst.y() - (std::sin(_imp->angle) * 100000 * sc) ); |
| 478 | setLine( dst.x(), dst.y(), srcpt.x(), srcpt.y() ); |
| 479 | } else if (source && !dest) { |
| 480 | /// The edge is an output edge which is unconnected |
| 481 | srcpt = QPointF( sourceBBOX.x(), sourceBBOX.y() ) + QPointF(srcNodeSize.width() / 2., srcNodeSize.height() / 2.); |
| 482 | setLine( dst.x(), dst.y(), srcpt.x(), srcpt.y() ); |
| 483 | } |
| 484 | |
| 485 | bool foundDstIntersection = false; |
no test coverage detected