react-native-nitro-ar 2026.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +347 -0
- package/app.plugin.js +24 -0
- package/ios/Bridge.h +8 -0
- package/ios/HybridARAnchor.swift +58 -0
- package/ios/HybridARBoundingBoxBuilder.swift +142 -0
- package/ios/HybridARDepthData.swift +138 -0
- package/ios/HybridARFrame.swift +121 -0
- package/ios/HybridARLightEstimate.swift +58 -0
- package/ios/HybridARMeasurement.swift +33 -0
- package/ios/HybridARMeshAnchor.swift +108 -0
- package/ios/HybridARPlaneAnchor.swift +114 -0
- package/ios/HybridARRaycastResult.swift +53 -0
- package/ios/HybridARSession.swift +505 -0
- package/ios/HybridARView.swift +725 -0
- package/ios/HybridARVolume.swift +52 -0
- package/ios/HybridARWorldMap.swift +55 -0
- package/lib/commonjs/index.js +24 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +3 -0
- package/lib/commonjs/specs/ARAnchor.nitro.js +6 -0
- package/lib/commonjs/specs/ARAnchor.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARBoundingBoxBuilder.nitro.js +6 -0
- package/lib/commonjs/specs/ARBoundingBoxBuilder.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARDepthData.nitro.js +6 -0
- package/lib/commonjs/specs/ARDepthData.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARFrame.nitro.js +6 -0
- package/lib/commonjs/specs/ARFrame.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARLightEstimate.nitro.js +6 -0
- package/lib/commonjs/specs/ARLightEstimate.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARMeasurement.nitro.js +6 -0
- package/lib/commonjs/specs/ARMeasurement.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARPlaneAnchor.nitro.js +6 -0
- package/lib/commonjs/specs/ARPlaneAnchor.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARRaycastResult.nitro.js +6 -0
- package/lib/commonjs/specs/ARRaycastResult.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARSceneMesh.nitro.js +6 -0
- package/lib/commonjs/specs/ARSceneMesh.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARSession.nitro.js +6 -0
- package/lib/commonjs/specs/ARSession.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARView.nitro.js +6 -0
- package/lib/commonjs/specs/ARView.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARVolume.nitro.js +6 -0
- package/lib/commonjs/specs/ARVolume.nitro.js.map +1 -0
- package/lib/commonjs/specs/ARWorldMap.nitro.js +6 -0
- package/lib/commonjs/specs/ARWorldMap.nitro.js.map +1 -0
- package/lib/module/index.js +18 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/specs/ARAnchor.nitro.js +4 -0
- package/lib/module/specs/ARAnchor.nitro.js.map +1 -0
- package/lib/module/specs/ARBoundingBoxBuilder.nitro.js +4 -0
- package/lib/module/specs/ARBoundingBoxBuilder.nitro.js.map +1 -0
- package/lib/module/specs/ARDepthData.nitro.js +4 -0
- package/lib/module/specs/ARDepthData.nitro.js.map +1 -0
- package/lib/module/specs/ARFrame.nitro.js +4 -0
- package/lib/module/specs/ARFrame.nitro.js.map +1 -0
- package/lib/module/specs/ARLightEstimate.nitro.js +4 -0
- package/lib/module/specs/ARLightEstimate.nitro.js.map +1 -0
- package/lib/module/specs/ARMeasurement.nitro.js +4 -0
- package/lib/module/specs/ARMeasurement.nitro.js.map +1 -0
- package/lib/module/specs/ARPlaneAnchor.nitro.js +4 -0
- package/lib/module/specs/ARPlaneAnchor.nitro.js.map +1 -0
- package/lib/module/specs/ARRaycastResult.nitro.js +4 -0
- package/lib/module/specs/ARRaycastResult.nitro.js.map +1 -0
- package/lib/module/specs/ARSceneMesh.nitro.js +4 -0
- package/lib/module/specs/ARSceneMesh.nitro.js.map +1 -0
- package/lib/module/specs/ARSession.nitro.js +4 -0
- package/lib/module/specs/ARSession.nitro.js.map +1 -0
- package/lib/module/specs/ARView.nitro.js +4 -0
- package/lib/module/specs/ARView.nitro.js.map +1 -0
- package/lib/module/specs/ARVolume.nitro.js +4 -0
- package/lib/module/specs/ARVolume.nitro.js.map +1 -0
- package/lib/module/specs/ARWorldMap.nitro.js +4 -0
- package/lib/module/specs/ARWorldMap.nitro.js.map +1 -0
- package/lib/typescript/src/index.d.ts +20 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARAnchor.nitro.d.ts +18 -0
- package/lib/typescript/src/specs/ARAnchor.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARBoundingBoxBuilder.nitro.d.ts +11 -0
- package/lib/typescript/src/specs/ARBoundingBoxBuilder.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARDepthData.nitro.d.ts +26 -0
- package/lib/typescript/src/specs/ARDepthData.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARFrame.nitro.d.ts +32 -0
- package/lib/typescript/src/specs/ARFrame.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARLightEstimate.nitro.d.ts +18 -0
- package/lib/typescript/src/specs/ARLightEstimate.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARMeasurement.nitro.d.ts +11 -0
- package/lib/typescript/src/specs/ARMeasurement.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARPlaneAnchor.nitro.d.ts +32 -0
- package/lib/typescript/src/specs/ARPlaneAnchor.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARRaycastResult.nitro.d.ts +26 -0
- package/lib/typescript/src/specs/ARRaycastResult.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARSceneMesh.nitro.d.ts +47 -0
- package/lib/typescript/src/specs/ARSceneMesh.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARSession.nitro.d.ts +75 -0
- package/lib/typescript/src/specs/ARSession.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARView.nitro.d.ts +51 -0
- package/lib/typescript/src/specs/ARView.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARVolume.nitro.d.ts +14 -0
- package/lib/typescript/src/specs/ARVolume.nitro.d.ts.map +1 -0
- package/lib/typescript/src/specs/ARWorldMap.nitro.d.ts +17 -0
- package/lib/typescript/src/specs/ARWorldMap.nitro.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/ios/NitroAR+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroAR-Swift-Cxx-Bridge.cpp +335 -0
- package/nitrogen/generated/ios/NitroAR-Swift-Cxx-Bridge.hpp +934 -0
- package/nitrogen/generated/ios/NitroAR-Swift-Cxx-Umbrella.hpp +169 -0
- package/nitrogen/generated/ios/NitroARAutolinking.mm +49 -0
- package/nitrogen/generated/ios/NitroARAutolinking.swift +50 -0
- package/nitrogen/generated/ios/c++/HybridARAnchorSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARAnchorSpecSwift.hpp +99 -0
- package/nitrogen/generated/ios/c++/HybridARBoundingBoxBuilderSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARBoundingBoxBuilderSpecSwift.hpp +95 -0
- package/nitrogen/generated/ios/c++/HybridARDepthDataSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARDepthDataSpecSwift.hpp +103 -0
- package/nitrogen/generated/ios/c++/HybridARDirectionalLightEstimateSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARDirectionalLightEstimateSpecSwift.hpp +88 -0
- package/nitrogen/generated/ios/c++/HybridARFrameSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARFrameSpecSwift.hpp +135 -0
- package/nitrogen/generated/ios/c++/HybridARLightEstimateSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARLightEstimateSpecSwift.hpp +80 -0
- package/nitrogen/generated/ios/c++/HybridARMeasurementSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARMeasurementSpecSwift.hpp +90 -0
- package/nitrogen/generated/ios/c++/HybridARMeshAnchorSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARMeshAnchorSpecSwift.hpp +107 -0
- package/nitrogen/generated/ios/c++/HybridARPlaneAnchorSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARPlaneAnchorSpecSwift.hpp +116 -0
- package/nitrogen/generated/ios/c++/HybridARPlaneGeometrySpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARPlaneGeometrySpecSwift.hpp +90 -0
- package/nitrogen/generated/ios/c++/HybridARRaycastResultSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARRaycastResultSpecSwift.hpp +97 -0
- package/nitrogen/generated/ios/c++/HybridARSessionSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARSessionSpecSwift.hpp +296 -0
- package/nitrogen/generated/ios/c++/HybridARViewSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARViewSpecSwift.hpp +243 -0
- package/nitrogen/generated/ios/c++/HybridARVolumeSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARVolumeSpecSwift.hpp +94 -0
- package/nitrogen/generated/ios/c++/HybridARWorldMapSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridARWorldMapSpecSwift.hpp +97 -0
- package/nitrogen/generated/ios/c++/views/HybridARViewComponent.mm +152 -0
- package/nitrogen/generated/ios/swift/ARSessionConfiguration.swift +189 -0
- package/nitrogen/generated/ios/swift/ARViewHitResult.swift +39 -0
- package/nitrogen/generated/ios/swift/CameraPose.swift +46 -0
- package/nitrogen/generated/ios/swift/EnvironmentTexturing.swift +44 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_TrackingState_TrackingStateReason.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_HybridARFrameSpec_.swift +50 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_HybridARWorldMapSpec_.swift +50 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__shared_ptr_HybridARAnchorSpec___std__vector_std__shared_ptr_HybridARAnchorSpec___std__vector_std__string_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__shared_ptr_HybridARMeshAnchorSpec___std__vector_std__shared_ptr_HybridARMeshAnchorSpec___std__vector_std__string_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_std__shared_ptr_HybridARPlaneAnchorSpec___std__vector_std__shared_ptr_HybridARPlaneAnchorSpec___std__vector_std__string_.swift +54 -0
- package/nitrogen/generated/ios/swift/HybridARAnchorSpec.swift +60 -0
- package/nitrogen/generated/ios/swift/HybridARAnchorSpec_cxx.swift +192 -0
- package/nitrogen/generated/ios/swift/HybridARBoundingBoxBuilderSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridARBoundingBoxBuilderSpec_cxx.swift +161 -0
- package/nitrogen/generated/ios/swift/HybridARDepthDataSpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridARDepthDataSpec_cxx.swift +188 -0
- package/nitrogen/generated/ios/swift/HybridARDirectionalLightEstimateSpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridARDirectionalLightEstimateSpec_cxx.swift +162 -0
- package/nitrogen/generated/ios/swift/HybridARFrameSpec.swift +65 -0
- package/nitrogen/generated/ios/swift/HybridARFrameSpec_cxx.swift +285 -0
- package/nitrogen/generated/ios/swift/HybridARLightEstimateSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridARLightEstimateSpec_cxx.swift +140 -0
- package/nitrogen/generated/ios/swift/HybridARMeasurementSpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridARMeasurementSpec_cxx.swift +160 -0
- package/nitrogen/generated/ios/swift/HybridARMeshAnchorSpec.swift +62 -0
- package/nitrogen/generated/ios/swift/HybridARMeshAnchorSpec_cxx.swift +212 -0
- package/nitrogen/generated/ios/swift/HybridARPlaneAnchorSpec.swift +62 -0
- package/nitrogen/generated/ios/swift/HybridARPlaneAnchorSpec_cxx.swift +209 -0
- package/nitrogen/generated/ios/swift/HybridARPlaneGeometrySpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridARPlaneGeometrySpec_cxx.swift +178 -0
- package/nitrogen/generated/ios/swift/HybridARRaycastResultSpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridARRaycastResultSpec_cxx.swift +179 -0
- package/nitrogen/generated/ios/swift/HybridARSessionSpec.swift +78 -0
- package/nitrogen/generated/ios/swift/HybridARSessionSpec_cxx.swift +591 -0
- package/nitrogen/generated/ios/swift/HybridARViewSpec.swift +78 -0
- package/nitrogen/generated/ios/swift/HybridARViewSpec_cxx.swift +561 -0
- package/nitrogen/generated/ios/swift/HybridARVolumeSpec.swift +60 -0
- package/nitrogen/generated/ios/swift/HybridARVolumeSpec_cxx.swift +180 -0
- package/nitrogen/generated/ios/swift/HybridARWorldMapSpec.swift +58 -0
- package/nitrogen/generated/ios/swift/HybridARWorldMapSpec_cxx.swift +176 -0
- package/nitrogen/generated/ios/swift/LiDARCapabilities.swift +39 -0
- package/nitrogen/generated/ios/swift/MeshClassification.swift +64 -0
- package/nitrogen/generated/ios/swift/PlaneAlignment.swift +40 -0
- package/nitrogen/generated/ios/swift/PlaneClassification.swift +64 -0
- package/nitrogen/generated/ios/swift/PlaneDetectionMode.swift +40 -0
- package/nitrogen/generated/ios/swift/RaycastAlignment.swift +44 -0
- package/nitrogen/generated/ios/swift/RaycastQuery.swift +44 -0
- package/nitrogen/generated/ios/swift/RaycastTarget.swift +48 -0
- package/nitrogen/generated/ios/swift/SceneReconstructionMode.swift +44 -0
- package/nitrogen/generated/ios/swift/TrackingState.swift +44 -0
- package/nitrogen/generated/ios/swift/TrackingStateReason.swift +52 -0
- package/nitrogen/generated/ios/swift/WorldAlignment.swift +44 -0
- package/nitrogen/generated/ios/swift/WorldMappingStatus.swift +48 -0
- package/nitrogen/generated/shared/c++/ARSessionConfiguration.hpp +132 -0
- package/nitrogen/generated/shared/c++/ARViewHitResult.hpp +91 -0
- package/nitrogen/generated/shared/c++/CameraPose.hpp +87 -0
- package/nitrogen/generated/shared/c++/EnvironmentTexturing.hpp +80 -0
- package/nitrogen/generated/shared/c++/HybridARAnchorSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridARAnchorSpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridARBoundingBoxBuilderSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridARBoundingBoxBuilderSpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridARDepthDataSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridARDepthDataSpec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridARDirectionalLightEstimateSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridARDirectionalLightEstimateSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridARFrameSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridARFrameSpec.hpp +83 -0
- package/nitrogen/generated/shared/c++/HybridARLightEstimateSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridARLightEstimateSpec.hpp +63 -0
- package/nitrogen/generated/shared/c++/HybridARMeasurementSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridARMeasurementSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridARMeshAnchorSpec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridARMeshAnchorSpec.hpp +72 -0
- package/nitrogen/generated/shared/c++/HybridARPlaneAnchorSpec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridARPlaneAnchorSpec.hpp +79 -0
- package/nitrogen/generated/shared/c++/HybridARPlaneGeometrySpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridARPlaneGeometrySpec.hpp +65 -0
- package/nitrogen/generated/shared/c++/HybridARRaycastResultSpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridARRaycastResultSpec.hpp +70 -0
- package/nitrogen/generated/shared/c++/HybridARSessionSpec.cpp +45 -0
- package/nitrogen/generated/shared/c++/HybridARSessionSpec.hpp +131 -0
- package/nitrogen/generated/shared/c++/HybridARViewSpec.cpp +55 -0
- package/nitrogen/generated/shared/c++/HybridARViewSpec.hpp +101 -0
- package/nitrogen/generated/shared/c++/HybridARVolumeSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridARVolumeSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridARWorldMapSpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridARWorldMapSpec.hpp +66 -0
- package/nitrogen/generated/shared/c++/LiDARCapabilities.hpp +91 -0
- package/nitrogen/generated/shared/c++/MeshClassification.hpp +100 -0
- package/nitrogen/generated/shared/c++/PlaneAlignment.hpp +76 -0
- package/nitrogen/generated/shared/c++/PlaneClassification.hpp +100 -0
- package/nitrogen/generated/shared/c++/PlaneDetectionMode.hpp +76 -0
- package/nitrogen/generated/shared/c++/RaycastAlignment.hpp +80 -0
- package/nitrogen/generated/shared/c++/RaycastQuery.hpp +99 -0
- package/nitrogen/generated/shared/c++/RaycastTarget.hpp +84 -0
- package/nitrogen/generated/shared/c++/SceneReconstructionMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/TrackingState.hpp +80 -0
- package/nitrogen/generated/shared/c++/TrackingStateReason.hpp +88 -0
- package/nitrogen/generated/shared/c++/WorldAlignment.hpp +80 -0
- package/nitrogen/generated/shared/c++/WorldMappingStatus.hpp +84 -0
- package/nitrogen/generated/shared/c++/views/HybridARViewComponent.cpp +182 -0
- package/nitrogen/generated/shared/c++/views/HybridARViewComponent.hpp +120 -0
- package/nitrogen/generated/shared/json/ARViewConfig.json +19 -0
- package/package.json +98 -0
- package/react-native-nitro-ar.podspec +40 -0
- package/src/index.ts +60 -0
- package/src/specs/ARAnchor.nitro.ts +21 -0
- package/src/specs/ARBoundingBoxBuilder.nitro.ts +11 -0
- package/src/specs/ARDepthData.nitro.ts +29 -0
- package/src/specs/ARFrame.nitro.ts +41 -0
- package/src/specs/ARLightEstimate.nitro.ts +20 -0
- package/src/specs/ARMeasurement.nitro.ts +10 -0
- package/src/specs/ARPlaneAnchor.nitro.ts +46 -0
- package/src/specs/ARRaycastResult.nitro.ts +32 -0
- package/src/specs/ARSceneMesh.nitro.ts +63 -0
- package/src/specs/ARSession.nitro.ts +112 -0
- package/src/specs/ARView.nitro.ts +84 -0
- package/src/specs/ARVolume.nitro.ts +15 -0
- package/src/specs/ARWorldMap.nitro.ts +20 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import ARKit
|
|
2
|
+
import NitroModules
|
|
3
|
+
|
|
4
|
+
@available(iOS 14.0, *)
|
|
5
|
+
final class HybridARDepthData: HybridARDepthDataSpec {
|
|
6
|
+
private let depthData: ARDepthData
|
|
7
|
+
|
|
8
|
+
init(depthData: ARDepthData) {
|
|
9
|
+
self.depthData = depthData
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
var width: Double {
|
|
13
|
+
Double(CVPixelBufferGetWidth(depthData.depthMap))
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var height: Double {
|
|
17
|
+
Double(CVPixelBufferGetHeight(depthData.depthMap))
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var depthMap: [Double] {
|
|
21
|
+
extractFloatBuffer(depthData.depthMap)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var confidenceMap: [Double] {
|
|
25
|
+
guard let confidence = depthData.confidenceMap else {
|
|
26
|
+
return []
|
|
27
|
+
}
|
|
28
|
+
return extractUInt8Buffer(confidence)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func getDepthAt(x: Double, y: Double) -> Double {
|
|
32
|
+
let buffer = depthData.depthMap
|
|
33
|
+
let w = CVPixelBufferGetWidth(buffer)
|
|
34
|
+
let h = CVPixelBufferGetHeight(buffer)
|
|
35
|
+
|
|
36
|
+
let px = Int(x * Double(w - 1))
|
|
37
|
+
let py = Int(y * Double(h - 1))
|
|
38
|
+
|
|
39
|
+
guard px >= 0, px < w, py >= 0, py < h else {
|
|
40
|
+
return 0
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
CVPixelBufferLockBaseAddress(buffer, .readOnly)
|
|
44
|
+
defer { CVPixelBufferUnlockBaseAddress(buffer, .readOnly) }
|
|
45
|
+
|
|
46
|
+
guard let baseAddress = CVPixelBufferGetBaseAddress(buffer) else {
|
|
47
|
+
return 0
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let bytesPerRow = CVPixelBufferGetBytesPerRow(buffer)
|
|
51
|
+
let floatBuffer = baseAddress.assumingMemoryBound(to: Float32.self)
|
|
52
|
+
let index = py * (bytesPerRow / MemoryLayout<Float32>.size) + px
|
|
53
|
+
|
|
54
|
+
return Double(floatBuffer[index])
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
func getConfidenceAt(x: Double, y: Double) -> Double {
|
|
58
|
+
guard let confidence = depthData.confidenceMap else {
|
|
59
|
+
return 0
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let w = CVPixelBufferGetWidth(confidence)
|
|
63
|
+
let h = CVPixelBufferGetHeight(confidence)
|
|
64
|
+
|
|
65
|
+
let px = Int(x * Double(w - 1))
|
|
66
|
+
let py = Int(y * Double(h - 1))
|
|
67
|
+
|
|
68
|
+
guard px >= 0, px < w, py >= 0, py < h else {
|
|
69
|
+
return 0
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
CVPixelBufferLockBaseAddress(confidence, .readOnly)
|
|
73
|
+
defer { CVPixelBufferUnlockBaseAddress(confidence, .readOnly) }
|
|
74
|
+
|
|
75
|
+
guard let baseAddress = CVPixelBufferGetBaseAddress(confidence) else {
|
|
76
|
+
return 0
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
let bytesPerRow = CVPixelBufferGetBytesPerRow(confidence)
|
|
80
|
+
let uint8Buffer = baseAddress.assumingMemoryBound(to: UInt8.self)
|
|
81
|
+
let index = py * bytesPerRow + px
|
|
82
|
+
|
|
83
|
+
return Double(uint8Buffer[index])
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
private func extractFloatBuffer(_ buffer: CVPixelBuffer) -> [Double] {
|
|
87
|
+
CVPixelBufferLockBaseAddress(buffer, .readOnly)
|
|
88
|
+
defer { CVPixelBufferUnlockBaseAddress(buffer, .readOnly) }
|
|
89
|
+
|
|
90
|
+
let w = CVPixelBufferGetWidth(buffer)
|
|
91
|
+
let h = CVPixelBufferGetHeight(buffer)
|
|
92
|
+
let bytesPerRow = CVPixelBufferGetBytesPerRow(buffer)
|
|
93
|
+
|
|
94
|
+
guard let baseAddress = CVPixelBufferGetBaseAddress(buffer) else {
|
|
95
|
+
return []
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
var result: [Double] = []
|
|
99
|
+
result.reserveCapacity(w * h)
|
|
100
|
+
|
|
101
|
+
let floatBuffer = baseAddress.assumingMemoryBound(to: Float32.self)
|
|
102
|
+
let stride = bytesPerRow / MemoryLayout<Float32>.size
|
|
103
|
+
|
|
104
|
+
for y in 0..<h {
|
|
105
|
+
for x in 0..<w {
|
|
106
|
+
result.append(Double(floatBuffer[y * stride + x]))
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return result
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private func extractUInt8Buffer(_ buffer: CVPixelBuffer) -> [Double] {
|
|
114
|
+
CVPixelBufferLockBaseAddress(buffer, .readOnly)
|
|
115
|
+
defer { CVPixelBufferUnlockBaseAddress(buffer, .readOnly) }
|
|
116
|
+
|
|
117
|
+
let w = CVPixelBufferGetWidth(buffer)
|
|
118
|
+
let h = CVPixelBufferGetHeight(buffer)
|
|
119
|
+
let bytesPerRow = CVPixelBufferGetBytesPerRow(buffer)
|
|
120
|
+
|
|
121
|
+
guard let baseAddress = CVPixelBufferGetBaseAddress(buffer) else {
|
|
122
|
+
return []
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
var result: [Double] = []
|
|
126
|
+
result.reserveCapacity(w * h)
|
|
127
|
+
|
|
128
|
+
let uint8Buffer = baseAddress.assumingMemoryBound(to: UInt8.self)
|
|
129
|
+
|
|
130
|
+
for y in 0..<h {
|
|
131
|
+
for x in 0..<w {
|
|
132
|
+
result.append(Double(uint8Buffer[y * bytesPerRow + x]))
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return result
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import ARKit
|
|
2
|
+
import NitroModules
|
|
3
|
+
import simd
|
|
4
|
+
|
|
5
|
+
final class HybridARFrame: HybridARFrameSpec {
|
|
6
|
+
private let frame: ARFrame
|
|
7
|
+
|
|
8
|
+
init(frame: ARFrame) {
|
|
9
|
+
self.frame = frame
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
var timestamp: Double {
|
|
13
|
+
frame.timestamp
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var cameraPosition: [Double] {
|
|
17
|
+
let t = frame.camera.transform
|
|
18
|
+
return [
|
|
19
|
+
Double(t.columns.3.x),
|
|
20
|
+
Double(t.columns.3.y),
|
|
21
|
+
Double(t.columns.3.z)
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var cameraRotation: [Double] {
|
|
26
|
+
let q = simd_quatf(frame.camera.transform)
|
|
27
|
+
return [
|
|
28
|
+
Double(q.vector.x),
|
|
29
|
+
Double(q.vector.y),
|
|
30
|
+
Double(q.vector.z),
|
|
31
|
+
Double(q.vector.w)
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var projectionMatrix: [Double] {
|
|
36
|
+
matrixToArray(frame.camera.projectionMatrix)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
var viewMatrix: [Double] {
|
|
40
|
+
matrixToArray(frame.camera.viewMatrix(for: .portrait))
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var cameraIntrinsics: [Double] {
|
|
44
|
+
let i = frame.camera.intrinsics
|
|
45
|
+
return [
|
|
46
|
+
Double(i.columns.0.x), // fx
|
|
47
|
+
Double(i.columns.1.y), // fy
|
|
48
|
+
Double(i.columns.2.x), // cx
|
|
49
|
+
Double(i.columns.2.y) // cy
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
var imageResolution: [Double] {
|
|
54
|
+
let size = frame.camera.imageResolution
|
|
55
|
+
return [Double(size.width), Double(size.height)]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
var lightEstimate: HybridARLightEstimateSpec? {
|
|
59
|
+
guard let estimate = frame.lightEstimate else {
|
|
60
|
+
return nil
|
|
61
|
+
}
|
|
62
|
+
return HybridARLightEstimate(estimate: estimate)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
var directionalLightEstimate: HybridARDirectionalLightEstimateSpec? {
|
|
66
|
+
guard let estimate = frame.lightEstimate as? ARDirectionalLightEstimate else {
|
|
67
|
+
return nil
|
|
68
|
+
}
|
|
69
|
+
return HybridARDirectionalLightEstimate(estimate: estimate)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
var sceneDepth: HybridARDepthDataSpec? {
|
|
73
|
+
if #available(iOS 14.0, *) {
|
|
74
|
+
guard let depth = frame.sceneDepth else {
|
|
75
|
+
return nil
|
|
76
|
+
}
|
|
77
|
+
return HybridARDepthData(depthData: depth)
|
|
78
|
+
}
|
|
79
|
+
return nil
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
var smoothedSceneDepth: HybridARDepthDataSpec? {
|
|
83
|
+
if #available(iOS 14.0, *) {
|
|
84
|
+
guard let depth = frame.smoothedSceneDepth else {
|
|
85
|
+
return nil
|
|
86
|
+
}
|
|
87
|
+
return HybridARDepthData(depthData: depth)
|
|
88
|
+
}
|
|
89
|
+
return nil
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
func getCapturedImage(quality: Double) -> String {
|
|
93
|
+
let pixelBuffer = frame.capturedImage
|
|
94
|
+
let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
|
|
95
|
+
let context = CIContext()
|
|
96
|
+
|
|
97
|
+
guard let cgImage = context.createCGImage(ciImage, from: ciImage.extent) else {
|
|
98
|
+
return ""
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
let uiImage = UIImage(cgImage: cgImage)
|
|
102
|
+
guard let jpegData = uiImage.jpegData(compressionQuality: CGFloat(quality)) else {
|
|
103
|
+
return ""
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return jpegData.base64EncodedString()
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private func matrixToArray(_ matrix: simd_float4x4) -> [Double] {
|
|
110
|
+
[
|
|
111
|
+
Double(matrix.columns.0.x), Double(matrix.columns.0.y),
|
|
112
|
+
Double(matrix.columns.0.z), Double(matrix.columns.0.w),
|
|
113
|
+
Double(matrix.columns.1.x), Double(matrix.columns.1.y),
|
|
114
|
+
Double(matrix.columns.1.z), Double(matrix.columns.1.w),
|
|
115
|
+
Double(matrix.columns.2.x), Double(matrix.columns.2.y),
|
|
116
|
+
Double(matrix.columns.2.z), Double(matrix.columns.2.w),
|
|
117
|
+
Double(matrix.columns.3.x), Double(matrix.columns.3.y),
|
|
118
|
+
Double(matrix.columns.3.z), Double(matrix.columns.3.w)
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import ARKit
|
|
2
|
+
import NitroModules
|
|
3
|
+
|
|
4
|
+
final class HybridARLightEstimate: HybridARLightEstimateSpec {
|
|
5
|
+
private let estimate: ARLightEstimate
|
|
6
|
+
|
|
7
|
+
init(estimate: ARLightEstimate) {
|
|
8
|
+
self.estimate = estimate
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
var ambientIntensity: Double {
|
|
12
|
+
Double(estimate.ambientIntensity)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var ambientColorTemperature: Double {
|
|
16
|
+
Double(estimate.ambientColorTemperature)
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
final class HybridARDirectionalLightEstimate: HybridARDirectionalLightEstimateSpec {
|
|
21
|
+
private let estimate: ARDirectionalLightEstimate
|
|
22
|
+
|
|
23
|
+
init(estimate: ARDirectionalLightEstimate) {
|
|
24
|
+
self.estimate = estimate
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var ambientIntensity: Double {
|
|
28
|
+
Double(estimate.ambientIntensity)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var ambientColorTemperature: Double {
|
|
32
|
+
Double(estimate.ambientColorTemperature)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var primaryLightDirection: [Double] {
|
|
36
|
+
let dir = estimate.primaryLightDirection
|
|
37
|
+
return [Double(dir.x), Double(dir.y), Double(dir.z)]
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var primaryLightIntensity: Double {
|
|
41
|
+
Double(estimate.primaryLightIntensity)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var sphericalHarmonicsCoefficients: [Double] {
|
|
45
|
+
let data = estimate.sphericalHarmonicsCoefficients
|
|
46
|
+
var result: [Double] = []
|
|
47
|
+
result.reserveCapacity(27)
|
|
48
|
+
|
|
49
|
+
data.withUnsafeBytes { buffer in
|
|
50
|
+
let floats = buffer.bindMemory(to: Float.self)
|
|
51
|
+
for i in 0..<min(27, floats.count) {
|
|
52
|
+
result.append(Double(floats[i]))
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return result
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import NitroModules
|
|
2
|
+
import simd
|
|
3
|
+
|
|
4
|
+
final class HybridARMeasurement: HybridARMeasurementSpec {
|
|
5
|
+
let startAnchor: HybridARAnchor
|
|
6
|
+
let endAnchor: HybridARAnchor
|
|
7
|
+
|
|
8
|
+
init(
|
|
9
|
+
start: HybridARAnchor,
|
|
10
|
+
end: HybridARAnchor
|
|
11
|
+
) {
|
|
12
|
+
self.startAnchor = start
|
|
13
|
+
self.endAnchor = end
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var start: HybridARAnchorSpec {
|
|
17
|
+
startAnchor
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var end: HybridARAnchorSpec {
|
|
21
|
+
endAnchor
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
var length: Double {
|
|
25
|
+
let a = startAnchor.anchor.transform.columns.3
|
|
26
|
+
let b = endAnchor.anchor.transform.columns.3
|
|
27
|
+
return Double(simd_distance(a, b))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var isValid: Bool {
|
|
31
|
+
startAnchor.isTracked && endAnchor.isTracked
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import ARKit
|
|
2
|
+
import NitroModules
|
|
3
|
+
|
|
4
|
+
@available(iOS 13.4, *)
|
|
5
|
+
final class HybridARMeshAnchor: HybridARMeshAnchorSpec {
|
|
6
|
+
let anchor: ARMeshAnchor
|
|
7
|
+
|
|
8
|
+
init(anchor: ARMeshAnchor) {
|
|
9
|
+
self.anchor = anchor
|
|
10
|
+
super.init()
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
var identifier: String {
|
|
14
|
+
anchor.identifier.uuidString
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
var transform: [Double] {
|
|
18
|
+
let t = anchor.transform
|
|
19
|
+
return [
|
|
20
|
+
Double(t.columns.0.x), Double(t.columns.0.y), Double(t.columns.0.z), Double(t.columns.0.w),
|
|
21
|
+
Double(t.columns.1.x), Double(t.columns.1.y), Double(t.columns.1.z), Double(t.columns.1.w),
|
|
22
|
+
Double(t.columns.2.x), Double(t.columns.2.y), Double(t.columns.2.z), Double(t.columns.2.w),
|
|
23
|
+
Double(t.columns.3.x), Double(t.columns.3.y), Double(t.columns.3.z), Double(t.columns.3.w)
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var vertexCount: Double {
|
|
28
|
+
Double(anchor.geometry.vertices.count)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var faceCount: Double {
|
|
32
|
+
Double(anchor.geometry.faces.count)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var vertices: [Double] {
|
|
36
|
+
let geo = anchor.geometry
|
|
37
|
+
let vertexBuffer = geo.vertices
|
|
38
|
+
var result: [Double] = []
|
|
39
|
+
result.reserveCapacity(vertexBuffer.count * 3)
|
|
40
|
+
|
|
41
|
+
for i in 0..<vertexBuffer.count {
|
|
42
|
+
let vertex = vertexBuffer[i]
|
|
43
|
+
result.append(Double(vertex.x))
|
|
44
|
+
result.append(Double(vertex.y))
|
|
45
|
+
result.append(Double(vertex.z))
|
|
46
|
+
}
|
|
47
|
+
return result
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var faces: [Double] {
|
|
51
|
+
let geo = anchor.geometry
|
|
52
|
+
let faceBuffer = geo.faces
|
|
53
|
+
var result: [Double] = []
|
|
54
|
+
result.reserveCapacity(faceBuffer.count * 3)
|
|
55
|
+
|
|
56
|
+
for i in 0..<faceBuffer.count {
|
|
57
|
+
let indices = faceBuffer.vertexIndicesOf(faceWithIndex: i)
|
|
58
|
+
result.append(Double(indices[0]))
|
|
59
|
+
result.append(Double(indices[1]))
|
|
60
|
+
result.append(Double(indices[2]))
|
|
61
|
+
}
|
|
62
|
+
return result
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
var normals: [Double] {
|
|
66
|
+
let geo = anchor.geometry
|
|
67
|
+
let normalBuffer = geo.normals
|
|
68
|
+
var result: [Double] = []
|
|
69
|
+
result.reserveCapacity(normalBuffer.count * 3)
|
|
70
|
+
|
|
71
|
+
for i in 0..<normalBuffer.count {
|
|
72
|
+
let normal = normalBuffer[i]
|
|
73
|
+
result.append(Double(normal.x))
|
|
74
|
+
result.append(Double(normal.y))
|
|
75
|
+
result.append(Double(normal.z))
|
|
76
|
+
}
|
|
77
|
+
return result
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
var classifications: [MeshClassification] {
|
|
81
|
+
let geo = anchor.geometry
|
|
82
|
+
guard let classBuffer = geo.classification else {
|
|
83
|
+
return []
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
var result: [MeshClassification] = []
|
|
87
|
+
result.reserveCapacity(classBuffer.count)
|
|
88
|
+
|
|
89
|
+
for i in 0..<classBuffer.count {
|
|
90
|
+
let arClass = classBuffer[i]
|
|
91
|
+
result.append(mapClassification(arClass))
|
|
92
|
+
}
|
|
93
|
+
return result
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private func mapClassification(_ arClass: ARMeshClassification) -> MeshClassification {
|
|
97
|
+
switch arClass {
|
|
98
|
+
case .wall: return .wall
|
|
99
|
+
case .floor: return .floor
|
|
100
|
+
case .ceiling: return .ceiling
|
|
101
|
+
case .table: return .table
|
|
102
|
+
case .seat: return .seat
|
|
103
|
+
case .window: return .window
|
|
104
|
+
case .door: return .door
|
|
105
|
+
default: return .none
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import ARKit
|
|
2
|
+
import NitroModules
|
|
3
|
+
import simd
|
|
4
|
+
|
|
5
|
+
final class HybridARPlaneGeometry: HybridARPlaneGeometrySpec {
|
|
6
|
+
private let geometry: ARPlaneGeometry
|
|
7
|
+
|
|
8
|
+
init(geometry: ARPlaneGeometry) {
|
|
9
|
+
self.geometry = geometry
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
var vertices: [Double] {
|
|
13
|
+
var result: [Double] = []
|
|
14
|
+
result.reserveCapacity(geometry.vertices.count * 3)
|
|
15
|
+
for vertex in geometry.vertices {
|
|
16
|
+
result.append(Double(vertex.x))
|
|
17
|
+
result.append(Double(vertex.y))
|
|
18
|
+
result.append(Double(vertex.z))
|
|
19
|
+
}
|
|
20
|
+
return result
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var textureCoordinates: [Double] {
|
|
24
|
+
var result: [Double] = []
|
|
25
|
+
result.reserveCapacity(geometry.textureCoordinates.count * 2)
|
|
26
|
+
for coord in geometry.textureCoordinates {
|
|
27
|
+
result.append(Double(coord.x))
|
|
28
|
+
result.append(Double(coord.y))
|
|
29
|
+
}
|
|
30
|
+
return result
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var triangleIndices: [Double] {
|
|
34
|
+
geometry.triangleIndices.map { Double($0) }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var boundaryVertices: [Double] {
|
|
38
|
+
var result: [Double] = []
|
|
39
|
+
result.reserveCapacity(geometry.boundaryVertices.count * 2)
|
|
40
|
+
for vertex in geometry.boundaryVertices {
|
|
41
|
+
result.append(Double(vertex.x))
|
|
42
|
+
result.append(Double(vertex.z))
|
|
43
|
+
}
|
|
44
|
+
return result
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
final class HybridARPlaneAnchor: HybridARPlaneAnchorSpec {
|
|
49
|
+
private let anchor: ARPlaneAnchor
|
|
50
|
+
|
|
51
|
+
init(anchor: ARPlaneAnchor) {
|
|
52
|
+
self.anchor = anchor
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
var identifier: String {
|
|
56
|
+
anchor.identifier.uuidString
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var position: [Double] {
|
|
60
|
+
let t = anchor.transform
|
|
61
|
+
return [
|
|
62
|
+
Double(t.columns.3.x),
|
|
63
|
+
Double(t.columns.3.y),
|
|
64
|
+
Double(t.columns.3.z)
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
var rotation: [Double] {
|
|
69
|
+
let q = simd_quatf(anchor.transform)
|
|
70
|
+
return [
|
|
71
|
+
Double(q.vector.x),
|
|
72
|
+
Double(q.vector.y),
|
|
73
|
+
Double(q.vector.z),
|
|
74
|
+
Double(q.vector.w)
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
var alignment: PlaneAlignment {
|
|
79
|
+
switch anchor.alignment {
|
|
80
|
+
case .horizontal: return .horizontal
|
|
81
|
+
case .vertical: return .vertical
|
|
82
|
+
@unknown default: return .horizontal
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
var classification: PlaneClassification {
|
|
87
|
+
switch anchor.classification {
|
|
88
|
+
case .wall: return .wall
|
|
89
|
+
case .floor: return .floor
|
|
90
|
+
case .ceiling: return .ceiling
|
|
91
|
+
case .table: return .table
|
|
92
|
+
case .seat: return .seat
|
|
93
|
+
case .window: return .window
|
|
94
|
+
case .door: return .door
|
|
95
|
+
default: return .none
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
var extent: [Double] {
|
|
100
|
+
[Double(anchor.planeExtent.width), Double(anchor.planeExtent.height)]
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
var center: [Double] {
|
|
104
|
+
[
|
|
105
|
+
Double(anchor.center.x),
|
|
106
|
+
Double(anchor.center.y),
|
|
107
|
+
Double(anchor.center.z)
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
var geometry: HybridARPlaneGeometrySpec {
|
|
112
|
+
HybridARPlaneGeometry(geometry: anchor.geometry)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import ARKit
|
|
2
|
+
import NitroModules
|
|
3
|
+
import simd
|
|
4
|
+
|
|
5
|
+
final class HybridARRaycastResult: HybridARRaycastResultSpec {
|
|
6
|
+
let result: ARRaycastResult
|
|
7
|
+
|
|
8
|
+
init(result: ARRaycastResult) {
|
|
9
|
+
self.result = result
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
var position: [Double] {
|
|
13
|
+
let t = result.worldTransform
|
|
14
|
+
return [
|
|
15
|
+
Double(t.columns.3.x),
|
|
16
|
+
Double(t.columns.3.y),
|
|
17
|
+
Double(t.columns.3.z)
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
var rotation: [Double] {
|
|
22
|
+
let q = simd_quatf(result.worldTransform)
|
|
23
|
+
return [
|
|
24
|
+
Double(q.vector.x),
|
|
25
|
+
Double(q.vector.y),
|
|
26
|
+
Double(q.vector.z),
|
|
27
|
+
Double(q.vector.w)
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
var distance: Double {
|
|
32
|
+
// Calculate distance from camera (origin) to hit point
|
|
33
|
+
let pos = result.worldTransform.columns.3
|
|
34
|
+
return Double(sqrt(pos.x * pos.x + pos.y * pos.y + pos.z * pos.z))
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var target: RaycastTarget {
|
|
38
|
+
switch result.target {
|
|
39
|
+
case .existingPlaneGeometry:
|
|
40
|
+
return .existingplanegeometry
|
|
41
|
+
case .existingPlaneInfinite:
|
|
42
|
+
return .existingplaneinfinite
|
|
43
|
+
case .estimatedPlane:
|
|
44
|
+
return .estimatedplane
|
|
45
|
+
@unknown default:
|
|
46
|
+
return .any
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var anchorId: String? {
|
|
51
|
+
result.anchor?.identifier.uuidString
|
|
52
|
+
}
|
|
53
|
+
}
|