Files
companion/lib/domain/models/floor_plan.dart
T
2026-05-07 18:35:58 +02:00

69 lines
1.9 KiB
Dart

import 'position.dart';
class Room {
const Room({required this.id, required this.name, required this.polygon});
final String id;
final String name;
/// Polygon vertices in normalised 0..1 coordinates.
final List<Position> polygon;
Room copyWith({String? name, List<Position>? polygon}) =>
Room(id: id, name: name ?? this.name, polygon: polygon ?? this.polygon);
Map<String, dynamic> toJson() => {
'id': id,
'name': name,
'polygon': polygon.map((p) => p.toJson()).toList(),
};
factory Room.fromJson(Map<String, dynamic> json) => Room(
id: json['id'] as String,
name: json['name'] as String,
polygon: (json['polygon'] as List)
.map((p) => Position.fromJson(p as Map<String, dynamic>))
.toList(),
);
}
class FloorPlan {
const FloorPlan({
required this.id,
required this.floorId,
required this.metersPerUnit,
required this.rooms,
});
final String id;
final String floorId;
/// Scale: how many real-world meters one normalised unit represents.
final double metersPerUnit;
final List<Room> rooms;
FloorPlan copyWith({double? metersPerUnit, List<Room>? rooms}) => FloorPlan(
id: id,
floorId: floorId,
metersPerUnit: metersPerUnit ?? this.metersPerUnit,
rooms: rooms ?? this.rooms,
);
Map<String, dynamic> toJson() => {
'id': id,
'floor_id': floorId,
'meters_per_unit': metersPerUnit,
'rooms': rooms.map((r) => r.toJson()).toList(),
};
factory FloorPlan.fromJson(Map<String, dynamic> json) => FloorPlan(
id: json['id'] as String,
floorId: json['floor_id'] as String,
metersPerUnit: (json['meters_per_unit'] as num).toDouble(),
rooms: (json['rooms'] as List)
.map((r) => Room.fromJson(r as Map<String, dynamic>))
.toList(),
);
}