RVector RSnapEntityBase::snap( const RVector& position, RGraphicsView& view, const QSet<REntity::Id>& candidates, const RBox& queryBox) { RDocument* document = view.getDocument(); if (document==NULL) { return lastSnap; } REntity::Id entityId; double minDist = RMAXDOUBLE; double dist; QSet<REntity::Id>::const_iterator it; for (it=candidates.begin(); it!=candidates.end(); it++) { // 20111112: query direct: //QSharedPointer<REntity> e = document->queryEntityDirect(*it); QSharedPointer<REntity> e = document->queryEntity(*it); if (e.isNull()) { continue; } RVector candidate = position.getClosest2D( snapEntity(e, position, queryBox, view) ); dist = candidate.getDistanceTo2D(position); if (dist<minDist) { lastSnap = candidate; minDist = dist; entityId = e->getId(); } } if (!lastSnap.isValid()) { lastSnap = position; lastSnap.valid = false; return lastSnap; } else { entityIds.insert(entityId); return lastSnap; } }