double Snapper::snappedOffsetForLines(const SnapLineMap &snappingLineMap, double value) const { QMultiMap<double, double> minimumSnappingLineMap; SnapLineMapIterator snappingLineIterator(snappingLineMap); while (snappingLineIterator.hasNext()) { snappingLineIterator.next(); double snapLine = snappingLineIterator.key(); double offset = value - snapLine; double distance = qAbs(offset); if (distance < snappingDistance()) minimumSnappingLineMap.insert(distance, offset); } if (!minimumSnappingLineMap.isEmpty()) return minimumSnappingLineMap.begin().value(); return std::numeric_limits<double>::max(); }
double Snapper::snappedOffsetForOffsetLines(const SnapLineMap &snappingOffsetMap, Qt::Orientation orientation, double value, double lowerLimit, double upperLimit) const { QMultiMap<double, double> minimumSnappingLineMap; SnapLineMapIterator snappingOffsetIterator(snappingOffsetMap); while (snappingOffsetIterator.hasNext()) { snappingOffsetIterator.next(); double snapLine = snappingOffsetIterator.key(); const QRectF &formEditorItemRect(snappingOffsetIterator.value().first); double formEditorItemRectLowerLimit; double formEditorItemRectUpperLimit; if (orientation == Qt::Horizontal) { formEditorItemRectLowerLimit = formEditorItemRect.left(); formEditorItemRectUpperLimit = formEditorItemRect.right(); } else { formEditorItemRectLowerLimit = formEditorItemRect.top(); formEditorItemRectUpperLimit = formEditorItemRect.bottom(); } double offset = value - snapLine; double distance = qAbs(offset); if (distance < snappingDistance() && !(lowerLimit > formEditorItemRectUpperLimit || upperLimit < formEditorItemRectLowerLimit)) { minimumSnappingLineMap.insert(distance, offset); } } if (!minimumSnappingLineMap.isEmpty()) { return minimumSnappingLineMap.begin().value(); } return std::numeric_limits<double>::max(); }