/** * Removes the given layer and undoes all entities on it. */ void RS_Graphic::removeLayer(RS_Layer* layer) { if (layer && layer->getName()!="0") { std::vector<RS_Entity*> toRemove; //find entities on layer for(auto e: entities){ if (e->getLayer() && e->getLayer()->getName()==layer->getName()) { toRemove.push_back(e); } } // remove all entities on that layer: if(toRemove.size()){ startUndoCycle(); for(auto e: toRemove){ e->setUndoState(true); e->setLayer("0"); addUndoable(e); } endUndoCycle(); } toRemove.clear(); // remove all entities in blocks that are on that layer: for(RS_Block* blk: blockList){ if(!blk) continue; for(auto e: *blk){ if (e->getLayer() && e->getLayer()->getName()==layer->getName()) { toRemove.push_back(e); } } } for(auto e: toRemove){ e->setUndoState(true); e->setLayer("0"); } layerList.remove(layer); } }
/** * Removes the given layer and undoes all entities on it. */ void RS_Graphic::removeLayer(RS_Layer* layer) { if (layer!=NULL && layer->getName()!="0") { // remove all entities on that layer: startUndoCycle(); for (RS_Entity* e=firstEntity(RS2::ResolveNone); e!=NULL; e=nextEntity(RS2::ResolveNone)) { if (e->getLayer()!=NULL && e->getLayer()->getName()==layer->getName()) { e->setUndoState(true); e->setLayer("0"); addUndoable(e); } } endUndoCycle(); // remove all entities in blocks that are on that layer: for (int bi=0; bi<blockList.count(); bi++) { RS_Block* blk = blockList.at(bi); if (blk!=NULL) { for (RS_Entity* e=blk->firstEntity(RS2::ResolveNone); e!=NULL; e=blk->nextEntity(RS2::ResolveNone)) { if (e->getLayer()!=NULL && e->getLayer()->getName()==layer->getName()) { e->setUndoState(true); e->setLayer("0"); //addUndoable(e); } } } } layerList.remove(layer); } }