Does anybody know if I can use the ARWorld map together with roomCaptureView? So that I can scan and save one Room, then save the data from scan, save the ARWorldmap and then make a new roomCaptureView.captureSession to scan the new room?
Right know I am first calling: roomCaptureView?.captureSession.run(configuration: roomCaptureSessionConfig) and then roomCaptureView.captureSession.arSession.run(roomCaptureViewARconfigurationFunc) with the saved ARWorldMap.
@IBAction func saveWorldMapAction(_ sender: Any) {
roomCaptureView.captureSession.arSession.getCurrentWorldMap { worldMap, error in
guard let map = worldMap
else { self.worldMapLabel.text = "error \(error!.localizedDescription) "; return }
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: map, requiringSecureCoding: true)
try data.write(to: self.mapSaveURL, options: [.atomic])
DispatchQueue.main.async {
self.loadWordMapButton.isHidden = false
self.loadWordMapButton.isEnabled = true
self.worldMapLabel.text = "Map Saved "
print(" map saved")
}
} catch {
fatalError("Can't save map: \(error.localizedDescription)")
}
}
}
@IBAction func AddNewRoomBtnPressed(_ sender: UIButton) {
sceneViewFloorPlan.alpha = 0
stopSession()
startSession()
oadWordMap()
}
private func startSession() {
isScanning = true
print("start roomCaptureView")
roomCaptureView?.captureSession.run(configuration: roomCaptureSessionConfig)
setActiveNavBar()
}
var defaultConfiguration: ARWorldTrackingConfiguration {
let configuration = ARWorldTrackingConfiguration()
configuration.environmentTexturing = .none
return configuration
}
func loadWordMap(){
let worldMap: ARWorldMap = {
guard let data = mapDataFromFile
else { fatalError("Map data should already be verified to exist before Load button is enabled.") }
do {
guard let worldMap = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, from: data)
else { fatalError("No ARWorldMap in archive.") }
return worldMap
} catch {
fatalError("Can't unarchive ARWorldMap from file data: \(error)")
}
}()
let configuration = self.defaultConfiguration // this app's standard world tracking settings
configuration.initialWorldMap = worldMap
guard let roomCaptureViewARconfigurationFunc = roomCaptureView.captureSession.arSession.configuration else {
return }
isScanning = true roomCaptureView.captureSession.arSession.run(roomCaptureViewARconfigurationFunc)
setActiveNavBar()
}