@ -1047,13 +1047,15 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
typedef QList < QPolygonF > POLYGONSLIST ;
typedef QList < QPolygonF > POLYGONSLIST ;
QList < POLYGONSLIST > intersectedPolygons ;
QList < POLYGONSLIST > intersectedPolygons ;
QList < UBGraphicsLineItem * > intersectedLineItems ;
# pragma omp parallel for
# pragma omp parallel for
for ( int i = 0 ; i < collidItems . size ( ) ; i + + )
for ( int i = 0 ; i < collidItems . size ( ) ; i + + )
{
{
UBGraphicsPolygonItem * pi = qgraphicsitem_cast < UBGraphicsPolygonItem * > ( collidItems [ i ] ) ;
UBGraphicsPolygonItem * pi = qgraphicsitem_cast < UBGraphicsPolygonItem * > ( collidItems [ i ] ) ;
if ( pi = = NULL )
UBGraphicsLineItem * li = qgraphicsitem_cast < UBGraphicsLineItem * > ( collidItems [ i ] ) ;
continue ;
if ( pi ! = NULL )
{
QPainterPath itemPainterPath ;
QPainterPath itemPainterPath ;
itemPainterPath . addPolygon ( pi - > sceneTransform ( ) . map ( pi - > polygon ( ) ) ) ;
itemPainterPath . addPolygon ( pi - > sceneTransform ( ) . map ( pi - > polygon ( ) ) ) ;
@ -1076,6 +1078,23 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
intersectedPolygons < < newPath . simplified ( ) . toFillPolygons ( pi - > sceneTransform ( ) . inverted ( ) ) ;
intersectedPolygons < < newPath . simplified ( ) . toFillPolygons ( pi - > sceneTransform ( ) . inverted ( ) ) ;
}
}
}
}
} else if ( li ! = NULL )
{
QPainterPath itemPainterPath ;
QList < QPointF > linePoints = li - > linePoints ( ) ;
for ( int i = 0 ; i < linePoints . count ( ) ; + + i )
{
itemPainterPath . addEllipse ( linePoints [ i ] , 1 , 1 ) ;
}
if ( eraserPath . contains ( itemPainterPath ) | | eraserPath . intersects ( itemPainterPath ) )
{
# pragma omp critical
{
// Compete remove item
intersectedLineItems < < li ;
}
}
}
}
}
for ( int i = 0 ; i < intersectedItems . size ( ) ; i + + )
for ( int i = 0 ; i < intersectedItems . size ( ) ; i + + )
@ -1123,7 +1142,21 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
intersectedPolygonItem - > setTransform ( t ) ;
intersectedPolygonItem - > setTransform ( t ) ;
}
}
if ( ! intersectedItems . empty ( ) )
for ( int i = 0 ; i < intersectedLineItems . size ( ) ; i + + )
{
UBGraphicsLineItem * intersectedLineItem = intersectedLineItems [ i ] ;
mRemovedItems < < intersectedLineItem ;
QTransform t ;
bool bApplyTransform = false ;
removeItem ( intersectedLineItem ) ;
if ( bApplyTransform )
{
intersectedLineItem - > setTransform ( t ) ;
}
}
if ( ! intersectedItems . empty ( ) | | ! intersectedLineItems . empty ( ) )
setModified ( true ) ;
setModified ( true ) ;
}
}
@ -1552,7 +1585,7 @@ void UBGraphicsScene::clearContent(clearCase pCase)
? qgraphicsitem_cast < UBGraphicsGroupContainerItem * > ( item - > parentItem ( ) )
? qgraphicsitem_cast < UBGraphicsGroupContainerItem * > ( item - > parentItem ( ) )
: 0 ;
: 0 ;
UBGraphicsItemDelegate * curDelegate = UBGraphicsItem : : Delegate ( item ) ;
UBGraphicsItemDelegate * curDelegate = UBGraphicsItem : : Delegate ( item ) ;
if ( ! curDelegate ) {
if ( ! curDelegate & & item - > type ( ) ! = UBGraphicsLineItem : : Type ) {
continue ;
continue ;
}
}
@ -1560,6 +1593,12 @@ void UBGraphicsScene::clearContent(clearCase pCase)
bool isStrokesGroup = item - > type ( ) = = UBGraphicsStrokesGroup : : Type ;
bool isStrokesGroup = item - > type ( ) = = UBGraphicsStrokesGroup : : Type ;
bool shouldDelete = false ;
bool shouldDelete = false ;
if ( item - > type ( ) = = UBGraphicsLineItem : : Type )
{
removedItems < < item ;
this - > removeItem ( item ) ;
} else
{
switch ( static_cast < int > ( pCase ) ) {
switch ( static_cast < int > ( pCase ) ) {
case clearAnnotations :
case clearAnnotations :
shouldDelete = isStrokesGroup ;
shouldDelete = isStrokesGroup ;
@ -1571,6 +1610,7 @@ void UBGraphicsScene::clearContent(clearCase pCase)
shouldDelete = ! isGroup & & ! isBackgroundObject ( item ) ;
shouldDelete = ! isGroup & & ! isBackgroundObject ( item ) ;
break ;
break ;
}
}
}
if ( shouldDelete ) {
if ( shouldDelete ) {
if ( itemGroup ) {
if ( itemGroup ) {