diff --git a/src/domain/UBGraphicsPolygonItem.cpp b/src/domain/UBGraphicsPolygonItem.cpp index 1facc3c8..37f602fc 100644 --- a/src/domain/UBGraphicsPolygonItem.cpp +++ b/src/domain/UBGraphicsPolygonItem.cpp @@ -185,6 +185,7 @@ void UBGraphicsPolygonItem::copyItemParameters(UBItem *copy) const UBGraphicsPolygonItem *cp = dynamic_cast(copy); if (cp) { + cp->setPolygon(polygon()); cp->mOriginalLine = this->mOriginalLine; cp->mOriginalWidth = this->mOriginalWidth; cp->mIsNominalLine = this->mIsNominalLine; @@ -198,7 +199,6 @@ void UBGraphicsPolygonItem::copyItemParameters(UBItem *copy) const cp->setColorOnLightBackground(this->colorOnLightBackground()); cp->setData(UBGraphicsItemData::ItemLayerType, this->data(UBGraphicsItemData::ItemLayerType)); - cp->setPolygon(polygon()); } } diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index f7205a6e..b5be1ad4 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -1104,6 +1104,8 @@ UBGraphicsScene* UBGraphicsScene::sceneDeepCopy() const QMap groupClone; + QList groupAlreadyCloned; + while (itItems.hasNext()) { QGraphicsItem* item = itItems.next(); @@ -1111,10 +1113,18 @@ UBGraphicsScene* UBGraphicsScene::sceneDeepCopy() const UBItem* ubItem = dynamic_cast(item); UBGraphicsStroke* stroke = dynamic_cast(item); + UBGraphicsGroupContainerItem* group = dynamic_cast(item); + if (ubItem && !stroke) { - cloneItem = dynamic_cast(ubItem->deepCopy()); + //horrible hack + if(group && !groupAlreadyCloned.contains(group->uuid())){ + cloneItem = dynamic_cast(ubItem->deepCopy()); + groupAlreadyCloned.append(group->uuid()); + } + if(!group) + cloneItem = dynamic_cast(ubItem->deepCopy()); } if (cloneItem) diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index 055d5f6b..9cae2e20 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -26,6 +26,7 @@ #include "UBGraphicsStrokesGroup.h" +#include "UBGraphicsStroke.h" #include "domain/UBGraphicsPolygonItem.h" @@ -140,12 +141,15 @@ void UBGraphicsStrokesGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) UBItem* UBGraphicsStrokesGroup::deepCopy() const { UBGraphicsStrokesGroup* copy = new UBGraphicsStrokesGroup(); + copyItemParameters(copy); QTransform groupTransform = transform(); const_cast(this)->resetTransform(); QList chl = childItems(); + UBGraphicsStroke* newStroke = new UBGraphicsStroke; + foreach(QGraphicsItem *child, chl) { UBGraphicsPolygonItem *polygon = dynamic_cast(child); @@ -155,14 +159,14 @@ UBItem* UBGraphicsStrokesGroup::deepCopy() const if (polygonCopy) { QGraphicsItem* pItem = dynamic_cast(polygonCopy); + polygonCopy->setTransform(groupTransform); copy->addToGroup(pItem); polygonCopy->setStrokesGroup(copy); + polygonCopy->setStroke(newStroke); } } - } const_cast(this)->setTransform(groupTransform); - copyItemParameters(copy); return copy; }