@ -629,9 +629,9 @@ bool UBGraphicsScene::inputDeviceRelease()
if ( mCurrentStroke & & mCurrentStroke - > polygons ( ) . empty ( ) ) {
delete mCurrentStroke ;
mCurrentStroke = NULL ;
}
mCurrentStroke = NULL ;
return accepted ;
}
@ -794,7 +794,7 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
{
# pragma omp critical
{
// Compel e remove item
// Compet e remove item
intersectedItems < < pi ;
intersectedPolygons < < QList < QPolygonF > ( ) ;
}
@ -813,30 +813,29 @@ void UBGraphicsScene::eraseLineTo(const QPointF &pEndPoint, const qreal &pWidth)
for ( int i = 0 ; i < intersectedItems . size ( ) ; i + + )
{
if ( intersectedPolygons [ i ] . empty ( ) )
{
removeItem ( intersectedItems [ i ] ) ;
}
else
{
UBGraphicsPolygonItem * pi = intersectedItems [ i ] ;
// item who intersects with eraser
UBGraphicsPolygonItem * intersectedPolygonItem = intersectedItems [ i ] ;
if ( ! intersectedPolygons [ i ] . empty ( ) )
{
// intersected polygons generated as QList<QPolygon> QPainterPath::toFillPolygons(),
// so each intersectedPolygonItem has one or couple of QPolygons who should be removed from it.
for ( int j = 0 ; j < intersectedPolygons [ i ] . size ( ) ; j + + )
{
QPolygonF p = intersectedPolygons [ i ] [ j ] ;
if ( j = = 0 )
pi - > setPolygon ( intersectedPolygons [ i ] [ j ] ) ;
else
{
UBGraphicsPolygonItem * polygonItem = new UBGraphicsPolygonItem ( intersectedPolygons [ i ] [ j ] , pi - > parentItem ( ) ) ;
pi - > copyItemParameters ( polygonItem ) ;
polygonItem - > setStroke ( pi - > stroke ( ) ) ;
polygonItem - > setStrokesGroup ( pi - > strokesGroup ( ) ) ;
pi - > strokesGroup ( ) - > addToGroup ( polygonItem ) ;
}
// create small polygon from couple of polygons to replace particular erased polygon
UBGraphicsPolygonItem * polygonItem = new UBGraphicsPolygonItem ( intersectedPolygons [ i ] [ j ] , intersectedPolygonItem - > parentItem ( ) ) ;
intersectedPolygonItem - > copyItemParameters ( polygonItem ) ;
polygonItem - > setStroke ( intersectedPolygonItem - > stroke ( ) ) ;
polygonItem - > setStrokesGroup ( intersectedPolygonItem - > strokesGroup ( ) ) ;
intersectedPolygonItem - > strokesGroup ( ) - > addToGroup ( polygonItem ) ;
mAddedItems < < polygonItem ;
}
}
//remove full polygon item for replace it by couple of polygons who creates the same stroke without a part which intersects with eraser
mRemovedItems < < intersectedPolygonItem ;
removeItem ( intersectedPolygonItem ) ;
}
if ( ! intersectedItems . empty ( ) )