Skip to content

Instantly share code, notes, and snippets.

@Hadevs
Created December 6, 2023 18:36
Show Gist options
  • Save Hadevs/2ece8bdc2b01be35da4c222711cb7099 to your computer and use it in GitHub Desktop.
Save Hadevs/2ece8bdc2b01be35da4c222711cb7099 to your computer and use it in GitHub Desktop.
roomplan.swift
override func viewDidLoad() {
super.viewDidLoad()
if let url = Bundle.main.url(forResource: "Room", withExtension: "json"),
let jsonData = try? Data(contentsOf: url) {
readAndTransform(jsonData: jsonData)
}
}
struct RoomPlan: Codable {
let objects: [RoomObject]
let floors: [Floor]
}
struct RoomObject: Codable {
let dimensions: [Double]
let transform: [Double]
let category: [String: CategoryType]
}
struct CategoryType: Codable {}
struct Floor: Codable {
let dimensions: [Double]
}
func readAndTransform(jsonData: Data) {
let decoder = JSONDecoder()
do {
let roomPlan = try decoder.decode(RoomPlan.self, from: jsonData)
guard let floor = roomPlan.floors.first else {
return
}
print("Room size: \(floor.dimensions[0]) x \(floor.dimensions[1])")
let minFloorSide = min(floor.dimensions[0], floor.dimensions[1])
let scale = 100.0 / minFloorSide // 100 - is constant, minimum size of minimum side of the room
// In my case - storage, in your cases - tables :)
for object in roomPlan.objects where object.category.keys.contains("storage") {
let x = object.transform[12] * scale
let y = object.transform[13] * scale
let width = object.dimensions[0] * scale
let height = object.dimensions[1] * scale
print("Table: x = \(x), y = \(y), width = \(width), height = \(height)")
}
} catch {
print("Error JSON: \(error)")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment