Initial commit for first version of project
This commit is contained in:
49
GasTankAR/Views/TankAR/PipeRoute.swift
Normal file
49
GasTankAR/Views/TankAR/PipeRoute.swift
Normal file
@ -0,0 +1,49 @@
|
||||
//
|
||||
// PipeRoute.swift
|
||||
// GasTankAR
|
||||
//
|
||||
// Created by Dennis Nemec on 28.08.26.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import simd
|
||||
|
||||
/// Eine Rohrführung als geordnete Folge von Wegpunkten (Welt-Koordinaten), die zu einem
|
||||
/// zusammenhängenden Pfad verbunden werden – visualisiert die geplante Rohrverlegung.
|
||||
struct PipeRoute {
|
||||
private(set) var waypoints: [SIMD3<Float>] = []
|
||||
|
||||
var count: Int { waypoints.count }
|
||||
|
||||
/// Gesamtlänge des Pfads über alle Segmente in Metern.
|
||||
var totalLength: Float {
|
||||
guard waypoints.count > 1 else { return 0 }
|
||||
return zip(waypoints, waypoints.dropFirst())
|
||||
.reduce(0) { $0 + simd_distance($1.0, $1.1) }
|
||||
}
|
||||
|
||||
var formattedLength: String {
|
||||
String(format: "%.2f m", totalLength)
|
||||
}
|
||||
|
||||
mutating func add(_ waypoint: SIMD3<Float>) {
|
||||
waypoints.append(waypoint)
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
mutating func removeLast() -> SIMD3<Float>? {
|
||||
waypoints.isEmpty ? nil : waypoints.removeLast()
|
||||
}
|
||||
|
||||
mutating func clear() {
|
||||
waypoints.removeAll()
|
||||
}
|
||||
}
|
||||
|
||||
/// Ablaufphasen beim Erstellen einer Rohrführung.
|
||||
enum PipeRoutingPhase: Equatable {
|
||||
/// Kein Rohr-Routing aktiv.
|
||||
case idle
|
||||
/// Wegpunkte werden gesetzt.
|
||||
case placing
|
||||
}
|
||||
Reference in New Issue
Block a user