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(); } }
bool MgCmdErase::touchMoved(const MgMotion* sender) { Box2d snap(sender->startPointM, sender->pointM); void *it = NULL; MgShape* shape = m_boxsel ? sender->view->shapes()->getFirstShape(it) : NULL; m_delIds.clear(); for (; shape; shape = sender->view->shapes()->getNextShape(it)) { if (isIntersectMode(sender) ? shape->shape()->hitTestBox(snap) : snap.contains(shape->shape()->getExtent())) { m_delIds.push_back(shape->getID()); } } sender->view->shapes()->freeIterator(it); sender->view->redraw(false); return true; }
void MgComposite::_transform(const Matrix2d& mat) { void* it; for (MgShape* sp = _shapes->getFirstShape(it); sp; sp = _shapes->getNextShape(it)) { sp->shape()->transform(mat); } _shapes->freeIterator(it); }
bool MgGroup::_offset(const Vector2d& vec, int segment) { MgShape* sp = _shapes->findShape(segment); if (sp && canOffsetShapeAlone(sp)) { return sp->shape()->offset(vec, -1); } return __super::_offset(vec, segment); }
void MgComposite::_update() { void* it; _extent.empty(); for (MgShape* sp = _shapes->getFirstShape(it); sp; sp = _shapes->getNextShape(it)) { sp->shape()->update(); _extent.unionWith(sp->shapec()->getExtent()); } _shapes->freeIterator(it); }
bool MgComposite::_offset(const Vector2d& vec, int) { void* it; int n = 0; for (MgShape* sp = _shapes->getFirstShape(it); sp; sp = _shapes->getNextShape(it)) { n += sp->shape()->offset(vec, -1) ? 1 : 0; } _shapes->freeIterator(it); return n > 0; }