Created
December 6, 2023 18:36
-
-
Save Hadevs/2ece8bdc2b01be35da4c222711cb7099 to your computer and use it in GitHub Desktop.
roomplan.swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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