diff --git a/GUI/Model/Data/MaskItems.cpp b/GUI/Model/Data/MaskItems.cpp index decbb48187cd6bbde81150563bd717285924cfe4..0842ba6f32ed427569f94631be09920dfe08db68 100644 --- a/GUI/Model/Data/MaskItems.cpp +++ b/GUI/Model/Data/MaskItems.cpp @@ -58,6 +58,16 @@ void MaskContainerItem::clear() model()->removeRows(0, numberOfChildren(), index()); } +QString MaskItem::maskName() const +{ + return itemName(); +} + +void MaskItem::setMaskName(const QString& name) +{ + setItemName(name); +} + /* ------------------------------------------------------------------------- */ bool MaskItem::maskValue() const @@ -237,6 +247,20 @@ void PolygonItem::setIsClosed(bool closed) setItemValue(P_ISCLOSED, closed); } + +QVector<PolygonPointItem*> PolygonItem::points() const +{ + return childrenOfType<PolygonPointItem>(); +} + +void PolygonItem::addPoint(double x, double y) +{ + auto* pointItem = new PolygonPointItem(); + pointItem->setPosX(x); + pointItem->setPosY(y); + insertItem(-1, pointItem); +} + /* ------------------------------------------------------------------------- */ VerticalLineItem::VerticalLineItem() : MaskItem(M_TYPE) diff --git a/GUI/Model/Data/MaskItems.h b/GUI/Model/Data/MaskItems.h index 54a2adf7513f5a2c914b61197d18463562954aac..158aaa782374f3b438a41953f12ead016c47b9f1 100644 --- a/GUI/Model/Data/MaskItems.h +++ b/GUI/Model/Data/MaskItems.h @@ -30,6 +30,9 @@ private: public: virtual std::unique_ptr<IShape2D> createShape(double scale) const = 0; + QString maskName() const; + void setMaskName(const QString& name); + bool maskValue() const; void setMaskValue(bool mask_value); static bool isMaskValuePropertyName(const QString& name); @@ -105,6 +108,9 @@ public: bool isClosed() const; void setIsClosed(bool closed); + + QVector<PolygonPointItem*> points() const; + void addPoint(double x, double y); }; class VerticalLineItem : public MaskItem { diff --git a/GUI/Model/From/FromDomain.cpp b/GUI/Model/From/FromDomain.cpp index 18d532778f6496b431bb505f0e7f555ed231c2ca..f05d89afff2ec29551693784fc36da590e529df2 100644 --- a/GUI/Model/From/FromDomain.cpp +++ b/GUI/Model/From/FromDomain.cpp @@ -658,12 +658,8 @@ void GUI::Transform::FromDomain::setMaskContainer(MaskContainerItem* container_i auto* polygonItem = new PolygonItem(); std::vector<double> xpos, ypos; polygon->getPoints(xpos, ypos); - for (size_t i_point = 0; i_point < xpos.size(); ++i_point) { - auto* pointItem = new PolygonPointItem(); - pointItem->setPosX(scale * xpos[i_point]); - pointItem->setPosY(scale * ypos[i_point]); - polygonItem->insertItem(-1, pointItem); - } + for (size_t i_point = 0; i_point < xpos.size(); ++i_point) + polygonItem->addPoint(scale * xpos[i_point], scale * ypos[i_point]); polygonItem->setMaskValue(mask_value); polygonItem->setIsClosed(true); diff --git a/GUI/Model/Instrument/DetectorItems.cpp b/GUI/Model/Instrument/DetectorItems.cpp index 240af9477bd98439106675912a9c2c1c72f9ebff..e41ba3a6ddd568339e85d2f6295daee67e58b5e0 100644 --- a/GUI/Model/Instrument/DetectorItems.cpp +++ b/GUI/Model/Instrument/DetectorItems.cpp @@ -125,27 +125,21 @@ std::unique_ptr<IResolutionFunction2D> DetectorItem::createResolutionFunction() void DetectorItem::addMasksToDomain(IDetector2D* detector) const { auto* maskContainer = maskContainerItem(); - if (!maskContainer) return; const double scale = axesToDomainUnitsFactor(); - const auto maskItems = maskContainer->maskItems(); - for (auto m = maskItems.rbegin(); m != maskItems.rend(); m++) { - MaskItem* maskItem = *m; - - if (maskItem->modelType() == RegionOfInterestItem::M_TYPE) { - auto* rectItem = dynamic_cast<RectangleItem*>(maskItem); - double xlow = scale * rectItem->xLow(); - double ylow = scale * rectItem->yLow(); - double xup = scale * rectItem->xUp(); - double yup = scale * rectItem->yUp(); + for (auto maskIter = maskItems.rbegin(); maskIter != maskItems.rend(); maskIter++) { + if (auto* roiItem = dynamic_cast<RegionOfInterestItem*>(*maskIter)) { + const double xlow = scale * roiItem->xLow(); + const double ylow = scale * roiItem->yLow(); + const double xup = scale * roiItem->xUp(); + const double yup = scale * roiItem->yUp(); detector->setRegionOfInterest(xlow, ylow, xup, yup); } else { - std::unique_ptr<IShape2D> shape(maskItem->createShape(scale)); - bool mask_value = maskItem->maskValue(); - detector->addMask(*shape, mask_value); + std::unique_ptr<IShape2D> shape((*maskIter)->createShape(scale)); + detector->addMask(*shape, (*maskIter)->maskValue()); } } } diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.cpp b/GUI/View/Mask/MaskEditorPropertyPanel.cpp index a7cb3812fbde67031793b418dc2dc61efa059bf6..d68bc81989caf39da51204116e603f19d5bf152d 100644 --- a/GUI/View/Mask/MaskEditorPropertyPanel.cpp +++ b/GUI/View/Mask/MaskEditorPropertyPanel.cpp @@ -198,8 +198,8 @@ void MaskEditorPropertyPanel::createMaskEditorUI() // -- name (only if not RoI) if (!dynamic_cast<RegionOfInterestItem*>(maskItem)) { - auto* edit = new QLineEdit(maskItem->itemName(), m_maskPropertiesLayout->parentWidget()); - connect(edit, &QLineEdit::textEdited, [=](const QString& t) { maskItem->setItemName(t); }); + auto* edit = new QLineEdit(maskItem->maskName(), m_maskPropertiesLayout->parentWidget()); + connect(edit, &QLineEdit::textEdited, [=](const QString& t) { maskItem->setMaskName(t); }); m_maskPropertiesLayout->addRow("Name:", edit); } diff --git a/GUI/View/Mask/MaskResultsPresenter.cpp b/GUI/View/Mask/MaskResultsPresenter.cpp index 95443f3d3eea0771f673a938487fecf25ff0749b..85f8fb0aad9284b09ac8c44566f5576e3cbb9880 100644 --- a/GUI/View/Mask/MaskResultsPresenter.cpp +++ b/GUI/View/Mask/MaskResultsPresenter.cpp @@ -91,12 +91,11 @@ OutputData<double>* MaskResultsPresenter::createMaskPresentation() const for (int i_row = m_maskModel->rowCount(m_maskContainerIndex); i_row > 0; --i_row) { QModelIndex itemIndex = m_maskModel->index(i_row - 1, 0, m_maskContainerIndex); if (auto* maskItem = dynamic_cast<MaskItem*>(m_maskModel->itemForIndex(itemIndex))) { - if (maskItem->modelType() == RegionOfInterestItem::M_TYPE) { - roi = maskItem->createShape(scale); - } else { + if (auto* roiItem = dynamic_cast<RegionOfInterestItem*>(maskItem)) + roi = roiItem->createShape(scale); + else { std::unique_ptr<IShape2D> shape(maskItem->createShape(scale)); - bool mask_value = maskItem->maskValue(); - detectorMask.addMask(*shape, mask_value); + detectorMask.addMask(*shape, maskItem->maskValue()); } } } diff --git a/GUI/View/Mask/PolygonView.cpp b/GUI/View/Mask/PolygonView.cpp index 8edab36cbefed66f924ed026dbebc4b8becd9a9b..4d7e5a25630e7e7eada8f2b2981775d3fa032034 100644 --- a/GUI/View/Mask/PolygonView.cpp +++ b/GUI/View/Mask/PolygonView.cpp @@ -151,16 +151,14 @@ void PolygonView::update_polygon() m_block_on_point_update = true; - if (m_item->numberOfChildren()) { + if (!m_item->points().isEmpty()) { m_polygon.clear(); - for (PolygonPointItem* item : m_item->childrenOfType<PolygonPointItem>()) { - qreal px = toSceneX(item->posX()); - qreal py = toSceneY(item->posY()); - m_polygon << QPointF(px, py); - } - QRectF scene_rect = m_polygon.boundingRect().marginsAdded( + for (auto* point : m_item->points()) + m_polygon << QPointF(toSceneX(point->posX()), toSceneY(point->posY())); + + const QRectF scene_rect = m_polygon.boundingRect().marginsAdded( QMarginsF(bbox_margins, bbox_margins, bbox_margins, bbox_margins)); m_bounding_rect = QRectF(0.0, 0.0, scene_rect.width(), scene_rect.height()); @@ -170,10 +168,6 @@ void PolygonView::update_polygon() m_polygon = mapFromScene(m_polygon); - // for (int i = 0; i < childItems().size(); ++i) { - // QGraphicsItem* childView = childItems()[i]; - // childView->setPos(m_polygon[i]); - // } int index(0); for (auto* childView : childItems()) childView->setPos(m_polygon[index++]);