void SPObject::cropToObject(SPObject *except) { std::vector<SPObject*> toDelete; for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) { if (SP_IS_ITEM(child)) { if (child->isAncestorOf(except)) { child->cropToObject(except); } else if(child != except) { toDelete.push_back(child); } } } for (std::size_t i = 0; i < toDelete.size(); ++i) { (toDelete[i])->deleteObject(true, true); } }