GraphicObject* GraphicUndoUtilities::getObject(const string& viewId, const string& layerId, const string& objectId) { if ((layerId.empty() == true) || (objectId.empty() == true)) { return NULL; } // Get the layer from the session manager Service<SessionManager> pManager; GraphicLayerImp* pLayer = dynamic_cast<GraphicLayerImp*>(pManager->getSessionItem(layerId)); if (pLayer == NULL) { // The layer could be a layer in a product ProductView* pView = dynamic_cast<ProductView*>(pManager->getSessionItem(viewId)); if (pView != NULL) { GraphicLayerImp* pLayoutLayer = dynamic_cast<GraphicLayerImp*>(pView->getLayoutLayer()); if (pLayoutLayer != NULL) { if (pLayoutLayer->getId() == layerId) { pLayer = pLayoutLayer; } } if (pLayer == NULL) { ClassificationLayer* pClassificationLayer = dynamic_cast<ClassificationLayer*>(pView->getClassificationLayer()); if (pClassificationLayer != NULL) { if (pClassificationLayer->getId() == layerId) { pLayer = dynamic_cast<GraphicLayerImp*>(pClassificationLayer); } } } } } if (pLayer != NULL) { GraphicGroup* pGroup = pLayer->getGroup(); if (pGroup != NULL) { if (pGroup->getId() == objectId) { return pGroup; } return getObject(pGroup, objectId); } } return NULL; }
void GroupUngroupGraphicObjects::group() { GraphicLayer* pLayer = dynamic_cast<GraphicLayer*>(getSessionItem()); if (pLayer != NULL) { list<GraphicObject*> selectedObjects; pLayer->getSelectedObjects(selectedObjects); pLayer->deselectAllObjects(); for (list<string>::const_iterator iter = mObjectIds.begin(); iter != mObjectIds.end(); ++iter) { string objectId = *iter; if (objectId.empty() == false) { string viewId; View* pView = pLayer->getView(); if (pView != NULL) { viewId = pView->getId(); } GraphicObject* pObject = GraphicUndoUtilities::getObject(viewId, pLayer->getId(), objectId); if (pObject != NULL) { pLayer->selectObject(pObject); } } } pLayer->groupSelection(); list<GraphicObject*> newSelectedObjects; pLayer->getSelectedObjects(newSelectedObjects); VERIFYNRV(newSelectedObjects.size() == 1); GraphicGroup* pGroup = dynamic_cast<GraphicGroup*>(newSelectedObjects.front()); VERIFYNRV(pGroup != NULL); for (list<GraphicObject*>::iterator iter = selectedObjects.begin(); iter != selectedObjects.end(); ++iter) { GraphicObject* pObject = *iter; if ((pObject != NULL) && (pGroup->hasObject(pObject) == false)) { pLayer->selectObject(pObject); } } string oldGroupId = mGroupId; mGroupId = pGroup->getId(); emit sessionItemChanged(oldGroupId, mGroupId); } }