-
Create parametric 3D room scans with RoomPlan
RoomPlan can help your app quickly create simplified parametric 3D scans of a room. Learn how you can use this API to easily add a room scanning experience. We'll show you how to adopt this API, explore the 3D parametric output, and share best practices to help your app get great results with every scan.
Recursos
Videos relacionados
WWDC23
Tech Talks
WWDC22
-
Buscar este video…
-
-
4:36 - RoomCaptureView API - Scan & Process
// RoomCaptureView API - Scan & Process import UIKit import RoomPlan class RoomCaptureViewController: UIViewController { var roomCaptureView: RoomCaptureView var captureSessionConfig: RoomCaptureSession.Configuration private func startSession() { roomCaptureView?.captureSession.run(configuration: captureSessionConfig) } private func stopSession() { roomCaptureView?.captureSession.stop() } } -
5:00 - RoomCaptureView API - Export
// RoomCaptureView API - Export import UIKit import RoomPlan class RoomCaptureViewController: UIViewController { … func captureView(shouldPresent roomDataForProcessing: CapturedRoomData, error: Error?) -> Bool { // Optionally opt out of post processed scan results. return false } func captureView(didPresent processedResult: CapturedRoom, error: Error?) { // Handle final, post processed results and optional error. // Export processedResults … try processedResult.export(to: destinationURL) … } } -
6:50 - RoomCaptureSession - setup previewVisualizer
import UIKit import RealityKit import RoomPlan import ARKit class ViewController: UIViewController { @IBOutlet weak var arView: ARView! var previewVisualizer: Visualizer! lazy var captureSession: RoomCaptureSession = { let captureSession = RoomCaptureSession() arView.session = captureSession.arSession return captureSession }() override func viewDidLoad() { super.viewDidLoad() captureSession.delegate = self // set up previewVisualizer } } -
7:40 - RoomCaptureSession - live results and user instructions
// Getting live results and user instructions extension ViewController: RoomCaptureSessionDelegate { func captureSession(_ session: RoomCaptureSession, didUpdate room: CapturedRoom) { previewVisualizer.update(model: room) } func captureSession(_ session: RoomCaptureSession, didProvide instruction: Instruction) { previewVisualizer.provide(instruction) } } -
9:12 - Setup RoomBuilder
// RoomBuilder import UIKit import RealityKit import RoomPlan import ARKit class ViewController: UIViewController { @IBOutlet weak var arView: ARView! var previewVisualizer: Visualizer! // set up RoomBuilder var roomBuilder = RoomBuilder(options: [.beautifyObjects]) } -
9:30 - RoomBuilder - generate final 3D CapturedRoom
// RoomBuilder with the latest CapturedRoomData to generate final 3D CapturedRoom extension ViewController: RoomCaptureSessionDelegate { func captureSession(_ session: RoomCaptureSession, didEndWith data: CapturedRoomData, error: Error?) { if let error = error { print("Error: \(error)") } Task { let finalRoom = try! await roomBuilder.capturedRoom(from: data) previewVisualizer.update(model: finalRoom) } } } -
11:20 - CapturedRoom and export
// CapturedRoom and export public struct CapturedRoom: Codable, Sendable { public let walls: [Surface] public let doors: [Surface] public let windows: [Surface] public let openings: [Surface] public let objects: [Object] public func export(to url: URL) throws // Surface definitions ... // Object definitions ... }
-