Example #1
0
/**
 * 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);
    }
}
Example #2
0
/**
 * 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);
    }
}