void MgCmdManagerImpl::eraseWnd(const MgMotion* sender) { Box2d snap(sender->view->xform()->getWndRectM()); std::vector<int> delIds; void *it = NULL; MgShapes* s = sender->view->shapes(); for (MgShape* shape = s->getFirstShape(it); shape; shape = s->getNextShape(it)) { if (shape->shape()->hitTestBox(snap)) { delIds.push_back(shape->getID()); } } s->freeIterator(it); if (!delIds.empty() && sender->view->shapeWillDeleted(s->findShape(delIds.front()))) { MgShapesLock locker(MgShapesLock::Remove, sender->view); for (std::vector<int>::iterator i = delIds.begin(); i != delIds.end(); ++i) { MgShape* shape = s->findShape(*i); if (shape && sender->view->removeShape(shape)) { shape->release(); } } sender->view->regenAll(); } }