diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp index a405c1ca4c1ba1a24b750abb77bbc3b08659f45d..91d121a80f0db80e238bb9b0ac300fc7d2c1f69d 100644 --- a/GUI/coregui/Models/DomainObjectBuilder.cpp +++ b/GUI/coregui/Models/DomainObjectBuilder.cpp @@ -134,19 +134,15 @@ DomainObjectBuilder::buildInstrument(const InstrumentItem& instrumentItem) std::unique_ptr<IUnitConverter> DomainObjectBuilder::createUnitConverter(const InstrumentItem* instrumentItem) { + if (auto specular_instrument = dynamic_cast<const SpecularInstrumentItem*>(instrumentItem)) + return specular_instrument->createUnitConverter(); + const auto instrument = instrumentItem->createInstrument(); instrument->initDetector(); if (instrumentItem->modelType() == Constants::GISASInstrumentType) return UnitConverterUtils::createConverterForGISAS(*instrument); - if (auto specular_instrument = dynamic_cast<const SpecularInstrumentItem*>(instrumentItem)) - { - auto axis_item = specular_instrument->beamItem()->currentInclinationAxisItem(); - return std::make_unique<UnitConverter1D>(instrument->getBeam(), - *axis_item->createAxis(Units::degree)); - } - if (instrumentItem->modelType() == Constants::OffSpecInstrumentType) { auto axis_item = dynamic_cast<BasicAxisItem*>( instrumentItem->getItem(OffSpecInstrumentItem::P_ALPHA_AXIS)); diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp index 7cadb7d0959b275a1e0f5867224292a2f7d98855..cc42ecd02913c5b9745890b01827838dcb9f3bfb 100644 --- a/GUI/coregui/Models/InstrumentItems.cpp +++ b/GUI/coregui/Models/InstrumentItems.cpp @@ -22,6 +22,7 @@ #include "IDetector2D.h" #include "Instrument.h" #include "ItemFileNameUtils.h" +#include "UnitConverter1D.h" #include "MaskItems.h" #include "SessionModel.h" @@ -126,6 +127,14 @@ void SpecularInstrumentItem::setShape(const std::vector<int>& data_shape) axis_item->setItemValue(BasicAxisItem::P_NBINS, data_shape[0]); } +std::unique_ptr<IUnitConverter> SpecularInstrumentItem::createUnitConverter() const +{ + const auto instrument = createInstrument(); + auto axis_item = beamItem()->currentInclinationAxisItem(); + return std::make_unique<UnitConverter1D>(instrument->getBeam(), + *axis_item->createAxis(1.0), AxesUnits::DEGREES); +} + const QString Instrument2DItem::P_DETECTOR = "Detector"; Instrument2DItem::Instrument2DItem(const QString& modelType) diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h index fa177c4ab51d6ab4cccd5a5ebaab9b71275489e0..600328cf20b3697ca003ab35d352d4184d06d56f 100644 --- a/GUI/coregui/Models/InstrumentItems.h +++ b/GUI/coregui/Models/InstrumentItems.h @@ -22,6 +22,7 @@ class DataItem; class DetectorItem; class GroupItem; class Instrument; +class IUnitConverter; class MaskContainerItem; class BA_CORE_API_ InstrumentItem : public SessionItem @@ -60,6 +61,8 @@ public: std::unique_ptr<Instrument> createInstrument() const override; std::vector<int> shape() const override; void setShape(const std::vector<int>& shape) override; + + std::unique_ptr<IUnitConverter> createUnitConverter() const; }; class BA_CORE_API_ Instrument2DItem : public InstrumentItem