campusMapBuildingAt function
- required CampusMapPoint point,
- required List<
CampusMapBuilding> buildings, - required String? selectedBuildingCode,
- required List<
CampusMapRoom> visibleRooms,
Finds an unambiguous new building under the camera center.
Downloaded geometry for the visible floor takes precedence over first-floor building outlines: upper floors can extend into a neighbouring footprint. Polygon holes remain outside, so courtyards do not trap the selection.
Implementation
CampusMapBuilding? campusMapBuildingAt({
required CampusMapPoint point,
required List<CampusMapBuilding> buildings,
required String? selectedBuildingCode,
required List<CampusMapRoom> visibleRooms,
}) {
if (selectedBuildingCode != null &&
visibleRooms.any(
(room) =>
room.buildingCode == selectedBuildingCode &&
room.polygons.any(
(polygon) => campusMapContainsPoint(polygon, point),
),
)) {
return null;
}
final matches = buildings
.where(
(building) => building.polygons.any(
(polygon) => campusMapContainsPoint(polygon, point),
),
)
.toList();
if (matches.length != 1 || matches.single.code == selectedBuildingCode) {
return null;
}
return matches.single;
}