Initial commit for first version of project
This commit is contained in:
56
GasTankAR/Views/TankAR/ReferenceImageProvider.swift
Normal file
56
GasTankAR/Views/TankAR/ReferenceImageProvider.swift
Normal file
@ -0,0 +1,56 @@
|
||||
//
|
||||
// ReferenceImageProvider.swift
|
||||
// GasTankAR
|
||||
//
|
||||
// Created by Dennis Nemec on 26.08.26.
|
||||
//
|
||||
|
||||
import ARKit
|
||||
import UIKit
|
||||
|
||||
/// Liefert die Referenzbilder für die Anker-Erkennung. Bevorzugt die AR-Ressourcengruppe
|
||||
/// „ARMarkers"; fällt sonst auf einen programmatisch erzeugten Platzhalter-Marker zurück.
|
||||
enum ReferenceImageProvider {
|
||||
static func load() -> Set<ARReferenceImage> {
|
||||
if let group = ARReferenceImage.referenceImages(inGroupNamed: "ARMarkers", bundle: .main) {
|
||||
return group
|
||||
}
|
||||
if let placeholder = makePlaceholder() {
|
||||
return [placeholder]
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
private static func makePlaceholder() -> ARReferenceImage? {
|
||||
let size = CGSize(width: 512, height: 512)
|
||||
let renderer = UIGraphicsImageRenderer(size: size)
|
||||
let image = renderer.image { context in
|
||||
let cg = context.cgContext
|
||||
UIColor.white.setFill()
|
||||
cg.fill(CGRect(origin: .zero, size: size))
|
||||
|
||||
let palette: [UIColor] = [.black, .systemBlue, .systemRed, .systemGreen, .systemOrange, .systemPurple]
|
||||
let cells = 8
|
||||
let cellSize = size.width / CGFloat(cells)
|
||||
for row in 0..<cells {
|
||||
for column in 0..<cells {
|
||||
let index = (row * cells + column) % palette.count
|
||||
palette[index].setFill()
|
||||
let rect = CGRect(
|
||||
x: CGFloat(column) * cellSize,
|
||||
y: CGFloat(row) * cellSize,
|
||||
width: cellSize,
|
||||
height: cellSize
|
||||
)
|
||||
if (row + column).isMultiple(of: 2) {
|
||||
cg.fillEllipse(in: rect.insetBy(dx: 4, dy: 4))
|
||||
} else {
|
||||
cg.fill(rect.insetBy(dx: 6, dy: 6))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
guard let cgImage = image.cgImage else { return nil }
|
||||
return ARReferenceImage(cgImage, orientation: .up, physicalWidth: 0.15)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user