Skip to content
Snippets Groups Projects
Commit 93aa5b4e authored by Sergio Galindo's avatar Sergio Galindo
Browse files

Merge branch 'arrowZero' into 'master'

Connections with same origin and destination are not draw.

See merge request nsviz/NeuroScheme!99
parents aff8c64b a4bb52ab
No related branches found
No related tags found
No related merge requests found
...@@ -83,101 +83,103 @@ namespace nslib ...@@ -83,101 +83,103 @@ namespace nslib
void ConnectionArrowItem::createArrow( const QPointF& origin, void ConnectionArrowItem::createArrow( const QPointF& origin,
const QPointF& dest ) const QPointF& dest )
{ {
float itemInvScale = auto painterPath = QPainterPath( );
1.0f / static_cast< float >( this->scale( )); if ( origin != dest )
{
_arrowOrigin = itemInvScale * origin; float itemInvScale =
_arrowDest = itemInvScale * dest; 1.0f / static_cast< float >( this->scale( ));
QPolygonF arrowShape; _arrowOrigin = itemInvScale * origin;
_arrowDest = itemInvScale * dest;
float arrowWidth = 6.0f * itemInvScale * nslib::Config::scale( ); QPolygonF arrowShape;
float arrowLength = 3.0f * itemInvScale * nslib::Config::scale( );
QLineF auxLine( _arrowOrigin, _arrowDest ); float arrowWidth = 6.0f * itemInvScale * nslib::Config::scale( );
float arrowLength = 3.0f * itemInvScale * nslib::Config::scale( );
auto lengthInv = 1.0f / auxLine.length( ); QLineF auxLine( _arrowOrigin, _arrowDest );
double angle = ::acos( auxLine.dx( ) * lengthInv ); auto lengthInv = 1.0f / auxLine.length( );
if( auxLine.dy( ) >= 0 )
{
angle = M_PI_x2 - angle;
}
QPointF arrowInit = auxLine.pointAt( double angle = ::acos( auxLine.dx( ) * lengthInv );
1.0f - ( arrowLength * lengthInv )); if( auxLine.dy( ) >= 0 )
QPointF arrowP1 = arrowInit - {
QPointF( sin( angle + M_PI_3 ) * arrowWidth, angle = M_PI_x2 - angle;
cos( angle + M_PI_3 ) * arrowWidth ); }
QPointF arrowP2 = arrowInit -
QPointF( sin( angle + M_PI_067 ) * arrowWidth,
cos( angle + M_PI_067 ) * arrowWidth );
QPointF arrowI1 = _arrowOrigin -
QPointF( sin( angle + M_PI_Float ) * arrowWidth,
cos( angle + M_PI_Float ) * arrowWidth );
QPointF arrowI2 = _arrowOrigin +
QPointF( sin( angle - M_PI_Float ) * arrowWidth,
cos( angle - M_PI_Float ) * arrowWidth );
float size = arrowLength;
/*
if ( _arrowOriItem != nullptr ) delete _arrowOriItem;
_arrowOriItem = new QGraphicsEllipseItem( );
_arrowOriItem->setRect( origin.x( ) - size * 0.5f,
origin.y( ) - size * 0.5f,
size,
size );
_arrowOriItem->setPen( Qt::NoPen );
_arrowOriItem->setBrush( QBrush( brushColor ));
_arrowOriItem->setPen( QPen( QBrush( color ), _arrowThickness ));
_arrowOriItem->setParentItem( this );
*/
arrowShape.clear( );
if( this->_parentRep->getProperty( "head" ).
value< shiftgen::ConnectionArrowRep::TArrowHead >( ) ==
shiftgen::ConnectionArrowRep::TArrowHead::CIRCLE )
{
_arrowCircleEnd = new QGraphicsEllipseItem( );
_arrowCircleEnd->setRect( dest.x( ) - size * 0.5f,
dest.y( ) - size * 0.5f, size, size );
_arrowCircleEnd->setPen( _actualPen ); QPointF arrowInit = auxLine.pointAt(
_arrowCircleEnd->setParentItem( this ); 1.0f - ( arrowLength * lengthInv ));
QPointF arrowP1 = arrowInit -
QPointF( sin( angle + M_PI_3 ) * arrowWidth,
cos( angle + M_PI_3 ) * arrowWidth );
QPointF arrowP2 = arrowInit -
QPointF( sin( angle + M_PI_067 ) * arrowWidth,
cos( angle + M_PI_067 ) * arrowWidth );
QPointF arrowI1 = _arrowOrigin -
QPointF( sin( angle + M_PI_Float ) * arrowWidth,
cos( angle + M_PI_Float ) * arrowWidth );
QPointF arrowI2 = _arrowOrigin +
QPointF( sin( angle - M_PI_Float ) * arrowWidth,
cos( angle - M_PI_Float ) * arrowWidth );
float size = arrowLength;
/*
if ( _arrowOriItem != nullptr ) delete _arrowOriItem;
_arrowOriItem = new QGraphicsEllipseItem( );
_arrowOriItem->setRect( origin.x( ) - size * 0.5f,
origin.y( ) - size * 0.5f,
size,
size );
_arrowOriItem->setPen( Qt::NoPen );
_arrowOriItem->setBrush( QBrush( brushColor ));
_arrowOriItem->setPen( QPen( QBrush( color ), _arrowThickness ));
_arrowOriItem->setParentItem( this );
*/
arrowShape.clear( );
if( this->_parentRep->getProperty( "head" ).
value< shiftgen::ConnectionArrowRep::TArrowHead >( ) ==
shiftgen::ConnectionArrowRep::TArrowHead::CIRCLE )
{
_arrowCircleEnd = new QGraphicsEllipseItem( );
_arrowCircleEnd->setRect( dest.x( ) - size * 0.5f,
dest.y( ) - size * 0.5f, size, size );
_arrowCircleEnd->setPen( _actualPen );
_arrowCircleEnd->setParentItem( this );
arrowShape << arrowI1
<< arrowI2
<< auxLine.p1( )
<< auxLine.p2( )
<< auxLine.p1( );
}
else
{
arrowShape << arrowI1
<< arrowI2
<< auxLine.p1( )
<< arrowInit
<< arrowP1
<< auxLine.p2( )
<< arrowP2
<< arrowInit
<< auxLine.p1( );
}
arrowShape << arrowI1 painterPath.moveTo( _arrowDest );
<< arrowI2 painterPath.addPolygon( arrowShape );
<< auxLine.p1( ) _actualPen.setColor( color );
<< auxLine.p2( ) _actualPen.setCosmetic( true );
<< auxLine.p1( ); this->setPen( _actualPen );
} this->setBrush( color );
else this->setZValue( -100.0f );
{
arrowShape << arrowI1
<< arrowI2
<< auxLine.p1( )
<< arrowInit
<< arrowP1
<< auxLine.p2( )
<< arrowP2
<< arrowInit
<< auxLine.p1( );
} }
auto painterPath = QPainterPath( );
painterPath.moveTo( _arrowDest );
painterPath.addPolygon( arrowShape );
_actualPen.setColor( color );
_actualPen.setCosmetic( true );
this->setPen( _actualPen );
this->setBrush( color );
this->setPath( painterPath ); this->setPath( painterPath );
this->setZValue( -100.0f );
} }
QPropertyAnimation& ConnectionArrowItem::lineAnim( void ) QPropertyAnimation& ConnectionArrowItem::lineAnim( void )
......
...@@ -55,67 +55,64 @@ namespace nslib ...@@ -55,67 +55,64 @@ namespace nslib
} }
void ConnectionArrowItem::createArrow( const QPointF& origin, void ConnectionArrowItem::createArrow( const QPointF& origin,
const QPointF& dest ) const QPointF& dest )
{ {
float itemInvScale =
1.0f / static_cast< float >( this->scale( ));
_arrowOrigin = itemInvScale * origin;
_arrowDest = itemInvScale * dest;
QPolygonF arrowShape; QPolygonF arrowShape;
float arrowWidth = 3 * itemInvScale * nslib::Config::scale( );
float arrowLength = arrowWidth;
QLineF auxLine( _arrowOrigin, _arrowDest );
auto lengthInv = 1.0f / auxLine.length( );
double angle = ::acos( auxLine.dx( ) * lengthInv );
if ( auxLine.dy( ) >= 0 )
angle = ( M_PI * 2.0 ) - angle;
QPointF arrowInit = auxLine.pointAt(
1.0f - (arrowLength * lengthInv ));
QPointF arrowP1 = arrowInit -
QPointF( sin( angle + M_PI_3 ) * arrowWidth,
cos( angle + M_PI_3 ) * arrowWidth );
QPointF arrowP2 = arrowInit -
QPointF( sin(angle + M_PI - M_PI_3 ) * arrowWidth,
cos( angle + M_PI - M_PI_3 ) * arrowWidth );
float size = arrowLength;
if ( _arrowOriItem != nullptr ) delete _arrowOriItem;
_arrowOriItem = new QGraphicsEllipseItem( );
_arrowOriItem->setRect( origin.x( ) - size * 0.5f,
origin.y( ) - size * 0.5f,
size,
size );
_arrowOriItem->setPen( Qt::NoPen );
_arrowOriItem->setBrush( QBrush( color ));
_arrowOriItem->setPen( QPen( QBrush( color ), _arrowThickness ));
_arrowOriItem->setParentItem( this );
arrowShape.clear( ); arrowShape.clear( );
if ( origin != dest )
arrowShape << auxLine.p1( ) {
<< arrowInit float itemInvScale =
<< arrowP1 1.0f / static_cast< float >( this->scale( ));
<< auxLine.p2( )
<< arrowP2 _arrowOrigin = itemInvScale * origin;
<< arrowInit; _arrowDest = itemInvScale * dest;
this->setBrush( QBrush( color )); float arrowWidth = 3 * itemInvScale * nslib::Config::scale( );
// this->setPen( QPen( color )); float arrowLength = arrowWidth;
this->setPen( QPen( QBrush( color ), _arrowThickness ));
QLineF auxLine( _arrowOrigin, _arrowDest );
auto lengthInv = 1.0f / auxLine.length( );
double angle = ::acos( auxLine.dx( ) * lengthInv );
if ( auxLine.dy( ) >= 0 )
angle = ( M_PI * 2.0 ) - angle;
QPointF arrowInit = auxLine.pointAt(
1.0f - (arrowLength * lengthInv ));
QPointF arrowP1 = arrowInit -
QPointF( sin( angle + M_PI_3 ) * arrowWidth,
cos( angle + M_PI_3 ) * arrowWidth );
QPointF arrowP2 = arrowInit -
QPointF( sin(angle + M_PI - M_PI_3 ) * arrowWidth,
cos( angle + M_PI - M_PI_3 ) * arrowWidth );
float size = arrowLength;
if ( _arrowOriItem != nullptr ) delete _arrowOriItem;
_arrowOriItem = new QGraphicsEllipseItem( );
_arrowOriItem->setRect( origin.x( ) - size * 0.5f,
origin.y( ) - size * 0.5f, size, size );
_arrowOriItem->setPen( Qt::NoPen );
_arrowOriItem->setBrush( QBrush( color ));
_arrowOriItem->setPen( QPen( QBrush( color ), _arrowThickness ));
_arrowOriItem->setParentItem( this );
arrowShape << auxLine.p1( )
<< arrowInit
<< arrowP1
<< auxLine.p2( )
<< arrowP2
<< arrowInit;
this->setBrush( QBrush( color ));
// this->setPen( QPen( color ));
this->setPen( QPen( QBrush( color ), _arrowThickness ));
this->setZValue( -100.0f );
}
this->setPolygon( arrowShape ); this->setPolygon( arrowShape );
this->setZValue( -100.0f );
} }
} }
} }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment