#ifndef DM_ITEMGROUPGUI_H #define DM_ITEMGROUPGUI_H #include "graphicsviewinterface.h" #include "ct_itemdrawable/ct_standarditemgroup.h" #include "ct_itemdrawable/abstract/ct_abstractattributes.h" #include "ct_itemdrawable/ct_pointsattributescolor.h" #include "ct_itemdrawable/ct_pointsattributesnormal.h" #include "ct_itemdrawable/ct_edgeattributescolor.h" #include "ct_itemdrawable/ct_edgeattributesnormal.h" #include "ct_itemdrawable/ct_faceattributescolor.h" #include "ct_itemdrawable/ct_faceattributesnormal.h" #include "ct_itemdrawable/ct_scene.h" #include "ct_colorcloud/registered/ct_standardcolorcloudregistered.h" #include "ct_normalcloud/registered/ct_standardnormalcloudregistered.h" #include "ct_model/outModel/ct_outstdgroupmodel.h" #include "ct_model/outModel/ct_outstdsingularitemmodel.h" #include "dm_fakeattributemanagert.h" /** * @brief When you add an item it will check if * the type already exist in it and if not he will use a copy of the model of the item * and add it to the model of the root group. */ class DM_ItemGroupGui : public CT_StandardItemGroup { Q_OBJECT using SuperClass = CT_StandardItemGroup; CT_TYPE_IMPL_MACRO(DM_ItemGroupGui, CT_StandardItemGroup, Group GUI) public: using ModelType = CT_OutStdGroupModel; DM_ItemGroupGui(); DM_ItemGroupGui(const DM_ItemGroupGui& other); ~DM_ItemGroupGui() override; void addItemDrawable(CT_AbstractItemDrawable &item); void removeItemDrawable(CT_AbstractItemDrawable &item); void setAttributes(const QList& attributes); void setGraphicsView(const GraphicsViewInterface* gv); void finalizeBeforeUseIt(); IChildrensIteratorQtStylePtr createQtStyleIteratorForChildrensThatUseOutModel(const CT_OutAbstractModel* outModel) const override; CT_AbstractItemDrawable* copy(const CT_OutAbstractItemModel* model, const CT_AbstractResult* result) const override; private: using ItemsQtIterator = CollectionQtIterator>; using PointsColorModel = CT_OutStdSingularItemModel; using PointsNormalModel = CT_OutStdSingularItemModel; using EdgesColorModel = CT_OutStdSingularItemModel; using EdgesNormalModel = CT_OutStdSingularItemModel; using FacesColorModel = CT_OutStdSingularItemModel; using FacesNormalModel = CT_OutStdSingularItemModel; using SelectedPointsModel = CT_OutStdSingularItemModel; template using DM_ColorAttributeManager = DM_FakeAttributeManagerT; template using DM_NormalAttributeManager = DM_FakeAttributeManagerT; QHash*> mListForType; QString mCacheType; QList* mCacheList; QHash*> mAttributesListForType; QList mAttributesModels; const GraphicsViewInterface* mGraphicsView; PointsColorModel* mPointsColorModel; PointsNormalModel* mPointsNormalModel; EdgesColorModel* mEdgesColorModel; EdgesNormalModel* mEdgesNormalModel; FacesColorModel* mFacesColorModel; FacesNormalModel* mFacesNormalModel; SelectedPointsModel* mSelectedPointsModel; CT_NMPCIR mPointsCloudIndex; CT_PointsAttributesColor* mPointAttributesColor; DM_ColorAttributeManager mPointsColorAttributeManager; CT_PointsAttributesNormal* mPointAttributesNormal; DM_NormalAttributeManager mPointsNormalAttributeManager; CT_NMECIR mEdgesCloudIndex; CT_EdgeAttributesColor* mEdgeAttributesColor; DM_ColorAttributeManager mEdgesColorAttributeManager; CT_EdgeAttributesNormal* mEdgeAttributesNormal; DM_NormalAttributeManager mEdgesNormalAttributeManager; CT_NMFCIR mFacesCloudIndex; CT_FaceAttributesColor* mFaceAttributesColor; DM_ColorAttributeManager mFacesColorAttributeManager; CT_FaceAttributesNormal* mFaceAttributesNormal; DM_NormalAttributeManager mFacesNormalAttributeManager; CT_Scene* mSelectedPointsScene; template IChildrensIteratorQtStylePtr createIteratorForColorAttribute(AttributeType*& attribute, CloudIndexType cloudIndex, ManagerT& manager, GraphicsViewInterface::ColorCloudType cloudType) const { if(attribute == nullptr) { manager.setAttributesCloud(mGraphicsView->colorCloudOf(cloudType)->abstractColorCloud()); attribute = new AttributeType(cloudIndex, manager); } return new ItemQtIterator(attribute); } template IChildrensIteratorQtStylePtr createIteratorForNormalAttribute(AttributeType*& attribute, CloudIndexType cloudIndex, ManagerT& manager, GraphicsViewInterface::NormalCloudType cloudType) const { if(attribute == nullptr) { manager.setAttributesCloud(mGraphicsView->normalCloudOf(cloudType)->abstractNormalCloud()); attribute = new AttributeType(cloudIndex, manager); } return new ItemQtIterator(attribute); } }; #endif // DM_ITEMGROUPGUI_H