replate-camera 0.1.4 → 0.1.6
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.
|
@@ -22,6 +22,9 @@ RCT_EXTERN_METHOD(getPhotosCount:(RCTPromiseResolveBlock*)resolve
|
|
|
22
22
|
RCT_EXTERN_METHOD(isScanComplete:(RCTPromiseResolveBlock*)resolve
|
|
23
23
|
rejecter:(RCTPromiseRejectBlock)reject)
|
|
24
24
|
|
|
25
|
+
RCT_EXTERN_METHOD(getRemainingAnglesToScan:(RCTPromiseResolveBlock*)resolve
|
|
26
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
27
|
+
|
|
25
28
|
+ (BOOL)requiresMainQueueSetup
|
|
26
29
|
{
|
|
27
30
|
return NO;
|
|
@@ -18,6 +18,30 @@ class ReplateCameraViewManager: RCTViewManager {
|
|
|
18
18
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
extension UIImage {
|
|
22
|
+
func rotate(radians: Float) -> UIImage {
|
|
23
|
+
var newSize = CGRect(origin: CGPoint.zero, size: self.size).applying(CGAffineTransform(rotationAngle: CGFloat(radians))).size
|
|
24
|
+
// Trim off the extremely small float value to prevent core graphics from rounding it up
|
|
25
|
+
newSize.width = floor(newSize.width)
|
|
26
|
+
newSize.height = floor(newSize.height)
|
|
27
|
+
|
|
28
|
+
UIGraphicsBeginImageContextWithOptions(newSize, false, self.scale)
|
|
29
|
+
let context = UIGraphicsGetCurrentContext()!
|
|
30
|
+
|
|
31
|
+
// Move origin to middle
|
|
32
|
+
context.translateBy(x: newSize.width/2, y: newSize.height/2)
|
|
33
|
+
// Rotate around middle
|
|
34
|
+
context.rotate(by: CGFloat(radians))
|
|
35
|
+
// Draw the image at its center
|
|
36
|
+
self.draw(in: CGRect(x: -self.size.width/2, y: -self.size.height/2, width: self.size.width, height: self.size.height))
|
|
37
|
+
|
|
38
|
+
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
|
|
39
|
+
UIGraphicsEndImageContext()
|
|
40
|
+
|
|
41
|
+
return newImage
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
21
45
|
class ReplateCameraView : UIView, ARSessionDelegate {
|
|
22
46
|
|
|
23
47
|
static var arView: ARView!
|
|
@@ -212,6 +236,11 @@ class ReplateCameraController: NSObject {
|
|
|
212
236
|
resolver(ReplateCameraView.photosFromDifferentAnglesTaken == 144)
|
|
213
237
|
}
|
|
214
238
|
|
|
239
|
+
@objc(getRemainingAnglesToScan:rejecter:)
|
|
240
|
+
func getRemainingAnglesToScan(_ resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) -> Void{
|
|
241
|
+
resolver(144 - ReplateCameraView.photosFromDifferentAnglesTaken)
|
|
242
|
+
}
|
|
243
|
+
|
|
215
244
|
@objc(takePhoto:rejecter:)
|
|
216
245
|
func takePhoto(_ resolver: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) -> Void {
|
|
217
246
|
|
|
@@ -220,6 +249,7 @@ class ReplateCameraController: NSObject {
|
|
|
220
249
|
rejecter("[ReplateCameraController]", "Error saving photo", NSError(domain: "ReplateCameraController", code: 001, userInfo: nil));
|
|
221
250
|
return
|
|
222
251
|
}
|
|
252
|
+
|
|
223
253
|
// Assuming you have two points
|
|
224
254
|
let point1 = SIMD3<Float>(anchorNode.position.x,
|
|
225
255
|
anchorNode.position.y,
|
|
@@ -243,7 +273,6 @@ class ReplateCameraController: NSObject {
|
|
|
243
273
|
|
|
244
274
|
let cameraPosition = SIMD3<Float>(cameraTransform.columns.3.x, cameraTransform.columns.3.y, cameraTransform.columns.3.z)
|
|
245
275
|
|
|
246
|
-
|
|
247
276
|
let directionToFirstPoint = normalize(point1 - cameraPosition)
|
|
248
277
|
let directionToSecondPoint = normalize(point2 - cameraPosition)
|
|
249
278
|
|
|
@@ -262,6 +291,8 @@ class ReplateCameraController: NSObject {
|
|
|
262
291
|
print("Is pointing at second point: \(isPointingAtSecondPoint)")
|
|
263
292
|
} else {
|
|
264
293
|
print("Camera transform data not available")
|
|
294
|
+
rejecter("[ReplateCameraController]", "Camera transform data not available", NSError(domain: "ReplateCameraController", code: 003, userInfo: nil))
|
|
295
|
+
return
|
|
265
296
|
}
|
|
266
297
|
|
|
267
298
|
print("Take photo")
|
|
@@ -270,7 +301,9 @@ class ReplateCameraController: NSObject {
|
|
|
270
301
|
let ciimg = CIImage(cvImageBuffer: image)
|
|
271
302
|
let ciImage = ciimg
|
|
272
303
|
let cgImage = ReplateCameraController.cgImage(from: ciImage)!
|
|
273
|
-
let
|
|
304
|
+
let uiImage = UIImage(cgImage: cgImage)
|
|
305
|
+
let finImage = uiImage.rotate(radians: .pi/2) // Adjust radians as needed
|
|
306
|
+
|
|
274
307
|
print("Saving photo")
|
|
275
308
|
if let url = ReplateCameraController.saveImageAsJPEG(finImage) {
|
|
276
309
|
resolver(url.absoluteString)
|
|
@@ -279,6 +312,9 @@ class ReplateCameraController: NSObject {
|
|
|
279
312
|
return
|
|
280
313
|
}
|
|
281
314
|
}
|
|
315
|
+
}else{
|
|
316
|
+
rejecter("[ReplateCameraController]", "Object not in focus", NSError(domain: "ReplateCameraController", code: 002, userInfo: nil))
|
|
317
|
+
return
|
|
282
318
|
}
|
|
283
319
|
|
|
284
320
|
print("Error saving photo")
|
|
@@ -289,9 +325,12 @@ class ReplateCameraController: NSObject {
|
|
|
289
325
|
|
|
290
326
|
static func cgImage(from ciImage: CIImage) -> CGImage? {
|
|
291
327
|
let context = CIContext(options: nil)
|
|
328
|
+
|
|
292
329
|
return context.createCGImage(ciImage, from: ciImage.extent)
|
|
293
330
|
}
|
|
294
331
|
|
|
332
|
+
|
|
333
|
+
|
|
295
334
|
static func saveImageAsJPEG(_ image: UIImage) -> URL? {
|
|
296
335
|
// Convert UIImage to Data with JPEG representation
|
|
297
336
|
guard let imageData = image.jpegData(compressionQuality: 1.0) else {
|
|
@@ -300,6 +339,8 @@ class ReplateCameraController: NSObject {
|
|
|
300
339
|
return nil
|
|
301
340
|
}
|
|
302
341
|
|
|
342
|
+
// UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
|
|
343
|
+
|
|
303
344
|
// Get the temporary directory URL
|
|
304
345
|
let temporaryDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
|
|
305
346
|
|