From 2f5a8bfb237b4806c2f8eddfcdf95414886627e3 Mon Sep 17 00:00:00 2001 From: Hal Mueller Date: Tue, 3 Dec 2019 21:32:57 -0800 Subject: [PATCH] first commit of Jazzy docs --- .jazzy.yaml | 13 + docs/Classes.html | 432 +++ docs/Classes/AnnotationNode.html | 320 +++ docs/Classes/LocationAnnotationNode.html | 382 +++ docs/Classes/LocationManager.html | 466 ++++ docs/Classes/LocationNode.html | 618 +++++ docs/Classes/PolylineNode.html | 405 +++ docs/Classes/SceneLocationEstimate.html | 323 +++ docs/Classes/SceneLocationManager.html | 629 +++++ docs/Classes/SceneLocationView.html | 2336 +++++++++++++++++ .../SceneLocationView/ARTrackingType.html | 247 ++ docs/Enums.html | 250 ++ docs/Enums/LocationEstimateMethod.html | 240 ++ docs/Enums/ScalingScheme.html | 359 +++ docs/Extensions.html | 479 ++++ docs/Extensions/CGPoint.html | 237 ++ docs/Extensions/CLLocation.html | 375 +++ docs/Extensions/CLLocationCoordinate2D.html | 269 ++ docs/Extensions/Double.html | 210 ++ docs/Extensions/Float.html | 210 ++ docs/Extensions/FloatingPoint.html | 237 ++ docs/Extensions/Int.html | 237 ++ docs/Extensions/SCNNode.html | 240 ++ docs/Extensions/SCNVector3.html | 211 ++ docs/Extensions/UIView.html | 210 ++ docs/Protocols.html | 355 +++ docs/Protocols/LNTouchDelegate.html | 238 ++ docs/Protocols/LocationManagerDelegate.html | 254 ++ .../SceneLocationManagerDelegate.html | 319 +++ docs/Protocols/SceneLocationViewDelegate.html | 354 +++ .../SceneLocationViewEstimateDelegate.html | 254 ++ docs/Protocols/SceneTrackingDelegate.html | 293 +++ docs/Structs.html | 270 ++ docs/Structs/ARKit_CoreLocation.html | 211 ++ docs/Structs/AttributedType.html | 265 ++ docs/Structs/LocationTranslation.html | 293 +++ docs/Typealiases.html | 206 ++ docs/badge.svg | 28 + docs/css/highlight.css | 200 ++ docs/css/jazzy.css | 348 +++ docs/docsets/ARCL.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Classes.html | 432 +++ .../Documents/Classes/AnnotationNode.html | 320 +++ .../Classes/LocationAnnotationNode.html | 382 +++ .../Documents/Classes/LocationManager.html | 466 ++++ .../Documents/Classes/LocationNode.html | 618 +++++ .../Documents/Classes/PolylineNode.html | 405 +++ .../Classes/SceneLocationEstimate.html | 323 +++ .../Classes/SceneLocationManager.html | 629 +++++ .../Documents/Classes/SceneLocationView.html | 2336 +++++++++++++++++ .../SceneLocationView/ARTrackingType.html | 247 ++ .../Contents/Resources/Documents/Enums.html | 250 ++ .../Enums/LocationEstimateMethod.html | 240 ++ .../Documents/Enums/ScalingScheme.html | 359 +++ .../Resources/Documents/Extensions.html | 479 ++++ .../Documents/Extensions/CGPoint.html | 237 ++ .../Documents/Extensions/CLLocation.html | 375 +++ .../Extensions/CLLocationCoordinate2D.html | 269 ++ .../Documents/Extensions/Double.html | 210 ++ .../Resources/Documents/Extensions/Float.html | 210 ++ .../Documents/Extensions/FloatingPoint.html | 237 ++ .../Resources/Documents/Extensions/Int.html | 237 ++ .../Documents/Extensions/SCNNode.html | 240 ++ .../Documents/Extensions/SCNVector3.html | 211 ++ .../Documents/Extensions/UIView.html | 210 ++ .../Resources/Documents/Protocols.html | 355 +++ .../Documents/Protocols/LNTouchDelegate.html | 238 ++ .../Protocols/LocationManagerDelegate.html | 254 ++ .../SceneLocationManagerDelegate.html | 319 +++ .../Protocols/SceneLocationViewDelegate.html | 354 +++ .../SceneLocationViewEstimateDelegate.html | 254 ++ .../Protocols/SceneTrackingDelegate.html | 293 +++ .../Contents/Resources/Documents/Structs.html | 270 ++ .../Documents/Structs/ARKit_CoreLocation.html | 211 ++ .../Documents/Structs/AttributedType.html | 265 ++ .../Structs/LocationTranslation.html | 293 +++ .../Resources/Documents/Typealiases.html | 206 ++ .../Resources/Documents/css/highlight.css | 200 ++ .../Resources/Documents/css/jazzy.css | 348 +++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Contents/Resources/Documents/index.html | 408 +++ .../Contents/Resources/Documents/js/jazzy.js | 59 + .../Resources/Documents/js/jquery.min.js | 2 + .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 81920 bytes docs/docsets/ARCL.tgz | Bin 0 -> 96321 bytes docs/img/carat.png | Bin 0 -> 274 bytes docs/img/dash.png | Bin 0 -> 1338 bytes docs/img/gh.png | Bin 0 -> 1571 bytes docs/index.html | 408 +++ docs/js/jazzy.js | 59 + docs/js/jquery.min.js | 2 + docs/search.json | 1 + docs/undocumented.json | 1132 ++++++++ 96 files changed, 29697 insertions(+) create mode 100644 .jazzy.yaml create mode 100644 docs/Classes.html create mode 100644 docs/Classes/AnnotationNode.html create mode 100644 docs/Classes/LocationAnnotationNode.html create mode 100644 docs/Classes/LocationManager.html create mode 100644 docs/Classes/LocationNode.html create mode 100644 docs/Classes/PolylineNode.html create mode 100644 docs/Classes/SceneLocationEstimate.html create mode 100644 docs/Classes/SceneLocationManager.html create mode 100644 docs/Classes/SceneLocationView.html create mode 100644 docs/Classes/SceneLocationView/ARTrackingType.html create mode 100644 docs/Enums.html create mode 100644 docs/Enums/LocationEstimateMethod.html create mode 100644 docs/Enums/ScalingScheme.html create mode 100644 docs/Extensions.html create mode 100644 docs/Extensions/CGPoint.html create mode 100644 docs/Extensions/CLLocation.html create mode 100644 docs/Extensions/CLLocationCoordinate2D.html create mode 100644 docs/Extensions/Double.html create mode 100644 docs/Extensions/Float.html create mode 100644 docs/Extensions/FloatingPoint.html create mode 100644 docs/Extensions/Int.html create mode 100644 docs/Extensions/SCNNode.html create mode 100644 docs/Extensions/SCNVector3.html create mode 100644 docs/Extensions/UIView.html create mode 100644 docs/Protocols.html create mode 100644 docs/Protocols/LNTouchDelegate.html create mode 100644 docs/Protocols/LocationManagerDelegate.html create mode 100644 docs/Protocols/SceneLocationManagerDelegate.html create mode 100644 docs/Protocols/SceneLocationViewDelegate.html create mode 100644 docs/Protocols/SceneLocationViewEstimateDelegate.html create mode 100644 docs/Protocols/SceneTrackingDelegate.html create mode 100644 docs/Structs.html create mode 100644 docs/Structs/ARKit_CoreLocation.html create mode 100644 docs/Structs/AttributedType.html create mode 100644 docs/Structs/LocationTranslation.html create mode 100644 docs/Typealiases.html create mode 100644 docs/badge.svg create mode 100644 docs/css/highlight.css create mode 100644 docs/css/jazzy.css create mode 100644 docs/docsets/ARCL.docset/Contents/Info.plist create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/AnnotationNode.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationAnnotationNode.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationManager.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationNode.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/PolylineNode.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationEstimate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationManager.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView/ARTrackingType.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/LocationEstimateMethod.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/ScalingScheme.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CGPoint.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocation.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocationCoordinate2D.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Double.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Float.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Int.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNNode.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNVector3.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/UIView.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LNTouchDelegate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LocationManagerDelegate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationManagerDelegate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewDelegate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewEstimateDelegate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneTrackingDelegate.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/ARKit_CoreLocation.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/AttributedType.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/LocationTranslation.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/Typealiases.html create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docs/docsets/ARCL.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docs/docsets/ARCL.docset/Contents/Resources/Documents/img/dash.png create mode 100755 docs/docsets/ARCL.docset/Contents/Resources/Documents/img/gh.png create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/index.html create mode 100755 docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/Documents/search.json create mode 100644 docs/docsets/ARCL.docset/Contents/Resources/docSet.dsidx create mode 100644 docs/docsets/ARCL.tgz create mode 100755 docs/img/carat.png create mode 100755 docs/img/dash.png create mode 100755 docs/img/gh.png create mode 100644 docs/index.html create mode 100755 docs/js/jazzy.js create mode 100644 docs/js/jquery.min.js create mode 100644 docs/search.json create mode 100644 docs/undocumented.json diff --git a/.jazzy.yaml b/.jazzy.yaml new file mode 100644 index 00000000..b6a9000d --- /dev/null +++ b/.jazzy.yaml @@ -0,0 +1,13 @@ +clean: true +output: docs +min_acl: internal + +author: ProjectDent contributors +author_url: https://github.com/ProjectDent/ARKit-CoreLocation/graphs/contributors + +module: ARCL +github_url: https://github.com/ProjectDent/ARKit-CoreLocation + +readme: readme.md + +podspec: ARCL.podspec diff --git a/docs/Classes.html b/docs/Classes.html new file mode 100644 index 00000000..79fb4817 --- /dev/null +++ b/docs/Classes.html @@ -0,0 +1,432 @@ + + + + Classes Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
    +
  • +
    + + + + LocationManager + +
    +
    +
    +
    +
    +
    +

    Handles retrieving the location and heading from CoreLocation +Does not contain anything related to ARKit or advanced location

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class LocationManager : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SceneLocationEstimate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class SceneLocationEstimate
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SceneLocationManager + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class SceneLocationManager
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + AnnotationNode + +
    +
    +
    +
    +
    +
    +

    This node type enables the client to have access to the view or image that +was used to initialize the LocationAnnotationNode.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class AnnotationNode : SCNNode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LocationNode + +
    +
    +
    +
    +
    +
    +

    A location node can be added to a scene using a coordinate.

    + +

    Its scale and position should not be adjusted, as these are used for scene +layout purposes. To adjust the scale and position of items within a node, +you can add them to a child node and adjust them there

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class LocationNode : SCNNode
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + PolylineNode + +
    +
    +
    +
    +
    +
    +

    A Node that is used to show directions in AR-CL.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class PolylineNode : LocationNode
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SceneLocationView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class SceneLocationView : ARSCNView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/AnnotationNode.html b/docs/Classes/AnnotationNode.html new file mode 100644 index 00000000..d3179059 --- /dev/null +++ b/docs/Classes/AnnotationNode.html @@ -0,0 +1,320 @@ + + + + AnnotationNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

AnnotationNode

+
+
+
open class AnnotationNode : SCNNode
+ +
+
+

This node type enables the client to have access to the view or image that +was used to initialize the LocationAnnotationNode.

+ +
+
+
+
    +
  • +
    + + + + view + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var view: UIView?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var image: UIImage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layer + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layer: CALayer?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(view: UIView?, image: UIImage?, layer: CALayer? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/LocationAnnotationNode.html b/docs/Classes/LocationAnnotationNode.html new file mode 100644 index 00000000..b231e48c --- /dev/null +++ b/docs/Classes/LocationAnnotationNode.html @@ -0,0 +1,382 @@ + + + + LocationAnnotationNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationAnnotationNode

+
+
+
open class LocationAnnotationNode : LocationNode
+ +
+
+

A LocationNode which has an attached AnnotationNode.

+ +
+
+
+
    +
  • +
    + + + + annotationNode + +
    +
    +
    +
    +
    +
    +

    Subnodes and adjustments should be applied to this subnode +Required to allow scaling at the same time as having a 2D ‘billboard’ appearance

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let annotationNode: AnnotationNode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Parameter to raise or lower the label’s rendering position relative to the node’s actual project location. +The default value of 1.1 places the label at a pleasing height above the node. +To draw the label exactly on the true location, use a value of 0. To draw it below the true location, +use a negative value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var annotationHeightAdjustmentFactor: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:image:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(location: CLLocation?, image: UIImage)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:view:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(location: CLLocation?, view: UIView)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:layer:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(location: CLLocation?, layer: CALayer)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Note: we repeat code from LocationNode‘s implementation of this function. Is this because of the use of SCNTransaction +to wrap the changes? It’s legal to nest the calls, should consider this if any more changes to +LocationNode’s implementation are needed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override func updatePositionAndScale(setup: Bool = false, scenePosition: SCNVector3?,
    +                                     locationNodeLocation nodeLocation: CLLocation,
    +                                     locationManager: SceneLocationManager,
    +                                     onCompletion: (() -> Void))
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/LocationManager.html b/docs/Classes/LocationManager.html new file mode 100644 index 00000000..24e07bd2 --- /dev/null +++ b/docs/Classes/LocationManager.html @@ -0,0 +1,466 @@ + + + + LocationManager Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationManager

+
+
+
public class LocationManager : NSObject
+ +
+
+

Handles retrieving the location and heading from CoreLocation +Does not contain anything related to ARKit or advanced location

+ +
+
+
+
    +
  • +
    + + + + delegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    weak var delegate: LocationManagerDelegate?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currentLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var currentLocation: CLLocation?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + heading + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    private(set) public var heading: CLLocationDirection?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + headingAccuracy + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    private(set) public var headingAccuracy: CLLocationDirection?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override init()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func requestAuthorization()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/LocationNode.html b/docs/Classes/LocationNode.html new file mode 100644 index 00000000..8ee3d16a --- /dev/null +++ b/docs/Classes/LocationNode.html @@ -0,0 +1,618 @@ + + + + LocationNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationNode

+
+
+
open class LocationNode : SCNNode
+ +
+
+

A location node can be added to a scene using a coordinate.

+ +

Its scale and position should not be adjusted, as these are used for scene +layout purposes. To adjust the scale and position of items within a node, +you can add them to a child node and adjust them there

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    This seems like it should be a bug? Why is it hardcoded? Why would it ever be different from the scene’s setting?

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var locationEstimateMethod: LocationEstimateMethod
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + location + +
    +
    +
    +
    +
    +
    +

    Location can be changed and confirmed later by SceneLocationView.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var location: CLLocation!
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tag + +
    +
    +
    +
    +
    +
    +

    A general purpose tag that can be used to find nodes already added to a SceneLocationView

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tag: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationConfirmed + +
    +
    +
    +
    +
    +
    +

    Whether the location of the node has been confirmed. +This is automatically set to true when you create a node using a location. +Otherwise, this is false, and becomes true once the user moves 100m away from the node, +except when the locationEstimateMethod is set to use Core Location data only, +as then it becomes true immediately.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locationConfirmed: Bool { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Whether a node’s position should be adjusted on an ongoing basis +based on its given location. +This only occurs when a node’s location is within 100m of the user. +Adjustment doesn’t apply to nodes without a confirmed location. +When this is set to false, the result is a smoother appearance. +When this is set to true, this means a node may appear to jump around +as the user’s location estimates update, +but the position is generally more accurate. +Defaults to true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var continuallyAdjustNodePositionWhenWithinRange: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Whether a node’s position and scale should be updated automatically on a continual basis. +This should only be set to false if you plan to manually update position and scale +at regular intervals. You can do this with SceneLocationView‘s updatePositionOfLocationNode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var continuallyUpdatePositionAndScale: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Whether the node should be scaled relative to its distance from the camera +Default value (false) scales it to visually appear at the same size no matter the distance +Setting to true causes annotation nodes to scale like a regular node +Scaling relative to distance may be useful with local navigation-based uses +For landmarks in the distance, the default is correct

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var scaleRelativeToDistance: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ignoreAltitude + +
    +
    +
    +
    +
    +
    +

    Whether the node should appear at the same altitude of the user +May be useful when you don’t know the real altitude of the node +When set to true, the node will stay at the same altitude of the user

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ignoreAltitude: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scalingScheme + +
    +
    +
    +
    +
    +
    +

    The scheme to use for scaling

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var scalingScheme: ScalingScheme
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:tag:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(location: CLLocation?, tag: String? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + location(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    internal func location(_ bestLocationEstimate: SceneLocationEstimate?) -> CLLocation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    internal func adjustedDistance(setup: Bool, position: SCNVector3, locationNodeLocation: CLLocation,
    +                               locationManager: SceneLocationManager) -> CLLocationDistance
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    See LocationAnnotationNode‘s override of this function. Because it doesn’t invoke super’s version, any changes +made in this file must be repeated in LocationAnnotationNode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func updatePositionAndScale(setup: Bool = false, scenePosition: SCNVector3?, locationNodeLocation nodeLocation: CLLocation,
    +                            locationManager: SceneLocationManager, onCompletion: (() -> Void))
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Converts distance from meters to SCNKit rendering order +Constant multiplier eliminates flicker caused by slight distance variations +Nodes with greater rendering orders are rendered last

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func renderingOrder(fromDistance distance: CLLocationDistance) -> Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/PolylineNode.html b/docs/Classes/PolylineNode.html new file mode 100644 index 00000000..f0451c7c --- /dev/null +++ b/docs/Classes/PolylineNode.html @@ -0,0 +1,405 @@ + + + + PolylineNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

PolylineNode

+
+
+
public class PolylineNode : LocationNode
+ +
+
+

A Node that is used to show directions in AR-CL.

+ +
+
+
+
    +
  • +
    + + + + locationNodes + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var locationNodes: [LocationNode]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + polyline + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let polyline: MKPolyline
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + altitude + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let altitude: CLLocationDistance
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + boxBuilder + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let boxBuilder: BoxBuilder
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a PolylineNode from the provided polyline, altitude (which is assumed to be uniform +for all of the points) and an optional SCNBox to use as a prototype for the location boxes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(polyline: MKPolyline,
    +            altitude: CLLocationDistance,
    +            tag: String? = nil,
    +            boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + polyline + + +
    +

    The polyline that we’ll be creating location nodes for.

    +
    +
    + + altitude + + +
    +

    The uniform altitude to use to show the location nodes.

    +
    +
    + + tag + + +
    +

    a String attribute to identify the node in the scene (e.g when it’s touched)

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/SceneLocationEstimate.html b/docs/Classes/SceneLocationEstimate.html new file mode 100644 index 00000000..eff739c4 --- /dev/null +++ b/docs/Classes/SceneLocationEstimate.html @@ -0,0 +1,323 @@ + + + + SceneLocationEstimate Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationEstimate

+
+
+
public class SceneLocationEstimate
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + location + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let location: CLLocation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + position + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let position: SCNVector3
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init(location: CLLocation, position: SCNVector3)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Compares the location’s position to another position, to determine the translation between them

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationTranslation(to position: SCNVector3) -> LocationTranslation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Translates the location by comparing with a given position

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func translatedLocation(to position: SCNVector3) -> CLLocation
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Classes/SceneLocationManager.html b/docs/Classes/SceneLocationManager.html new file mode 100644 index 00000000..e16184e7 --- /dev/null +++ b/docs/Classes/SceneLocationManager.html @@ -0,0 +1,629 @@ + + + + SceneLocationManager Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationManager

+
+
+
public final class SceneLocationManager
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + sceneLocationDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    weak var sceneLocationDelegate: SceneLocationManagerDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locationEstimateMethod: LocationEstimateMethod
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationManager + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let locationManager: LocationManager
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var sceneLocationEstimates: [SceneLocationEstimate]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updateEstimatesTimer + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var updateEstimatesTimer: Timer?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bestLocationEstimate + +
    +
    +
    +
    +
    +
    +

    The best estimation of location that has been taken +This takes into account horizontal accuracy, and the time at which the estimation was taken +favouring the most accurate, and then the most recent result. +This doesn’t indicate where the user currently is.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bestLocationEstimate: SceneLocationEstimate? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currentLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentLocation: CLLocation? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + deinit + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    deinit
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updateLocationData() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +func updateLocationData()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds a scene location estimate based on current time, camera position and location from location manager

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addSceneLocationEstimate(location: CLLocation)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeOldLocationEstimates()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeOldLocationEstimates(currentScenePosition: SCNVector3)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func run()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pause() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func pause()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Classes/SceneLocationView.html b/docs/Classes/SceneLocationView.html new file mode 100644 index 00000000..d31b0527 --- /dev/null +++ b/docs/Classes/SceneLocationView.html @@ -0,0 +1,2336 @@ + + + + SceneLocationView Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationView

+
+
+
open class SceneLocationView : ARSCNView
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + sceneLimit + +
    +
    +
    +
    +
    +
    +

    The limit to the scene, in terms of what data is considered reasonably accurate. +Measured in meters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let sceneLimit: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ARTrackingType + +
    +
    +
    +
    +
    +
    +

    The type of tracking to use.

    + +
      +
    • orientationTracking: Informs the SceneLocationView to use Device Orientation tracking only. +Useful when your nodes are all CLLocation based, and are not synced to real world planes +See Apple’s documentation
    • +
    • worldTracking: Informs the SceneLocationView to use a World Tracking Configuration. +Useful when you have nodes that attach themselves to real world planes +See Apple’s documentation
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ARTrackingType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationViewDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var locationViewDelegate: SceneLocationViewDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var locationEstimateDelegate: SceneLocationViewEstimateDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var locationNodeTouchDelegate: LNTouchDelegate?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sceneTrackingDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var sceneTrackingDelegate: SceneTrackingDelegate?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sceneLocationManager + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sceneLocationManager: SceneLocationManager
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delegate + +
    +
    +
    +
    +
    +
    +

    Addresses Issue #196 - +Delegate issue when assigned to self (no location nodes render). If the user +tries to set the delegate, perform an assertionFailure and tell them to set the arViewDelegate instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open override var delegate: ARSCNViewDelegate? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + arViewDelegate + +
    +
    +
    +
    +
    +
    +

    If you wish to receive delegate ARSCNViewDelegate events, use this instead of the delegate property. +The delegate property is reserved for this class itself and trying to set it will result in an assertionFailure +and in production, things just won’t work as you expect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var arViewDelegate: ARSCNViewDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The method to use for determining locations. +Not advisable to change this as the scene is ongoing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locationEstimateMethod: LocationEstimateMethod { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + showAxesNode + +
    +
    +
    +
    +
    +
    +

    When set to true, displays an axes node at the start of the scene

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showAxesNode: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sceneNode + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var sceneNode: SCNNode? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + orientToTrueNorth + +
    +
    +
    +
    +
    +
    +

    Only to be overrided if you plan on manually setting True North. +When true, sets up the scene to face what the device considers to be True North. +This can be inaccurate, hence the option to override it. +The functions for altering True North can be used irrespective of this value, +but if the scene is oriented to true north, it will update without warning, +thus affecting your alterations. +The initial value of this property is respected.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var orientToTrueNorth: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + showFeaturePoints + +
    +
    +
    +
    +
    +
    +

    Whether debugging feature points should be displayed. +Defaults to false

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showFeaturePoints: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + currentScenePosition + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentScenePosition: SCNVector3? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currentEulerAngles + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentEulerAngles: SCNVector3? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationNodes + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var locationNodes: [LocationNode]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + polylineNodes + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var polylineNodes: [PolylineNode]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + arTrackingType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var arTrackingType: SceneLocationView.ARTrackingType
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    internal var didFetchInitialLocation: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + + +

Setup

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    This initializer allows you to specify the type of tracking configuration (defaults to world tracking) as well as +some other optional values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(trackingType: ARTrackingType = .worldTracking, frame: CGRect = .zero, options: [String : Any]? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + trackingType + + +
    +

    The type of AR Tracking configuration (defaults to world tracking).

    +
    +
    + + frame + + +
    +

    The CGRect for the frame (defaults to .zero).

    +
    +
    + + options + + +
    +

    The rendering options for the SCNView.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(frame:options:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override init(frame: CGRect, options: [String : Any]? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + resetSceneHeading() + +
    +
    +
    +
    +
    +
    +

    Resets the scene heading to 0

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func resetSceneHeading()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func confirmLocationOfLocationNode(_ locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Gives the best estimate of the location of a node

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationOfLocationNode(_ locationNode: LocationNode) -> CLLocation
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + renderer(_:nodeFor:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, willUpdate node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didRemove node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func session(_ session: ARSession, didFailWithError error: Error)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sessionWasInterrupted(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sessionInterruptionEnded(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sessionShouldAttemptRelocalization(_ session: ARSession) -> Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func session(_ session: ARSession, didOutputAudioSampleBuffer audioSampleBuffer: CMSampleBuffer)
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didApplyAnimationsAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didApplyConstraintsAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func run()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pause() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func pause()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    iOS can be inaccurate when setting true north +The scene is oriented to true north, and will update its heading when it gets a more accurate reading +You can disable this through setting the +These functions provide manual overriding of the scene heading, +if you have a more precise idea of where True North is +The goal is for the True North orientation problems to be resolved +At which point these functions would no longer be useful +Moves the scene heading clockwise by 1 degree +Intended for correctional purposes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moveSceneHeadingClockwise()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Moves the scene heading anti-clockwise by 1 degree +Intended for correctional purposes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moveSceneHeadingAntiClockwise()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Upon being added, a node’s location, locationConfirmed and position may be modified and should not be changed externally. +Silently fails and returns without adding the node to the scene if any of currentScenePosition, +sceneLocationManager.currentLocation, or sceneNode is nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodeForCurrentPosition(locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Each node’s addition to the scene can silently fail; See addLocationNodeForCurrentPosition(locationNode:).

    + +

    Why would we want to add multiple nodes at the current position?

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodesForCurrentPosition(locationNodes: [LocationNode])
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Silently fails and returns without adding the node unlesslocation is not nil and locationConfirmed is true. +Upon being added, a node’s position will be modified internally and should not be changed externally. +location will not be modified, but taken as accurate.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodeWithConfirmedLocation(locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +func sceneLocationViewTouched(sender: UITapGestureRecognizer)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Each node’s addition to the scene can silently fail; See addLocationNodeWithConfirmedLocation(locationNode:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodesWithConfirmedLocation(locationNodes: [LocationNode])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + removeAllNodes() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeAllNodes()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determine if scene contains a node with the specified tag

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sceneContainsNodeWithTag(_ tag: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + tag + + +
    +

    tag text

    +
    +
    +
    +
    +

    Return Value

    +

    true if a LocationNode with the tag exists; false otherwise

    +
    +
    +
    +
  • +
  • +
    + + + + findNodes(tagged:) + +
    +
    +
    +
    +
    +
    +

    Find all location nodes in the scene tagged with tag

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func findNodes(tagged tag: String) -> [LocationNode]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + tag + + +
    +

    The tag text for which to search nodes.

    +
    +
    +
    +
    +

    Return Value

    +

    A list of all matching tags

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeLocationNode(locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeLocationNodes(locationNodes: [LocationNode])
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Adds routes to the scene and lets you specify the geometry prototype for the box. +Note: You can provide your own SCNBox prototype to base the direction nodes from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addRoutes(routes: [MKRoute], boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + routes + + +
    +

    The MKRoute of directions

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds polylines to the scene and lets you specify the geometry prototype for the box. +Note: You can provide your own SCNBox prototype to base the direction nodes from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addRoutes(polylines: [AttributedType<MKPolyline>],
    +               Δaltitude: CLLocationDistance = -2.0,
    +               boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + polylines + + +
    +

    The list of attributed MKPolyline to rendered

    +
    +
    + + Δaltitude + + +
    +

    difference between box and current user altitude

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + removeRoutes(routes:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeRoutes(routes: [MKRoute])
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Adds polylines to the scene and lets you specify the geometry prototype for the box. +Note: You can provide your own SCNBox prototype to base the direction nodes from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addPolylines(polylines: [MKPolyline], boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + polylines + + +
    +

    A set of MKPolyline.

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removePolylines(polylines: [MKPolyline])
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Classes/SceneLocationView/ARTrackingType.html b/docs/Classes/SceneLocationView/ARTrackingType.html new file mode 100644 index 00000000..34273110 --- /dev/null +++ b/docs/Classes/SceneLocationView/ARTrackingType.html @@ -0,0 +1,247 @@ + + + + ARTrackingType Enumeration Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

ARTrackingType

+
+
+
public enum ARTrackingType
+ +
+
+

The type of tracking to use.

+ +
    +
  • orientationTracking: Informs the SceneLocationView to use Device Orientation tracking only. +Useful when your nodes are all CLLocation based, and are not synced to real world planes +See Apple’s documentation
  • +
  • worldTracking: Informs the SceneLocationView to use a World Tracking Configuration. +Useful when you have nodes that attach themselves to real world planes +See Apple’s documentation
  • +
+ +
+
+
+
    +
  • +
    + + + + orientationTracking + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case orientationTracking
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + worldTracking + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case worldTracking
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Enums.html b/docs/Enums.html new file mode 100644 index 00000000..268e7e60 --- /dev/null +++ b/docs/Enums.html @@ -0,0 +1,250 @@ + + + + Enumerations Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Different methods which can be used when determining locations (such as the user’s location).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LocationEstimateMethod
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ScalingScheme + +
    +
    +
    +
    +
    +
    +

    A set of schemes that can be used to scale a LocationNode.

    + +

    Values:

    + +
      +
    • normal: The default way of scaling, Hardcoded value out to 3000 meters, and then 0.75 that factor beyond 3000 m.
    • +
    • tiered (threshold, scale): Return 1.0 at distance up to threshold meters, or scale beyond.
    • +
    • doubleTiered (firstThreshold, firstCale, secondThreshold, secondScale): A way of scaling everything +beyond 2 specific distances at two specific scales.
    • +
    • linear (threshold): linearly scales an object based on its distance.
    • +
    • linearBuffer (threshold, buffer): linearly scales an object based on its distance as long as it is +further than the buffer distance, otherwise it just returns 100% scale.
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ScalingScheme
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Enums/LocationEstimateMethod.html b/docs/Enums/LocationEstimateMethod.html new file mode 100644 index 00000000..5e7bc8e7 --- /dev/null +++ b/docs/Enums/LocationEstimateMethod.html @@ -0,0 +1,240 @@ + + + + LocationEstimateMethod Enumeration Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationEstimateMethod

+
+
+
public enum LocationEstimateMethod
+ +
+
+

Different methods which can be used when determining locations (such as the user’s location).

+ +
+
+
+
    +
  • +
    + + + + coreLocationDataOnly + +
    +
    +
    +
    +
    +
    +

    Only uses Core Location data. +Not suitable for adding nodes using current position, which requires more precision.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case coreLocationDataOnly
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mostRelevantEstimate + +
    +
    +
    +
    +
    +
    +

    Combines knowledge about movement through the AR world with +the most relevant Core Location estimate (based on accuracy and time).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mostRelevantEstimate
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Enums/ScalingScheme.html b/docs/Enums/ScalingScheme.html new file mode 100644 index 00000000..473d0ebd --- /dev/null +++ b/docs/Enums/ScalingScheme.html @@ -0,0 +1,359 @@ + + + + ScalingScheme Enumeration Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

ScalingScheme

+
+
+
public enum ScalingScheme
+ +
+
+

A set of schemes that can be used to scale a LocationNode.

+ +

Values:

+ +
    +
  • normal: The default way of scaling, Hardcoded value out to 3000 meters, and then 0.75 that factor beyond 3000 m.
  • +
  • tiered (threshold, scale): Return 1.0 at distance up to threshold meters, or scale beyond.
  • +
  • doubleTiered (firstThreshold, firstCale, secondThreshold, secondScale): A way of scaling everything +beyond 2 specific distances at two specific scales.
  • +
  • linear (threshold): linearly scales an object based on its distance.
  • +
  • linearBuffer (threshold, buffer): linearly scales an object based on its distance as long as it is +further than the buffer distance, otherwise it just returns 100% scale.
  • +
+ +
+
+
+
    +
  • +
    + + + + normal + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tiered(threshold: Double, scale: Float)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case doubleTiered(firstThreshold: Double, firstScale: Float, secondThreshold: Double, secondScale: Float)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + linear(threshold:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case linear(threshold: Double)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case linearBuffer(threshold: Double, buffer: Double)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + getScheme() + +
    +
    +
    +
    +
    +
    +

    Returns a closure to compute appropriate scale factor based on the current value of self (a ScalingSchee). +The closure accepts two parameters and returns the scale factor to apply to an AnnotationNode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func getScheme() -> ((_ distance: Double, _ adjustedDistance: Double) -> Float)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions.html b/docs/Extensions.html new file mode 100644 index 00000000..7e86ccfc --- /dev/null +++ b/docs/Extensions.html @@ -0,0 +1,479 @@ + + + + Extensions Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + Double + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Float + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Float
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Int + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CGPoint + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension CGPoint
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CLLocation + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension CLLocation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension CLLocationCoordinate2D
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + FloatingPoint + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension FloatingPoint
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SCNNode + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension SCNNode
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SCNVector3 + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension SCNVector3
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + UIView + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension UIView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/CGPoint.html b/docs/Extensions/CGPoint.html new file mode 100644 index 00000000..4fefc025 --- /dev/null +++ b/docs/Extensions/CGPoint.html @@ -0,0 +1,237 @@ + + + + CGPoint Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

CGPoint

+
+
+
extension CGPoint
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func pointWithVector(vector: SCNVector3) -> CGPoint
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func radiusContainsPoint(radius: CGFloat, point: CGPoint) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/CLLocation.html b/docs/Extensions/CLLocation.html new file mode 100644 index 00000000..28d0ef60 --- /dev/null +++ b/docs/Extensions/CLLocation.html @@ -0,0 +1,375 @@ + + + + CLLocation Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

CLLocation

+
+
+
public extension CLLocation
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    convenience init(coordinate: CLLocationCoordinate2D, altitude: CLLocationDistance)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Translates distance in meters between two locations. +Returns the result as the distance in latitude and distance in longitude. +The approximation used here gives reasonable accuracy out to a radius of 50 km except at high latitudes. +TODO: rewrite .translation(toLocation:) to improve the accuracy. See unit test notes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func translation(toLocation location: CLLocation) -> LocationTranslation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    TODO: rewrite .translatedLocation(with:) to improve the accuracy. See unit test notes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func translatedLocation(with translation: LocationTranslation) -> CLLocation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bearing(between:) + +
    +
    +
    +
    +
    +
    +

    Bearing from self to another point. Returns bearing in +/- degrees from north +This function uses the haversine formula to compute a geodesic (great circle), assuming a spherical earth. +Note that, especially at high latitudes and with relatively distant points, a.bearing(between: b) +is not necessarily 180 degrees opposite to b.bearing(between: a).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func bearing(between point: CLLocation) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + point + + +
    +

    second point to compute bearing to.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + approxMidpoint(to:) + +
    +
    +
    +
    +
    +
    +

    Returns the midpoint between two locations +Note: Only usable for short distances like MKPolyline segments

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func approxMidpoint(to: CLLocation) -> CLLocation
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + debugLog + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var debugLog: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/CLLocationCoordinate2D.html b/docs/Extensions/CLLocationCoordinate2D.html new file mode 100644 index 00000000..8717800c --- /dev/null +++ b/docs/Extensions/CLLocationCoordinate2D.html @@ -0,0 +1,269 @@ + + + + CLLocationCoordinate2D Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

CLLocationCoordinate2D

+
+
+
public extension CLLocationCoordinate2D
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns a new CLLocationCoordinate2D at the given bearing and distance from the original point. +This function uses a great circle on ellipse formula.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func coordinateWithBearing(bearing: Double, distanceMeters: Double) -> CLLocationCoordinate2D
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + bearing + + +
    +

    bearing in degrees clockwise from north.

    +
    +
    + + distanceMeters + + +
    +

    distance in meters.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + earthRadiusMeters() + +
    +
    +
    +
    +
    +
    +

    Return the WGS-84 radius of the earth, in meters, at the given point.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func earthRadiusMeters() -> Double
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Double.html b/docs/Extensions/Double.html new file mode 100644 index 00000000..853816c1 --- /dev/null +++ b/docs/Extensions/Double.html @@ -0,0 +1,210 @@ + + + + Double Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Double

+
+
+
public extension Double
+ +
+
+ +
+
+
+
    +
  • +
    + + + + short + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Float.html b/docs/Extensions/Float.html new file mode 100644 index 00000000..a9c21f79 --- /dev/null +++ b/docs/Extensions/Float.html @@ -0,0 +1,210 @@ + + + + Float Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Float

+
+
+
public extension Float
+ +
+
+ +
+
+
+
    +
  • +
    + + + + short + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/FloatingPoint.html b/docs/Extensions/FloatingPoint.html new file mode 100644 index 00000000..27f70b1f --- /dev/null +++ b/docs/Extensions/FloatingPoint.html @@ -0,0 +1,237 @@ + + + + FloatingPoint Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

FloatingPoint

+
+
+
public extension FloatingPoint
+ +
+
+ +
+
+
+
    +
  • +
    + + + + degreesToRadians + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var degreesToRadians: Self { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + radiansToDegrees + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var radiansToDegrees: Self { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/Int.html b/docs/Extensions/Int.html new file mode 100644 index 00000000..fb46b1bf --- /dev/null +++ b/docs/Extensions/Int.html @@ -0,0 +1,237 @@ + + + + Int Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Int

+
+
+
public extension Int
+ +
+
+ +
+
+
+
    +
  • +
    + + + + short + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + short3 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short3: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/SCNNode.html b/docs/Extensions/SCNNode.html new file mode 100644 index 00000000..898d6f7d --- /dev/null +++ b/docs/Extensions/SCNNode.html @@ -0,0 +1,240 @@ + + + + SCNNode Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SCNNode

+
+
+
extension SCNNode
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Overlapping nodes require unique renderingOrder values to avoid flicker +This method will select random values if you don’t care which node is in front of the other, +or you can specify a particular z-order value +Note: rendering order will be changed later based on distance from camera

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeFlicker(withRenderingOrder renderingOrder: Int = Int.random(in: 1..<Int.max))
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns a node similar to the one displayed when an ARSCNView‘s .debugOptions includes .showWorldOrigin

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    class func axesNode(quiverLength: CGFloat, quiverThickness: CGFloat) -> SCNNode
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/SCNVector3.html b/docs/Extensions/SCNVector3.html new file mode 100644 index 00000000..1d526db7 --- /dev/null +++ b/docs/Extensions/SCNVector3.html @@ -0,0 +1,211 @@ + + + + SCNVector3 Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SCNVector3

+
+
+
public extension SCNVector3
+ +
+
+ +
+
+
+
    +
  • +
    + + + + distance(to:) + +
    +
    +
    +
    +
    +
    +

    Calculates distance between vectors +Doesn’t include the y axis, matches functionality of CLLocation ‘distance’ function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func distance(to anotherVector: SCNVector3) -> Float
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Extensions/UIView.html b/docs/Extensions/UIView.html new file mode 100644 index 00000000..062e3f73 --- /dev/null +++ b/docs/Extensions/UIView.html @@ -0,0 +1,210 @@ + + + + UIView Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

UIView

+
+
+
public extension UIView
+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var image: UIImage { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols.html b/docs/Protocols.html new file mode 100644 index 00000000..b5589804 --- /dev/null +++ b/docs/Protocols.html @@ -0,0 +1,355 @@ + + + + Protocols Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    protocol LocationManagerDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + LNTouchDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol LNTouchDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol SceneLocationViewEstimateDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol SceneLocationViewDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SceneTrackingDelegate + +
    +
    +
    +
    +
    +
    +

    Subset of delegate methods from ARSCNViewDelegate to be notified on tracking status changes

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 11.0, *)
    +public protocol SceneTrackingDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols/LNTouchDelegate.html b/docs/Protocols/LNTouchDelegate.html new file mode 100644 index 00000000..37d2dc4d --- /dev/null +++ b/docs/Protocols/LNTouchDelegate.html @@ -0,0 +1,238 @@ + + + + LNTouchDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LNTouchDelegate

+
+
+
public protocol LNTouchDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Protocols/LocationManagerDelegate.html b/docs/Protocols/LocationManagerDelegate.html new file mode 100644 index 00000000..269b02e7 --- /dev/null +++ b/docs/Protocols/LocationManagerDelegate.html @@ -0,0 +1,254 @@ + + + + LocationManagerDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationManagerDelegate

+
+
+
protocol LocationManagerDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + locationManagerDidUpdateLocation(_:location:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func locationManagerDidUpdateLocation(_ locationManager: LocationManager, location: CLLocation)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationManagerDidUpdateHeading(_:heading:accuracy:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func locationManagerDidUpdateHeading(_ locationManager: LocationManager, heading: CLLocationDirection, accuracy: CLLocationDirection)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Protocols/SceneLocationManagerDelegate.html b/docs/Protocols/SceneLocationManagerDelegate.html new file mode 100644 index 00000000..56e30fff --- /dev/null +++ b/docs/Protocols/SceneLocationManagerDelegate.html @@ -0,0 +1,319 @@ + + + + SceneLocationManagerDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationManagerDelegate

+
+
+
protocol SceneLocationManagerDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Protocols/SceneLocationViewDelegate.html b/docs/Protocols/SceneLocationViewDelegate.html new file mode 100644 index 00000000..a6f9f6a3 --- /dev/null +++ b/docs/Protocols/SceneLocationViewDelegate.html @@ -0,0 +1,354 @@ + + + + SceneLocationViewDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationViewDelegate

+
+
+
public protocol SceneLocationViewDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Protocols/SceneLocationViewEstimateDelegate.html b/docs/Protocols/SceneLocationViewEstimateDelegate.html new file mode 100644 index 00000000..e878feac --- /dev/null +++ b/docs/Protocols/SceneLocationViewEstimateDelegate.html @@ -0,0 +1,254 @@ + + + + SceneLocationViewEstimateDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationViewEstimateDelegate

+
+
+
public protocol SceneLocationViewEstimateDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/Protocols/SceneTrackingDelegate.html b/docs/Protocols/SceneTrackingDelegate.html new file mode 100644 index 00000000..ce2afe98 --- /dev/null +++ b/docs/Protocols/SceneTrackingDelegate.html @@ -0,0 +1,293 @@ + + + + SceneTrackingDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneTrackingDelegate

+
+
+
@available(iOS 11.0, *)
+public protocol SceneTrackingDelegate : AnyObject
+ +
+
+

Subset of delegate methods from ARSCNViewDelegate to be notified on tracking status changes

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sessionWasInterrupted(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sessionInterruptionEnded(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func session(_ session: ARSession, didFailWithError error: Error)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs.html b/docs/Structs.html new file mode 100644 index 00000000..461106ad --- /dev/null +++ b/docs/Structs.html @@ -0,0 +1,270 @@ + + + + Structures Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Structures

+

The following structures are available globally.

+ +
+
+
+
    +
  • +
    + + + + ARKit_CoreLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    struct ARKit_CoreLocation
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + LocationTranslation + +
    +
    +
    +
    +
    +
    +

    Translation in meters between 2 locations

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LocationTranslation
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + AttributedType + +
    +
    +
    +
    +
    +
    +

    Wrapper to decorate a type with an attribute

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AttributedType<T>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/ARKit_CoreLocation.html b/docs/Structs/ARKit_CoreLocation.html new file mode 100644 index 00000000..5d6f83a4 --- /dev/null +++ b/docs/Structs/ARKit_CoreLocation.html @@ -0,0 +1,211 @@ + + + + ARKit_CoreLocation Structure Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

ARKit_CoreLocation

+
+
+
struct ARKit_CoreLocation
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var text: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/AttributedType.html b/docs/Structs/AttributedType.html new file mode 100644 index 00000000..9a80213b --- /dev/null +++ b/docs/Structs/AttributedType.html @@ -0,0 +1,265 @@ + + + + AttributedType Structure Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

AttributedType

+
+
+
public struct AttributedType<T>
+ +
+
+

Wrapper to decorate a type with an attribute

+ +
+
+
+
    +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: T
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attribute + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let attribute: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(type:attribute:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(type: T, attribute: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Structs/LocationTranslation.html b/docs/Structs/LocationTranslation.html new file mode 100644 index 00000000..878d7827 --- /dev/null +++ b/docs/Structs/LocationTranslation.html @@ -0,0 +1,293 @@ + + + + LocationTranslation Structure Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationTranslation

+
+
+
public struct LocationTranslation
+ +
+
+

Translation in meters between 2 locations

+ +
+
+
+
    +
  • +
    + + + + latitudeTranslation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var latitudeTranslation: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + longitudeTranslation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var longitudeTranslation: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + altitudeTranslation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var altitudeTranslation: Double
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This explicit definition is needed because the free init function is marked fileprivate by default, +so LocationTranslation isn’t available to client apps.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(latitudeTranslation: Double, longitudeTranslation: Double, altitudeTranslation: Double)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/Typealiases.html b/docs/Typealiases.html new file mode 100644 index 00000000..4604baf5 --- /dev/null +++ b/docs/Typealiases.html @@ -0,0 +1,206 @@ + + + + Type Aliases Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+
+
    +
  • +
    + + + + BoxBuilder + +
    +
    +
    +
    +
    +
    +

    A block that will build an SCNBox with the provided distance. +Note: the distance should be assigned to the length

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias BoxBuilder = (_ distance: CGFloat) -> SCNBox
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 00000000..cd8704ef --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 31% + + + 31% + + + diff --git a/docs/css/highlight.css b/docs/css/highlight.css new file mode 100644 index 00000000..d0db0e13 --- /dev/null +++ b/docs/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css new file mode 100644 index 00000000..103ee29b --- /dev/null +++ b/docs/css/jazzy.css @@ -0,0 +1,348 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 1; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 1; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 0px; } + .item .discouraged { + text-decoration: line-through; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } diff --git a/docs/docsets/ARCL.docset/Contents/Info.plist b/docs/docsets/ARCL.docset/Contents/Info.plist new file mode 100644 index 00000000..f595558f --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.arcl + CFBundleName + ARCL + DocSetPlatformFamily + arcl + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 00000000..79fb4817 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,432 @@ + + + + Classes Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Classes

+

The following classes are available globally.

+ +
+
+
+
    +
  • +
    + + + + LocationManager + +
    +
    +
    +
    +
    +
    +

    Handles retrieving the location and heading from CoreLocation +Does not contain anything related to ARKit or advanced location

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class LocationManager : NSObject
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SceneLocationEstimate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class SceneLocationEstimate
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SceneLocationManager + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public final class SceneLocationManager
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + AnnotationNode + +
    +
    +
    +
    +
    +
    +

    This node type enables the client to have access to the view or image that +was used to initialize the LocationAnnotationNode.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class AnnotationNode : SCNNode
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + LocationNode + +
    +
    +
    +
    +
    +
    +

    A location node can be added to a scene using a coordinate.

    + +

    Its scale and position should not be adjusted, as these are used for scene +layout purposes. To adjust the scale and position of items within a node, +you can add them to a child node and adjust them there

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class LocationNode : SCNNode
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + PolylineNode + +
    +
    +
    +
    +
    +
    +

    A Node that is used to show directions in AR-CL.

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class PolylineNode : LocationNode
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SceneLocationView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class SceneLocationView : ARSCNView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/AnnotationNode.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/AnnotationNode.html new file mode 100644 index 00000000..d3179059 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/AnnotationNode.html @@ -0,0 +1,320 @@ + + + + AnnotationNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

AnnotationNode

+
+
+
open class AnnotationNode : SCNNode
+ +
+
+

This node type enables the client to have access to the view or image that +was used to initialize the LocationAnnotationNode.

+ +
+
+
+
    +
  • +
    + + + + view + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var view: UIView?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var image: UIImage?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + layer + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var layer: CALayer?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(view: UIView?, image: UIImage?, layer: CALayer? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationAnnotationNode.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationAnnotationNode.html new file mode 100644 index 00000000..b231e48c --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationAnnotationNode.html @@ -0,0 +1,382 @@ + + + + LocationAnnotationNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationAnnotationNode

+
+
+
open class LocationAnnotationNode : LocationNode
+ +
+
+

A LocationNode which has an attached AnnotationNode.

+ +
+
+
+
    +
  • +
    + + + + annotationNode + +
    +
    +
    +
    +
    +
    +

    Subnodes and adjustments should be applied to this subnode +Required to allow scaling at the same time as having a 2D ‘billboard’ appearance

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let annotationNode: AnnotationNode
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Parameter to raise or lower the label’s rendering position relative to the node’s actual project location. +The default value of 1.1 places the label at a pleasing height above the node. +To draw the label exactly on the true location, use a value of 0. To draw it below the true location, +use a negative value.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var annotationHeightAdjustmentFactor: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:image:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(location: CLLocation?, image: UIImage)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:view:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(location: CLLocation?, view: UIView)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:layer:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(location: CLLocation?, layer: CALayer)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Note: we repeat code from LocationNode‘s implementation of this function. Is this because of the use of SCNTransaction +to wrap the changes? It’s legal to nest the calls, should consider this if any more changes to +LocationNode’s implementation are needed.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override func updatePositionAndScale(setup: Bool = false, scenePosition: SCNVector3?,
    +                                     locationNodeLocation nodeLocation: CLLocation,
    +                                     locationManager: SceneLocationManager,
    +                                     onCompletion: (() -> Void))
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationManager.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationManager.html new file mode 100644 index 00000000..24e07bd2 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationManager.html @@ -0,0 +1,466 @@ + + + + LocationManager Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationManager

+
+
+
public class LocationManager : NSObject
+ +
+
+

Handles retrieving the location and heading from CoreLocation +Does not contain anything related to ARKit or advanced location

+ +
+
+
+
    +
  • +
    + + + + delegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    weak var delegate: LocationManagerDelegate?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currentLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var currentLocation: CLLocation?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + heading + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    private(set) public var heading: CLLocationDirection?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + headingAccuracy + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    private(set) public var headingAccuracy: CLLocationDirection?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    override init()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func requestAuthorization()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationNode.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationNode.html new file mode 100644 index 00000000..8ee3d16a --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/LocationNode.html @@ -0,0 +1,618 @@ + + + + LocationNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationNode

+
+
+
open class LocationNode : SCNNode
+ +
+
+

A location node can be added to a scene using a coordinate.

+ +

Its scale and position should not be adjusted, as these are used for scene +layout purposes. To adjust the scale and position of items within a node, +you can add them to a child node and adjust them there

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    This seems like it should be a bug? Why is it hardcoded? Why would it ever be different from the scene’s setting?

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var locationEstimateMethod: LocationEstimateMethod
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + location + +
    +
    +
    +
    +
    +
    +

    Location can be changed and confirmed later by SceneLocationView.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var location: CLLocation!
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + tag + +
    +
    +
    +
    +
    +
    +

    A general purpose tag that can be used to find nodes already added to a SceneLocationView

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var tag: String?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationConfirmed + +
    +
    +
    +
    +
    +
    +

    Whether the location of the node has been confirmed. +This is automatically set to true when you create a node using a location. +Otherwise, this is false, and becomes true once the user moves 100m away from the node, +except when the locationEstimateMethod is set to use Core Location data only, +as then it becomes true immediately.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locationConfirmed: Bool { get }
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Whether a node’s position should be adjusted on an ongoing basis +based on its given location. +This only occurs when a node’s location is within 100m of the user. +Adjustment doesn’t apply to nodes without a confirmed location. +When this is set to false, the result is a smoother appearance. +When this is set to true, this means a node may appear to jump around +as the user’s location estimates update, +but the position is generally more accurate. +Defaults to true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var continuallyAdjustNodePositionWhenWithinRange: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Whether a node’s position and scale should be updated automatically on a continual basis. +This should only be set to false if you plan to manually update position and scale +at regular intervals. You can do this with SceneLocationView‘s updatePositionOfLocationNode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var continuallyUpdatePositionAndScale: Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Whether the node should be scaled relative to its distance from the camera +Default value (false) scales it to visually appear at the same size no matter the distance +Setting to true causes annotation nodes to scale like a regular node +Scaling relative to distance may be useful with local navigation-based uses +For landmarks in the distance, the default is correct

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var scaleRelativeToDistance: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ignoreAltitude + +
    +
    +
    +
    +
    +
    +

    Whether the node should appear at the same altitude of the user +May be useful when you don’t know the real altitude of the node +When set to true, the node will stay at the same altitude of the user

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ignoreAltitude: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + scalingScheme + +
    +
    +
    +
    +
    +
    +

    The scheme to use for scaling

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var scalingScheme: ScalingScheme
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(location:tag:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(location: CLLocation?, tag: String? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + location(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    internal func location(_ bestLocationEstimate: SceneLocationEstimate?) -> CLLocation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    internal func adjustedDistance(setup: Bool, position: SCNVector3, locationNodeLocation: CLLocation,
    +                               locationManager: SceneLocationManager) -> CLLocationDistance
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    See LocationAnnotationNode‘s override of this function. Because it doesn’t invoke super’s version, any changes +made in this file must be repeated in LocationAnnotationNode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func updatePositionAndScale(setup: Bool = false, scenePosition: SCNVector3?, locationNodeLocation nodeLocation: CLLocation,
    +                            locationManager: SceneLocationManager, onCompletion: (() -> Void))
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Converts distance from meters to SCNKit rendering order +Constant multiplier eliminates flicker caused by slight distance variations +Nodes with greater rendering orders are rendered last

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func renderingOrder(fromDistance distance: CLLocationDistance) -> Int
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/PolylineNode.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/PolylineNode.html new file mode 100644 index 00000000..f0451c7c --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/PolylineNode.html @@ -0,0 +1,405 @@ + + + + PolylineNode Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

PolylineNode

+
+
+
public class PolylineNode : LocationNode
+ +
+
+

A Node that is used to show directions in AR-CL.

+ +
+
+
+
    +
  • +
    + + + + locationNodes + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var locationNodes: [LocationNode]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + polyline + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let polyline: MKPolyline
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + altitude + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let altitude: CLLocationDistance
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + boxBuilder + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let boxBuilder: BoxBuilder
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Creates a PolylineNode from the provided polyline, altitude (which is assumed to be uniform +for all of the points) and an optional SCNBox to use as a prototype for the location boxes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(polyline: MKPolyline,
    +            altitude: CLLocationDistance,
    +            tag: String? = nil,
    +            boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + + + + + +
    + + polyline + + +
    +

    The polyline that we’ll be creating location nodes for.

    +
    +
    + + altitude + + +
    +

    The uniform altitude to use to show the location nodes.

    +
    +
    + + tag + + +
    +

    a String attribute to identify the node in the scene (e.g when it’s touched)

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationEstimate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationEstimate.html new file mode 100644 index 00000000..eff739c4 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationEstimate.html @@ -0,0 +1,323 @@ + + + + SceneLocationEstimate Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationEstimate

+
+
+
public class SceneLocationEstimate
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + location + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let location: CLLocation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + position + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let position: SCNVector3
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init(location: CLLocation, position: SCNVector3)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Compares the location’s position to another position, to determine the translation between them

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationTranslation(to position: SCNVector3) -> LocationTranslation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Translates the location by comparing with a given position

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func translatedLocation(to position: SCNVector3) -> CLLocation
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationManager.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationManager.html new file mode 100644 index 00000000..e16184e7 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationManager.html @@ -0,0 +1,629 @@ + + + + SceneLocationManager Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationManager

+
+
+
public final class SceneLocationManager
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + sceneLocationDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    weak var sceneLocationDelegate: SceneLocationManagerDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locationEstimateMethod: LocationEstimateMethod
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationManager + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let locationManager: LocationManager
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var sceneLocationEstimates: [SceneLocationEstimate]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updateEstimatesTimer + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var updateEstimatesTimer: Timer?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bestLocationEstimate + +
    +
    +
    +
    +
    +
    +

    The best estimation of location that has been taken +This takes into account horizontal accuracy, and the time at which the estimation was taken +favouring the most accurate, and then the most recent result. +This doesn’t indicate where the user currently is.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var bestLocationEstimate: SceneLocationEstimate? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currentLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentLocation: CLLocation? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    init()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + deinit + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    deinit
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + updateLocationData() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +func updateLocationData()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds a scene location estimate based on current time, camera position and location from location manager

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addSceneLocationEstimate(location: CLLocation)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeOldLocationEstimates()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeOldLocationEstimates(currentScenePosition: SCNVector3)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func run()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pause() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func pause()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView.html new file mode 100644 index 00000000..d31b0527 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView.html @@ -0,0 +1,2336 @@ + + + + SceneLocationView Class Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationView

+
+
+
open class SceneLocationView : ARSCNView
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + sceneLimit + +
    +
    +
    +
    +
    +
    +

    The limit to the scene, in terms of what data is considered reasonably accurate. +Measured in meters.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static let sceneLimit: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + ARTrackingType + +
    +
    +
    +
    +
    +
    +

    The type of tracking to use.

    + +
      +
    • orientationTracking: Informs the SceneLocationView to use Device Orientation tracking only. +Useful when your nodes are all CLLocation based, and are not synced to real world planes +See Apple’s documentation
    • +
    • worldTracking: Informs the SceneLocationView to use a World Tracking Configuration. +Useful when you have nodes that attach themselves to real world planes +See Apple’s documentation
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ARTrackingType
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationViewDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var locationViewDelegate: SceneLocationViewDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var locationEstimateDelegate: SceneLocationViewEstimateDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var locationNodeTouchDelegate: LNTouchDelegate?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sceneTrackingDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var sceneTrackingDelegate: SceneTrackingDelegate?
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sceneLocationManager + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let sceneLocationManager: SceneLocationManager
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + delegate + +
    +
    +
    +
    +
    +
    +

    Addresses Issue #196 - +Delegate issue when assigned to self (no location nodes render). If the user +tries to set the delegate, perform an assertionFailure and tell them to set the arViewDelegate instead.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open override var delegate: ARSCNViewDelegate? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + arViewDelegate + +
    +
    +
    +
    +
    +
    +

    If you wish to receive delegate ARSCNViewDelegate events, use this instead of the delegate property. +The delegate property is reserved for this class itself and trying to set it will result in an assertionFailure +and in production, things just won’t work as you expect.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var arViewDelegate: ARSCNViewDelegate?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    The method to use for determining locations. +Not advisable to change this as the scene is ongoing.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var locationEstimateMethod: LocationEstimateMethod { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + showAxesNode + +
    +
    +
    +
    +
    +
    +

    When set to true, displays an axes node at the start of the scene

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showAxesNode: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + sceneNode + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var sceneNode: SCNNode? { get set }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + orientToTrueNorth + +
    +
    +
    +
    +
    +
    +

    Only to be overrided if you plan on manually setting True North. +When true, sets up the scene to face what the device considers to be True North. +This can be inaccurate, hence the option to override it. +The functions for altering True North can be used irrespective of this value, +but if the scene is oriented to true north, it will update without warning, +thus affecting your alterations. +The initial value of this property is respected.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var orientToTrueNorth: Bool
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + showFeaturePoints + +
    +
    +
    +
    +
    +
    +

    Whether debugging feature points should be displayed. +Defaults to false

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var showFeaturePoints: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + currentScenePosition + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentScenePosition: SCNVector3? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + currentEulerAngles + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentEulerAngles: SCNVector3? { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationNodes + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var locationNodes: [LocationNode]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + polylineNodes + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var polylineNodes: [PolylineNode]
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + arTrackingType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var arTrackingType: SceneLocationView.ARTrackingType
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    internal var didFetchInitialLocation: Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ + + +

Setup

+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    This initializer allows you to specify the type of tracking configuration (defaults to world tracking) as well as +some other optional values.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public convenience init(trackingType: ARTrackingType = .worldTracking, frame: CGRect = .zero, options: [String : Any]? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + trackingType + + +
    +

    The type of AR Tracking configuration (defaults to world tracking).

    +
    +
    + + frame + + +
    +

    The CGRect for the frame (defaults to .zero).

    +
    +
    + + options + + +
    +

    The rendering options for the SCNView.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + init(frame:options:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override init(frame: CGRect, options: [String : Any]? = nil)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(coder:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    required public init?(coder aDecoder: NSCoder)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + resetSceneHeading() + +
    +
    +
    +
    +
    +
    +

    Resets the scene heading to 0

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func resetSceneHeading()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func confirmLocationOfLocationNode(_ locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Gives the best estimate of the location of a node

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func locationOfLocationNode(_ locationNode: LocationNode) -> CLLocation
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + renderer(_:nodeFor:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode?
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, willUpdate node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didRemove node: SCNNode, for anchor: ARAnchor)
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func session(_ session: ARSession, didFailWithError error: Error)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sessionWasInterrupted(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sessionInterruptionEnded(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sessionShouldAttemptRelocalization(_ session: ARSession) -> Bool
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func session(_ session: ARSession, didOutputAudioSampleBuffer audioSampleBuffer: CMSampleBuffer)
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didApplyAnimationsAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, didApplyConstraintsAtTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval)
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + run() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func run()
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + pause() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func pause()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    iOS can be inaccurate when setting true north +The scene is oriented to true north, and will update its heading when it gets a more accurate reading +You can disable this through setting the +These functions provide manual overriding of the scene heading, +if you have a more precise idea of where True North is +The goal is for the True North orientation problems to be resolved +At which point these functions would no longer be useful +Moves the scene heading clockwise by 1 degree +Intended for correctional purposes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moveSceneHeadingClockwise()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Moves the scene heading anti-clockwise by 1 degree +Intended for correctional purposes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func moveSceneHeadingAntiClockwise()
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • + +
    +
    +
    +
    +
    +

    Upon being added, a node’s location, locationConfirmed and position may be modified and should not be changed externally. +Silently fails and returns without adding the node to the scene if any of currentScenePosition, +sceneLocationManager.currentLocation, or sceneNode is nil.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodeForCurrentPosition(locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Each node’s addition to the scene can silently fail; See addLocationNodeForCurrentPosition(locationNode:).

    + +

    Why would we want to add multiple nodes at the current position?

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodesForCurrentPosition(locationNodes: [LocationNode])
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Silently fails and returns without adding the node unlesslocation is not nil and locationConfirmed is true. +Upon being added, a node’s position will be modified internally and should not be changed externally. +location will not be modified, but taken as accurate.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodeWithConfirmedLocation(locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @objc
    +func sceneLocationViewTouched(sender: UITapGestureRecognizer)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Each node’s addition to the scene can silently fail; See addLocationNodeWithConfirmedLocation(locationNode:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addLocationNodesWithConfirmedLocation(locationNodes: [LocationNode])
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + removeAllNodes() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeAllNodes()
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determine if scene contains a node with the specified tag

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sceneContainsNodeWithTag(_ tag: String) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + tag + + +
    +

    tag text

    +
    +
    +
    +
    +

    Return Value

    +

    true if a LocationNode with the tag exists; false otherwise

    +
    +
    +
    +
  • +
  • +
    + + + + findNodes(tagged:) + +
    +
    +
    +
    +
    +
    +

    Find all location nodes in the scene tagged with tag

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func findNodes(tagged tag: String) -> [LocationNode]
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + tag + + +
    +

    The tag text for which to search nodes.

    +
    +
    +
    +
    +

    Return Value

    +

    A list of all matching tags

    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeLocationNode(locationNode: LocationNode)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeLocationNodes(locationNodes: [LocationNode])
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Adds routes to the scene and lets you specify the geometry prototype for the box. +Note: You can provide your own SCNBox prototype to base the direction nodes from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addRoutes(routes: [MKRoute], boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + routes + + +
    +

    The MKRoute of directions

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Adds polylines to the scene and lets you specify the geometry prototype for the box. +Note: You can provide your own SCNBox prototype to base the direction nodes from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addRoutes(polylines: [AttributedType<MKPolyline>],
    +               Δaltitude: CLLocationDistance = -2.0,
    +               boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + polylines + + +
    +

    The list of attributed MKPolyline to rendered

    +
    +
    + + Δaltitude + + +
    +

    difference between box and current user altitude

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + removeRoutes(routes:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeRoutes(routes: [MKRoute])
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Adds polylines to the scene and lets you specify the geometry prototype for the box. +Note: You can provide your own SCNBox prototype to base the direction nodes from.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func addPolylines(polylines: [MKPolyline], boxBuilder: BoxBuilder? = nil)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + polylines + + +
    +

    A set of MKPolyline.

    +
    +
    + + boxBuilder + + +
    +

    A block that will customize how a box is built.

    +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removePolylines(polylines: [MKPolyline])
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView/ARTrackingType.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView/ARTrackingType.html new file mode 100644 index 00000000..34273110 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Classes/SceneLocationView/ARTrackingType.html @@ -0,0 +1,247 @@ + + + + ARTrackingType Enumeration Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

ARTrackingType

+
+
+
public enum ARTrackingType
+ +
+
+

The type of tracking to use.

+ +
    +
  • orientationTracking: Informs the SceneLocationView to use Device Orientation tracking only. +Useful when your nodes are all CLLocation based, and are not synced to real world planes +See Apple’s documentation
  • +
  • worldTracking: Informs the SceneLocationView to use a World Tracking Configuration. +Useful when you have nodes that attach themselves to real world planes +See Apple’s documentation
  • +
+ +
+
+
+
    +
  • +
    + + + + orientationTracking + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case orientationTracking
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + worldTracking + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case worldTracking
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 00000000..268e7e60 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,250 @@ + + + + Enumerations Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Different methods which can be used when determining locations (such as the user’s location).

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum LocationEstimateMethod
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ScalingScheme + +
    +
    +
    +
    +
    +
    +

    A set of schemes that can be used to scale a LocationNode.

    + +

    Values:

    + +
      +
    • normal: The default way of scaling, Hardcoded value out to 3000 meters, and then 0.75 that factor beyond 3000 m.
    • +
    • tiered (threshold, scale): Return 1.0 at distance up to threshold meters, or scale beyond.
    • +
    • doubleTiered (firstThreshold, firstCale, secondThreshold, secondScale): A way of scaling everything +beyond 2 specific distances at two specific scales.
    • +
    • linear (threshold): linearly scales an object based on its distance.
    • +
    • linearBuffer (threshold, buffer): linearly scales an object based on its distance as long as it is +further than the buffer distance, otherwise it just returns 100% scale.
    • +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ScalingScheme
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/LocationEstimateMethod.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/LocationEstimateMethod.html new file mode 100644 index 00000000..5e7bc8e7 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/LocationEstimateMethod.html @@ -0,0 +1,240 @@ + + + + LocationEstimateMethod Enumeration Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationEstimateMethod

+
+
+
public enum LocationEstimateMethod
+ +
+
+

Different methods which can be used when determining locations (such as the user’s location).

+ +
+
+
+
    +
  • +
    + + + + coreLocationDataOnly + +
    +
    +
    +
    +
    +
    +

    Only uses Core Location data. +Not suitable for adding nodes using current position, which requires more precision.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case coreLocationDataOnly
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + mostRelevantEstimate + +
    +
    +
    +
    +
    +
    +

    Combines knowledge about movement through the AR world with +the most relevant Core Location estimate (based on accuracy and time).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case mostRelevantEstimate
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/ScalingScheme.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/ScalingScheme.html new file mode 100644 index 00000000..473d0ebd --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Enums/ScalingScheme.html @@ -0,0 +1,359 @@ + + + + ScalingScheme Enumeration Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

ScalingScheme

+
+
+
public enum ScalingScheme
+ +
+
+

A set of schemes that can be used to scale a LocationNode.

+ +

Values:

+ +
    +
  • normal: The default way of scaling, Hardcoded value out to 3000 meters, and then 0.75 that factor beyond 3000 m.
  • +
  • tiered (threshold, scale): Return 1.0 at distance up to threshold meters, or scale beyond.
  • +
  • doubleTiered (firstThreshold, firstCale, secondThreshold, secondScale): A way of scaling everything +beyond 2 specific distances at two specific scales.
  • +
  • linear (threshold): linearly scales an object based on its distance.
  • +
  • linearBuffer (threshold, buffer): linearly scales an object based on its distance as long as it is +further than the buffer distance, otherwise it just returns 100% scale.
  • +
+ +
+
+
+
    +
  • +
    + + + + normal + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case tiered(threshold: Double, scale: Float)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case doubleTiered(firstThreshold: Double, firstScale: Float, secondThreshold: Double, secondScale: Float)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + linear(threshold:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case linear(threshold: Double)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case linearBuffer(threshold: Double, buffer: Double)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + getScheme() + +
    +
    +
    +
    +
    +
    +

    Returns a closure to compute appropriate scale factor based on the current value of self (a ScalingSchee). +The closure accepts two parameters and returns the scale factor to apply to an AnnotationNode.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func getScheme() -> ((_ distance: Double, _ adjustedDistance: Double) -> Float)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 00000000..7e86ccfc --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,479 @@ + + + + Extensions Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+
+
    +
  • +
    + + + + Double + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Float + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Float
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + Int + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension Int
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CGPoint + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension CGPoint
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CLLocation + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension CLLocation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension CLLocationCoordinate2D
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + FloatingPoint + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension FloatingPoint
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SCNNode + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension SCNNode
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + SCNVector3 + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension SCNVector3
    + +
    +
    +
    +
    +
  • +
+
+
+ +
    +
  • +
    + + + + UIView + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension UIView
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CGPoint.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CGPoint.html new file mode 100644 index 00000000..4fefc025 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CGPoint.html @@ -0,0 +1,237 @@ + + + + CGPoint Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

CGPoint

+
+
+
extension CGPoint
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func pointWithVector(vector: SCNVector3) -> CGPoint
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func radiusContainsPoint(radius: CGFloat, point: CGPoint) -> Bool
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocation.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocation.html new file mode 100644 index 00000000..28d0ef60 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocation.html @@ -0,0 +1,375 @@ + + + + CLLocation Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

CLLocation

+
+
+
public extension CLLocation
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    convenience init(coordinate: CLLocationCoordinate2D, altitude: CLLocationDistance)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Translates distance in meters between two locations. +Returns the result as the distance in latitude and distance in longitude. +The approximation used here gives reasonable accuracy out to a radius of 50 km except at high latitudes. +TODO: rewrite .translation(toLocation:) to improve the accuracy. See unit test notes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func translation(toLocation location: CLLocation) -> LocationTranslation
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    TODO: rewrite .translatedLocation(with:) to improve the accuracy. See unit test notes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func translatedLocation(with translation: LocationTranslation) -> CLLocation
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + bearing(between:) + +
    +
    +
    +
    +
    +
    +

    Bearing from self to another point. Returns bearing in +/- degrees from north +This function uses the haversine formula to compute a geodesic (great circle), assuming a spherical earth. +Note that, especially at high latitudes and with relatively distant points, a.bearing(between: b) +is not necessarily 180 degrees opposite to b.bearing(between: a).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func bearing(between point: CLLocation) -> Double
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + point + + +
    +

    second point to compute bearing to.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + approxMidpoint(to:) + +
    +
    +
    +
    +
    +
    +

    Returns the midpoint between two locations +Note: Only usable for short distances like MKPolyline segments

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func approxMidpoint(to: CLLocation) -> CLLocation
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + debugLog + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var debugLog: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocationCoordinate2D.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocationCoordinate2D.html new file mode 100644 index 00000000..8717800c --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/CLLocationCoordinate2D.html @@ -0,0 +1,269 @@ + + + + CLLocationCoordinate2D Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

CLLocationCoordinate2D

+
+
+
public extension CLLocationCoordinate2D
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Returns a new CLLocationCoordinate2D at the given bearing and distance from the original point. +This function uses a great circle on ellipse formula.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func coordinateWithBearing(bearing: Double, distanceMeters: Double) -> CLLocationCoordinate2D
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + bearing + + +
    +

    bearing in degrees clockwise from north.

    +
    +
    + + distanceMeters + + +
    +

    distance in meters.

    +
    +
    +
    +
    +
    +
  • +
  • +
    + + + + earthRadiusMeters() + +
    +
    +
    +
    +
    +
    +

    Return the WGS-84 radius of the earth, in meters, at the given point.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func earthRadiusMeters() -> Double
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Double.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Double.html new file mode 100644 index 00000000..853816c1 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Double.html @@ -0,0 +1,210 @@ + + + + Double Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Double

+
+
+
public extension Double
+ +
+
+ +
+
+
+
    +
  • +
    + + + + short + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Float.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Float.html new file mode 100644 index 00000000..a9c21f79 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Float.html @@ -0,0 +1,210 @@ + + + + Float Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Float

+
+
+
public extension Float
+ +
+
+ +
+
+
+
    +
  • +
    + + + + short + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html new file mode 100644 index 00000000..27f70b1f --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/FloatingPoint.html @@ -0,0 +1,237 @@ + + + + FloatingPoint Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

FloatingPoint

+
+
+
public extension FloatingPoint
+ +
+
+ +
+
+
+
    +
  • +
    + + + + degreesToRadians + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var degreesToRadians: Self { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + radiansToDegrees + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var radiansToDegrees: Self { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Int.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Int.html new file mode 100644 index 00000000..fb46b1bf --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/Int.html @@ -0,0 +1,237 @@ + + + + Int Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Int

+
+
+
public extension Int
+ +
+
+ +
+
+
+
    +
  • +
    + + + + short + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short: String { get }
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + short3 + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var short3: String { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNNode.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNNode.html new file mode 100644 index 00000000..898d6f7d --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNNode.html @@ -0,0 +1,240 @@ + + + + SCNNode Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SCNNode

+
+
+
extension SCNNode
+ +
+
+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Overlapping nodes require unique renderingOrder values to avoid flicker +This method will select random values if you don’t care which node is in front of the other, +or you can specify a particular z-order value +Note: rendering order will be changed later based on distance from camera

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func removeFlicker(withRenderingOrder renderingOrder: Int = Int.random(in: 1..<Int.max))
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Returns a node similar to the one displayed when an ARSCNView‘s .debugOptions includes .showWorldOrigin

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    class func axesNode(quiverLength: CGFloat, quiverThickness: CGFloat) -> SCNNode
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNVector3.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNVector3.html new file mode 100644 index 00000000..1d526db7 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/SCNVector3.html @@ -0,0 +1,211 @@ + + + + SCNVector3 Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SCNVector3

+
+
+
public extension SCNVector3
+ +
+
+ +
+
+
+
    +
  • +
    + + + + distance(to:) + +
    +
    +
    +
    +
    +
    +

    Calculates distance between vectors +Doesn’t include the y axis, matches functionality of CLLocation ‘distance’ function.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func distance(to anotherVector: SCNVector3) -> Float
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/UIView.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/UIView.html new file mode 100644 index 00000000..062e3f73 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Extensions/UIView.html @@ -0,0 +1,210 @@ + + + + UIView Extension Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

UIView

+
+
+
public extension UIView
+ +
+
+ +
+
+
+
    +
  • +
    + + + + image + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var image: UIImage { get }
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 00000000..b5589804 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,355 @@ + + + + Protocols Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    protocol LocationManagerDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + LNTouchDelegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol LNTouchDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol SceneLocationViewEstimateDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol SceneLocationViewDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + SceneTrackingDelegate + +
    +
    +
    +
    +
    +
    +

    Subset of delegate methods from ARSCNViewDelegate to be notified on tracking status changes

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 11.0, *)
    +public protocol SceneTrackingDelegate : AnyObject
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LNTouchDelegate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LNTouchDelegate.html new file mode 100644 index 00000000..37d2dc4d --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LNTouchDelegate.html @@ -0,0 +1,238 @@ + + + + LNTouchDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LNTouchDelegate

+
+
+
public protocol LNTouchDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LocationManagerDelegate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LocationManagerDelegate.html new file mode 100644 index 00000000..269b02e7 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/LocationManagerDelegate.html @@ -0,0 +1,254 @@ + + + + LocationManagerDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationManagerDelegate

+
+
+
protocol LocationManagerDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + locationManagerDidUpdateLocation(_:location:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func locationManagerDidUpdateLocation(_ locationManager: LocationManager, location: CLLocation)
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + locationManagerDidUpdateHeading(_:heading:accuracy:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func locationManagerDidUpdateHeading(_ locationManager: LocationManager, heading: CLLocationDirection, accuracy: CLLocationDirection)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationManagerDelegate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationManagerDelegate.html new file mode 100644 index 00000000..56e30fff --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationManagerDelegate.html @@ -0,0 +1,319 @@ + + + + SceneLocationManagerDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationManagerDelegate

+
+
+
protocol SceneLocationManagerDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewDelegate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewDelegate.html new file mode 100644 index 00000000..a6f9f6a3 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewDelegate.html @@ -0,0 +1,354 @@ + + + + SceneLocationViewDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationViewDelegate

+
+
+
public protocol SceneLocationViewDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewEstimateDelegate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewEstimateDelegate.html new file mode 100644 index 00000000..e878feac --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneLocationViewEstimateDelegate.html @@ -0,0 +1,254 @@ + + + + SceneLocationViewEstimateDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneLocationViewEstimateDelegate

+
+
+
public protocol SceneLocationViewEstimateDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+
+ +
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneTrackingDelegate.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneTrackingDelegate.html new file mode 100644 index 00000000..ce2afe98 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Protocols/SceneTrackingDelegate.html @@ -0,0 +1,293 @@ + + + + SceneTrackingDelegate Protocol Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

SceneTrackingDelegate

+
+
+
@available(iOS 11.0, *)
+public protocol SceneTrackingDelegate : AnyObject
+ +
+
+

Subset of delegate methods from ARSCNViewDelegate to be notified on tracking status changes

+ +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sessionWasInterrupted(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func sessionInterruptionEnded(_ session: ARSession)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func session(_ session: ARSession, didFailWithError error: Error)
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 00000000..461106ad --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,270 @@ + + + + Structures Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Structures

+

The following structures are available globally.

+ +
+
+
+
    +
  • +
    + + + + ARKit_CoreLocation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    struct ARKit_CoreLocation
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + LocationTranslation + +
    +
    +
    +
    +
    +
    +

    Translation in meters between 2 locations

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct LocationTranslation
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + AttributedType + +
    +
    +
    +
    +
    +
    +

    Wrapper to decorate a type with an attribute

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AttributedType<T>
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/ARKit_CoreLocation.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/ARKit_CoreLocation.html new file mode 100644 index 00000000..5d6f83a4 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/ARKit_CoreLocation.html @@ -0,0 +1,211 @@ + + + + ARKit_CoreLocation Structure Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

ARKit_CoreLocation

+
+
+
struct ARKit_CoreLocation
+ +
+
+

Undocumented

+ +
+
+
+
    +
  • +
    + + + + text + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var text: String
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/AttributedType.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/AttributedType.html new file mode 100644 index 00000000..9a80213b --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/AttributedType.html @@ -0,0 +1,265 @@ + + + + AttributedType Structure Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

AttributedType

+
+
+
public struct AttributedType<T>
+ +
+
+

Wrapper to decorate a type with an attribute

+ +
+
+
+
    +
  • +
    + + + + type + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let type: T
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + attribute + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let attribute: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + init(type:attribute:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(type: T, attribute: String)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/LocationTranslation.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/LocationTranslation.html new file mode 100644 index 00000000..878d7827 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Structs/LocationTranslation.html @@ -0,0 +1,293 @@ + + + + LocationTranslation Structure Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

LocationTranslation

+
+
+
public struct LocationTranslation
+ +
+
+

Translation in meters between 2 locations

+ +
+
+
+
    +
  • +
    + + + + latitudeTranslation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var latitudeTranslation: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + longitudeTranslation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var longitudeTranslation: Double
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + altitudeTranslation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var altitudeTranslation: Double
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    This explicit definition is needed because the free init function is marked fileprivate by default, +so LocationTranslation isn’t available to client apps.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(latitudeTranslation: Double, longitudeTranslation: Double, altitudeTranslation: Double)
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/Typealiases.html b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Typealiases.html new file mode 100644 index 00000000..4604baf5 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/Typealiases.html @@ -0,0 +1,206 @@ + + + + Type Aliases Reference + + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+

Type Aliases

+

The following type aliases are available globally.

+ +
+
+
+
    +
  • +
    + + + + BoxBuilder + +
    +
    +
    +
    +
    +
    +

    A block that will build an SCNBox with the provided distance. +Note: the distance should be assigned to the length

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public typealias BoxBuilder = (_ distance: CGFloat) -> SCNBox
    + +
    +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/ARCL.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 00000000..d0db0e13 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/ARCL.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 00000000..103ee29b --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,348 @@ +html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { + background: transparent; + border: 0; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; } + +body { + background-color: #f2f2f2; + font-family: Helvetica, freesans, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: subpixel-antialiased; + word-wrap: break-word; } + +h1, h2, h3 { + margin-top: 0.8em; + margin-bottom: 0.3em; + font-weight: 100; + color: black; } + +h1 { + font-size: 2.5em; } + +h2 { + font-size: 2em; + border-bottom: 1px solid #e2e2e2; } + +h4 { + font-size: 13px; + line-height: 1.5; + margin-top: 21px; } + +h5 { + font-size: 1.1em; } + +h6 { + font-size: 1.1em; + color: #777; } + +.section-name { + color: gray; + display: block; + font-family: Helvetica; + font-size: 22px; + font-weight: 100; + margin-bottom: 15px; } + +pre, code { + font: 0.95em Menlo, monospace; + color: #777; + word-wrap: normal; } + +p code, li code { + background-color: #eee; + padding: 2px 4px; + border-radius: 4px; } + +a { + color: #0088cc; + text-decoration: none; } + +ul { + padding-left: 15px; } + +li { + line-height: 1.8em; } + +img { + max-width: 100%; } + +blockquote { + margin-left: 0; + padding: 0 10px; + border-left: 4px solid #ccc; } + +.content-wrapper { + margin: 0 auto; + width: 980px; } + +header { + font-size: 0.85em; + line-height: 26px; + background-color: #414141; + position: fixed; + width: 100%; + z-index: 1; } + header img { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + header a { + color: #fff; } + header p { + float: left; + color: #999; } + header .header-right { + float: right; + margin-left: 16px; } + +#breadcrumbs { + background-color: #f2f2f2; + height: 27px; + padding-top: 17px; + position: fixed; + width: 100%; + z-index: 1; + margin-top: 26px; } + #breadcrumbs #carat { + height: 10px; + margin: 0 5px; } + +.sidebar { + background-color: #f9f9f9; + border: 1px solid #e2e2e2; + overflow-y: auto; + overflow-x: hidden; + position: fixed; + top: 70px; + bottom: 0; + width: 230px; + word-wrap: normal; } + +.nav-groups { + list-style-type: none; + background: #fff; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #e2e2e2; + font-size: 1.1em; + font-weight: 100; + padding: 15px 0 15px 20px; } + .nav-group-name > a { + color: #333; } + +.nav-group-tasks { + margin-top: 5px; } + +.nav-group-task { + font-size: 0.9em; + list-style-type: none; + white-space: nowrap; } + .nav-group-task a { + color: #888; } + +.main-content { + background-color: #fff; + border: 1px solid #e2e2e2; + margin-left: 246px; + position: absolute; + overflow: hidden; + padding-bottom: 20px; + top: 70px; + width: 734px; } + .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { + margin-bottom: 1em; } + .main-content p { + line-height: 1.8em; } + .main-content section .section:first-child { + margin-top: 0; + padding-top: 0; } + .main-content section .task-group-section .task-group:first-of-type { + padding-top: 10px; } + .main-content section .task-group-section .task-group:first-of-type .section-name { + padding-top: 15px; } + .main-content section .heading:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.section { + padding: 0 25px; } + +.highlight { + background-color: #eee; + padding: 10px 12px; + border: 1px solid #e2e2e2; + border-radius: 4px; + overflow-x: auto; } + +.declaration .highlight { + overflow-x: initial; + padding: 0 40px 40px 0; + margin-bottom: -25px; + background-color: transparent; + border: none; } + +.section-name { + margin: 0; + margin-left: 18px; } + +.task-group-section { + padding-left: 6px; + border-top: 1px solid #e2e2e2; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; + padding-top: 70px; + margin: -70px 0 0; } + .item code { + background-color: transparent; + padding: 0; } + .item .token, .item .direct-link { + padding-left: 3px; + margin-left: 15px; + font-size: 11.9px; + transition: all 300ms; } + .item .token-open { + margin-left: 0px; } + .item .discouraged { + text-decoration: line-through; } + .item .declaration-note { + font-size: .85em; + color: gray; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #e2e2e2; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + background: #f9f9f9; + border-left: 1px solid #e2e2e2; + border-top: 1px solid #e2e2e2; + height: 12px; + left: 21px; + top: -7px; + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + width: 12px; } + +.height-container { + display: none; + left: -25px; + padding: 0 25px; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #f9f9f9; + border-bottom: 1px solid #e2e2e2; + left: -25px; + position: relative; + width: 100%; + padding-top: 10px; + padding-bottom: 5px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4b8afb; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #e2e2e2; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +#footer { + position: relative; + top: 10px; + bottom: 0px; + margin-left: 25px; } + #footer p { + margin: 0; + color: #aaa; + font-size: 0.8em; } + +html.dash header, html.dash #breadcrumbs, html.dash .sidebar { + display: none; } + +html.dash .main-content { + width: 980px; + margin-left: 0; + border: none; + width: 100%; + top: 0; + padding-bottom: 0; } + +html.dash .height-container { + display: block; } + +html.dash .item .token { + margin-left: 0; } + +html.dash .content-wrapper { + width: auto; } + +html.dash #footer { + position: static; } diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/ARCL.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/ARCL.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 ShohtYzipXxh2)4xTk + + + ARCL Reference + + + + + + + + + +
+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+ +

ARKit + CoreLocation

+ +

+ + CI Status + + + MIT License + + + Pods Version + + + Carthage Compatible + +

+ +

ARKit: Uses camera and motion data to map out the local world as you move around.

+ +

CoreLocation: Uses wifi and GPS data to determine your global location, with a low degree of accuracy.

+ +

ARKit + CoreLocation: Combines the high accuracy of AR with the scale of GPS data.

+ +

Points of interest demo Navigation demo

+ +

The potential for combining these technologies is huge, with so many potential applications across many different areas. This library comes with two major features:

+ +
    +
  • Allow items to be placed within the AR world using real-world coordinates.
  • +
  • Dramatically improved location accuracy, using recent location data points combined with knowledge about movement through the AR world.
  • +
+ +

The improved location accuracy is currently in an “experimental” phase, but could be the most important component.

+ +

Because there’s still work to be done there, and in other areas, this project will best be served by an open community, more than what GitHub Issues would allow us. So I’m opening up a Slack group that anyone can join, to discuss the library, improvements to it, and their own work.

+ +

Join the Slack community

+

Requirements

+ +

ARKit requires iOS 11, and supports the following devices:

+ +
    +
  • iPhone 6S and upwards
  • +
  • iPhone SE
  • +
  • iPad (2017)
  • +
  • All iPad Pro models
  • +
+ +

iOS 11 can be downloaded from Apple’s Developer website.

+

Usage

+ +

This library contains the ARKit + CoreLocation framework, as well as a demo application similar to Demo 1.

+ +

Be sure to read the section on True North calibration.

+

Building with Swift:

+
swift build \
+        -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" \
+        -Xswiftc "-target" -Xswiftc "x86_64-apple-ios12.1-simulator"
+
+

Setting up using Swift Package Manager

+

Setting up using CocoaPods

+ +
    +
  1. Add to your podfile:
  2. +
+ +

pod 'ARCL'

+ +
    +
  1. In Terminal, navigate to your project folder, then:
  2. +
+ +

pod update

+ +

pod install

+ +
    +
  1. Add NSCameraUsageDescription and NSLocationWhenInUseUsageDescription to plist with a brief explanation (see demo project for an example)
  2. +
+

Setting up manually

+ +
    +
  1. Add all files from the ARKit+CoreLocation/Source directory to your project.
  2. +
  3. Import ARKit, SceneKit, CoreLocation and MapKit.
  4. +
  5. Add NSCameraUsageDescription and NSLocationWhenInUseUsageDescription to plist with a brief explanation (see demo project for an example)
  6. +
+

Quick start guide

+ +

To place a pin over a building, for example Canary Wharf in London, we’ll use the main class that ARCL is built around - SceneLocationView.

+ +

First, import ARCL and CoreLocation, then declare SceneLocationView as a property:

+
import ARCL
+import CoreLocation
+
+class ViewController: UIViewController {
+  var sceneLocationView = SceneLocationView()
+}
+
+ +

You should call sceneLocationView.run() whenever it’s in focus, and sceneLocationView.pause() if it’s interrupted, such as by moving to a different view or by leaving the app.

+
override func viewDidLoad() {
+  super.viewDidLoad()
+
+  sceneLocationView.run()
+  view.addSubview(sceneLocationView)
+}
+
+override func viewDidLayoutSubviews() {
+  super.viewDidLayoutSubviews()
+
+  sceneLocationView.frame = view.bounds
+}
+
+ +

After we’ve called run(), we can add our coordinate. ARCL comes with a class called LocationNode - an object within the 3D scene which has a real-world location along with a few other properties which allow it to be displayed appropriately within the world. LocationNode is a subclass of SceneKit’s SCNNode, and can also be subclassed further. For this example we’re going to use a subclass called LocationAnnotationNode, which we use to display a 2D image within the world, which always faces us:

+
let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
+let location = CLLocation(coordinate: coordinate, altitude: 300)
+let image = UIImage(named: "pin")!
+
+let annotationNode = LocationAnnotationNode(location: location, image: image)
+
+ +

LocationAnnotationNode can also be initialized using a UIView. Internally, the UIView is converted into UIImage, so you cannot update the content dynamically. +However, this methods allows you to easily show complex layout as POI.

+
let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
+let location = CLLocation(coordinate: coordinate, altitude: 300)
+let view = UIView() // or a custom UIView subclass
+
+let annotationNode = LocationAnnotationNode(location: location, view: view)
+
+ +

It can also be initialized with CALayer. You can use this when you want to update the contents live.

+
let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
+let location = CLLocation(coordinate: coordinate, altitude: 300)
+let layer = CALayer() // or a custom CALayer subclass
+
+let annotationNode = LocationAnnotationNode(location: location, layer: layer)
+
+ +

By default, the image you set should always appear at the size it was given, for example if you give a 100x100 image, it would appear at 100x100 on the screen. This means distant annotation nodes can always be seen at the same size as nearby ones. If you’d rather they scale relative to their distance, you can set LocationAnnotationNode’s scaleRelativeToDistance to true.

+
sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: annotationNode)
+
+ +

There are two ways to add a location node to a scene - using addLocationNodeWithConfirmedLocation, or addLocationNodeForCurrentPosition, which positions it to be in the same position as the device, within the world, and then gives it a coordinate.

+ +

So that’s it. If you set the frame of your sceneLocationView, you should now see the pin hovering above Canary Wharf.

+ +

In order to get a notification when a node is touched in the sceneLocationView, you need to conform to LNTouchDelegate in the ViewController class.

+ +

The annotationNodeTouched(node: AnnotationNode) gives you access to node that was touched on the screen. AnnotationNode is a subclass of SCNNode with two extra properties: image: UIImage? and view: UIView?. Either of these properties will be filled in based on how the LocationAnnotationNode was initialized (using the constructor that takes UIImage or UIView).

+ +

The locationNodeTouched(node: LocationNode) gives you instead access to the nodes created from a PolyNode (e.g. the rendered directions of a MKRoute).

+
class ViewController: UIViewController, LNTouchDelegate {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        //...
+        self.sceneLocationView.locationNodeTouchDelegate = self
+        //...
+    }
+
+    func annotationNodeTouched(node: AnnotationNode) {
+        // Do stuffs with the node instance
+
+        // node could have either node.view or node.image
+        if let nodeView = node.view{
+            // Do stuffs with the nodeView
+            // ...
+        }
+        if let nodeImage = node.image{
+            // Do stuffs with the nodeImage
+            // ...
+        }
+    }
+
+    func locationNodeTouched(node: LocationNode) {
+        guard let name = node.tag else { return }
+        guard let selectedNode = node.childNodes.first(where: { $0.geometry is SCNBox }) else { return }
+
+        // Interact with the selected node
+    }
+
+}
+
+

Additional features

+ +

The library and demo come with a bunch of additional features for configuration. It’s all fully documented to be sure to have a look around.

+ +

SceneLocationView is a subclass of ARSCNView. Note that while this gives you full access to ARSCNView to use it in other ways, you should not set the delegate to another class. If you need to use delegate features then you should subclass SceneLocationView.

+

True North calibration

+ +

One issue which I haven’t personally been able to overcome is that the iPhone’s True North calibration currently has an accuracy of 15º at best. This is fine for maps navigation, but when placing things on top of the AR world, it starts to become a problem.

+ +

I’m confident that this issue can be overcome by using various AR techniques - it’s one area I think can really benefit from a shared effort.

+ +

To improve this currently, I’ve added some functions to the library that allow adjusting the north point:

+ +
    +
  • sceneLocationView.moveSceneHeadingClockwise
  • +
  • sceneLocationView.moveSceneHeadingAntiClockwise
  • +
  • sceneLocationView.resetSceneHeading
  • +
+ +

You should use these by setting sceneLocationView.useTrueNorth to false, and then pointing the device in the general direction of north before beginning, so it’s reasonably close. With useTrueNorth set to true (default), it would continually adjust as it gets a better sense of north.

+ +

Within the demo app, there’s a disabled property called adjustNorthByTappingSidesOfScreen, which accesses these functions, and, once enabled, allows tapping on the left and right of the screen to adjust the scene heading.

+ +

My recommendation would be to fine a nearby landmark which is directly True North from your location, place an object there using a coordinate, and then use the moveSceneHeading functions to adjust the scene until it lines up.

+

Improved Location Accuracy

+ +

CoreLocation can deliver location updates anywhere from every 1-15 seconds, with accuracies which vary from 150m down to 4m. Occasionally, you’ll receive a far more accurate reading, like 4m or 8m, before returning to more inaccurate readings. At the same time, AR uses motion and camera data to create a map of the local world.

+ +

A user may receive a location reading accurate to 4m, then they walk 10m north and receive another location reading accurate to 65m. This 65m-accurate reading is the best that CoreLocation can offer, but knowing the user’s position within the AR scene when they got that 4m reading, and the fact that they’ve walked 10m north through the scene since then, we can translate that data to give them a new coordinate with about 4m of accuracy. This is accurate up to about 100m.

+ +

There is more detail on this on the wiki.

+

Issues

+ +

I mentioned this was experimental - currently, ARKit occasionally gets confused as the user is walking through a scene, and may change their position inaccurately. This issue also seems to affect the “euler angles”, or directional information about the device, so after a short distance it may think you’re walking in a different direction.

+ +

While Apple can improve ARKit over time, I think there are improvements we can make to avoid those issues, such as recognising when it happens and working to correct it, and by comparing location data with our supposed location to determine if we’ve moved outside a possible bounds.

+

Location Algorithm Improvements

+ +

There are further optimisations to determining a user’s location which can be made.

+ +

For example, one technique could be to look at recent location data, translate each data point using the user’s travel since then, and use the overlap between the data points to more narrowly determine the user’s possible location.

+ +

There is more detail on this on the wiki.

+

Going Forward

+ +

We have some Milestones and Issues related to them - anyone is welcome to discuss and contribute to them. Pull requests are welcomed. You can discuss new features/enhancements/bugs either by adding a new Issue or via the Slack community.

+

Thanks

+ +

Library created by @AndrewProjDent, but a community effort from here on.

+ +

Available as open source under the terms of the MIT License.

+ +
+
+ +
+
+ + + diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 00000000..c31dc05e --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,59 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`.token[href="${location.hash}"]`); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); diff --git a/docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 00000000..a1c07fd8 --- /dev/null +++ b/docs/docsets/ARCL.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0A block that will build an SCNBox with the provided distance."},"Structs/AttributedType.html#/s:4ARCL14AttributedTypeV4typexvp":{"name":"type","abstract":"

Undocumented

","parent_name":"AttributedType"},"Structs/AttributedType.html#/s:4ARCL14AttributedTypeV9attributeSSvp":{"name":"attribute","abstract":"

Undocumented

","parent_name":"AttributedType"},"Structs/AttributedType.html#/s:4ARCL14AttributedTypeV4type9attributeACyxGx_SStcfc":{"name":"init(type:attribute:)","abstract":"

Undocumented

","parent_name":"AttributedType"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV08latitudeC0Sdvp":{"name":"latitudeTranslation","abstract":"

Undocumented

","parent_name":"LocationTranslation"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV09longitudeC0Sdvp":{"name":"longitudeTranslation","abstract":"

Undocumented

","parent_name":"LocationTranslation"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV08altitudeC0Sdvp":{"name":"altitudeTranslation","abstract":"

Undocumented

","parent_name":"LocationTranslation"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV08latitudeC009longitudeC008altitudeC0ACSd_S2dtcfc":{"name":"init(latitudeTranslation:longitudeTranslation:altitudeTranslation:)","abstract":"

This explicit definition is needed because the free init function is marked fileprivate by default,","parent_name":"LocationTranslation"},"Structs/ARKit_CoreLocation.html#/s:4ARCL18ARKit_CoreLocationV4textSSvp":{"name":"text","abstract":"

Undocumented

","parent_name":"ARKit_CoreLocation"},"Structs/ARKit_CoreLocation.html":{"name":"ARKit_CoreLocation","abstract":"

Undocumented

"},"Structs/LocationTranslation.html":{"name":"LocationTranslation","abstract":"

Translation in meters between 2 locations

"},"Structs/AttributedType.html":{"name":"AttributedType","abstract":"

Wrapper to decorate a type with an attribute

"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP21sessionWasInterruptedyySo9ARSessionCF":{"name":"sessionWasInterrupted(_:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP24sessionInterruptionEndedyySo9ARSessionCF":{"name":"sessionInterruptionEnded(_:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP7session_16didFailWithErrorySo9ARSessionC_s0I0_ptF":{"name":"session(_:didFailWithError:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP7session_015cameraDidChangeC5StateySo9ARSessionC_So8ARCameraCtF":{"name":"session(_:cameraDidChangeTrackingState:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegateP010didConfirmC6OfNode05scenecD04nodeyAA0bcD0C_AA0cI0CtF":{"name":"didConfirmLocationOfNode(sceneLocationView:node:)","abstract":"

After a node’s location is initially set based on current location,","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegateP08didSetupB4Node05scenecD00iH0yAA0bcD0C_So7SCNNodeCtF":{"name":"didSetupSceneNode(sceneLocationView:sceneNode:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegateP09didUpdatec10AndScaleOfC4Node05scenecD008locationK0yAA0bcD0C_AA0cK0CtF":{"name":"didUpdateLocationAndScaleOfLocationNode(sceneLocationView:locationNode:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegatePAAE06didAddbC8Estimate05scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didAddSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegatePAAE09didRemovebC8Estimate05scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewEstimateDelegate.html#/s:4ARCL33SceneLocationViewEstimateDelegateP06didAddbcE005scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didAddSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewEstimateDelegate"},"Protocols/SceneLocationViewEstimateDelegate.html#/s:4ARCL33SceneLocationViewEstimateDelegateP09didRemovebcE005scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewEstimateDelegate"},"Protocols/LNTouchDelegate.html#/s:4ARCL15LNTouchDelegateP21annotationNodeTouched4nodeyAA010AnnotationE0C_tF":{"name":"annotationNodeTouched(node:)","abstract":"

Undocumented

","parent_name":"LNTouchDelegate"},"Protocols/LNTouchDelegate.html#/s:4ARCL15LNTouchDelegateP19locationNodeTouched4nodeyAA08LocationE0C_tF":{"name":"locationNodeTouched(node:)","abstract":"

Undocumented

","parent_name":"LNTouchDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP13scenePositionSo10SCNVector3VSgvp":{"name":"scenePosition","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP07confirmc9OfDistantC5NodesyyF":{"name":"confirmLocationOfDistantLocationNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP024updatePositionAndScaleOfC5NodesyyF":{"name":"updatePositionAndScaleOfLocationNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP06didAddbC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didAddSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP09didRemovebC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/LocationManagerDelegate.html#/s:4ARCL23LocationManagerDelegateP08locationc9DidUpdateB0_0E0yAA0bC0C_So10CLLocationCtF":{"name":"locationManagerDidUpdateLocation(_:location:)","abstract":"

Undocumented

","parent_name":"LocationManagerDelegate"},"Protocols/LocationManagerDelegate.html#/s:4ARCL23LocationManagerDelegateP08locationC16DidUpdateHeading_7heading8accuracyyAA0bC0C_S2dtF":{"name":"locationManagerDidUpdateHeading(_:heading:accuracy:)","abstract":"

Undocumented

","parent_name":"LocationManagerDelegate"},"Protocols/LocationManagerDelegate.html":{"name":"LocationManagerDelegate","abstract":"

Undocumented

"},"Protocols/SceneLocationManagerDelegate.html":{"name":"SceneLocationManagerDelegate","abstract":"

Undocumented

"},"Protocols/LNTouchDelegate.html":{"name":"LNTouchDelegate","abstract":"

Undocumented

"},"Protocols/SceneLocationViewEstimateDelegate.html":{"name":"SceneLocationViewEstimateDelegate","abstract":"

Undocumented

"},"Protocols/SceneLocationViewDelegate.html":{"name":"SceneLocationViewDelegate","abstract":"

Undocumented

"},"Protocols/SceneTrackingDelegate.html":{"name":"SceneTrackingDelegate","abstract":"

Subset of delegate methods from ARSCNViewDelegate to be notified on tracking status changes

"},"Extensions/UIView.html#/s:So6UIViewC4ARCLE5imageSo7UIImageCvp":{"name":"image","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/SCNVector3.html#/s:So10SCNVector3V4ARCLE8distance2toSfAB_tF":{"name":"distance(to:)","abstract":"

Calculates distance between vectors","parent_name":"SCNVector3"},"Extensions/SCNNode.html#/s:So7SCNNodeC4ARCLE13removeFlicker18withRenderingOrderySi_tF":{"name":"removeFlicker(withRenderingOrder:)","abstract":"

Overlapping nodes require unique renderingOrder values to avoid flicker","parent_name":"SCNNode"},"Extensions/SCNNode.html#/s:So7SCNNodeC4ARCLE8axesNode12quiverLength0E9ThicknessAB12CoreGraphics7CGFloatV_AItFZ":{"name":"axesNode(quiverLength:quiverThickness:)","abstract":"

Returns a node similar to the one displayed when an ARSCNView‘s .debugOptions includes .showWorldOrigin

","parent_name":"SCNNode"},"Extensions/FloatingPoint.html#/s:SF4ARCLE16degreesToRadiansxvp":{"name":"degreesToRadians","abstract":"

Undocumented

","parent_name":"FloatingPoint"},"Extensions/FloatingPoint.html#/s:SF4ARCLE16radiansToDegreesxvp":{"name":"radiansToDegrees","abstract":"

Undocumented

","parent_name":"FloatingPoint"},"Extensions/CLLocationCoordinate2D.html#/s:So22CLLocationCoordinate2DV4ARCLE21coordinateWithBearing7bearing14distanceMetersABSd_SdtF":{"name":"coordinateWithBearing(bearing:distanceMeters:)","abstract":"

Returns a new CLLocationCoordinate2D at the given bearing and distance from the original point.","parent_name":"CLLocationCoordinate2D"},"Extensions/CLLocationCoordinate2D.html#/s:So22CLLocationCoordinate2DV4ARCLE17earthRadiusMetersSdyF":{"name":"earthRadiusMeters()","abstract":"

Return the WGS-84 radius of the earth, in meters, at the given point.

","parent_name":"CLLocationCoordinate2D"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE10coordinate8altitudeABSo0A12Coordinate2DV_Sdtcfc":{"name":"init(coordinate:altitude:)","abstract":"

Undocumented

","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE11translation10toLocationAC0E11TranslationVAB_tF":{"name":"translation(toLocation:)","abstract":"

Translates distance in meters between two locations.","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE18translatedLocation4withAbC0D11TranslationV_tF":{"name":"translatedLocation(with:)","abstract":"

TODO: rewrite .translatedLocation(with:) to improve the accuracy. See unit test notes.

","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE7bearing7betweenSdAB_tF":{"name":"bearing(between:)","abstract":"

Bearing from self to another point. Returns bearing in +/- degrees from north","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE14approxMidpoint2toA2B_tF":{"name":"approxMidpoint(to:)","abstract":"

Returns the midpoint between two locations","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE8debugLogSSvp":{"name":"debugLog","abstract":"

Undocumented

","parent_name":"CLLocation"},"Extensions/CGPoint.html#/s:So7CGPointV4ARCLE15pointWithVector6vectorABSo10SCNVector3V_tFZ":{"name":"pointWithVector(vector:)","abstract":"

Undocumented

","parent_name":"CGPoint"},"Extensions/CGPoint.html#/s:So7CGPointV4ARCLE19radiusContainsPoint0C05pointSb12CoreGraphics7CGFloatV_ABtF":{"name":"radiusContainsPoint(radius:point:)","abstract":"

Undocumented

","parent_name":"CGPoint"},"Extensions/Int.html#/s:Si4ARCLE5shortSSvp":{"name":"short","abstract":"

Undocumented

","parent_name":"Int"},"Extensions/Int.html#/s:Si4ARCLE6short3SSvp":{"name":"short3","abstract":"

Undocumented

","parent_name":"Int"},"Extensions/Float.html#/s:Sf4ARCLE5shortSSvp":{"name":"short","abstract":"

Undocumented

","parent_name":"Float"},"Extensions/Double.html#/s:Sd4ARCLE5shortSSvp":{"name":"short","abstract":"

Undocumented

","parent_name":"Double"},"Extensions/Double.html":{"name":"Double"},"Extensions/Float.html":{"name":"Float"},"Extensions/Int.html":{"name":"Int"},"Extensions/CGPoint.html":{"name":"CGPoint"},"Extensions/CLLocation.html":{"name":"CLLocation"},"Extensions/CLLocationCoordinate2D.html":{"name":"CLLocationCoordinate2D"},"Extensions/FloatingPoint.html":{"name":"FloatingPoint"},"Extensions/SCNNode.html":{"name":"SCNNode"},"Extensions/SCNVector3.html":{"name":"SCNVector3"},"Extensions/UIView.html":{"name":"UIView"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO6normalyA2CmF":{"name":"normal","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO6tieredyACSd_SftcACmF":{"name":"tiered(threshold:scale:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO12doubleTieredyACSd_SfSdSftcACmF":{"name":"doubleTiered(firstThreshold:firstScale:secondThreshold:secondScale:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO6linearyACSd_tcACmF":{"name":"linear(threshold:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO12linearBufferyACSd_SdtcACmF":{"name":"linearBuffer(threshold:buffer:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO03getC0SfSd_SdtcyF":{"name":"getScheme()","abstract":"

Returns a closure to compute appropriate scale factor based on the current value of self (a ScalingSchee).","parent_name":"ScalingScheme"},"Enums/LocationEstimateMethod.html#/s:4ARCL22LocationEstimateMethodO04coreB8DataOnlyyA2CmF":{"name":"coreLocationDataOnly","abstract":"

Only uses Core Location data.","parent_name":"LocationEstimateMethod"},"Enums/LocationEstimateMethod.html#/s:4ARCL22LocationEstimateMethodO012mostRelevantC0yA2CmF":{"name":"mostRelevantEstimate","abstract":"

Combines knowledge about movement through the AR world with","parent_name":"LocationEstimateMethod"},"Enums/LocationEstimateMethod.html":{"name":"LocationEstimateMethod","abstract":"

Different methods which can be used when determining locations (such as the user’s location).

"},"Enums/ScalingScheme.html":{"name":"ScalingScheme","abstract":"

A set of schemes that can be used to scale a LocationNode.

"},"Classes/SceneLocationView/ARTrackingType.html#/s:4ARCL17SceneLocationViewC14ARTrackingTypeO19orientationTrackingyA2EmF":{"name":"orientationTracking","abstract":"

Undocumented

","parent_name":"ARTrackingType"},"Classes/SceneLocationView/ARTrackingType.html#/s:4ARCL17SceneLocationViewC14ARTrackingTypeO13worldTrackingyA2EmF":{"name":"worldTracking","abstract":"

Undocumented

","parent_name":"ARTrackingType"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC10sceneLimitSdvpZ":{"name":"sceneLimit","abstract":"

The limit to the scene, in terms of what data is considered reasonably accurate.","parent_name":"SceneLocationView"},"Classes/SceneLocationView/ARTrackingType.html":{"name":"ARTrackingType","abstract":"

The type of tracking to use.

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC08locationD8DelegateAA0bcdF0_pSgvp":{"name":"locationViewDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC24locationEstimateDelegateAA0bcdfG0_pSgvp":{"name":"locationEstimateDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC25locationNodeTouchDelegateAA07LNTouchH0_pSgvp":{"name":"locationNodeTouchDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC21sceneTrackingDelegateAA0bfG0_pSgvp":{"name":"sceneTrackingDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC05sceneC7ManagerAA0bcF0Cvp":{"name":"sceneLocationManager","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@M@ARCL@objc(cs)SceneLocationView(py)delegate":{"name":"delegate","abstract":"

Addresses Issue #196 -","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC02arD8DelegateSo09ARSCNViewF0_pSgvp":{"name":"arViewDelegate","abstract":"

If you wish to receive delegate ARSCNViewDelegate events, use this instead of the delegate property.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC22locationEstimateMethodAA0cfG0Ovp":{"name":"locationEstimateMethod","abstract":"

The method to use for determining locations.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12showAxesNodeSbvp":{"name":"showAxesNode","abstract":"

When set to true, displays an axes node at the start of the scene

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9sceneNodeSo7SCNNodeCSgvp":{"name":"sceneNode","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC17orientToTrueNorthSbvp":{"name":"orientToTrueNorth","abstract":"

Only to be overrided if you plan on manually setting True North.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC17showFeaturePointsSbvp":{"name":"showFeaturePoints","abstract":"

Whether debugging feature points should be displayed.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC07currentB8PositionSo10SCNVector3VSgvp":{"name":"currentScenePosition","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC18currentEulerAnglesSo10SCNVector3VSgvp":{"name":"currentEulerAngles","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC13locationNodesSayAA0C4NodeCGvp":{"name":"locationNodes","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC13polylineNodesSayAA12PolylineNodeCGvp":{"name":"polylineNodes","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC14arTrackingTypeAC010ARTrackingG0Ovp":{"name":"arTrackingType","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC015didFetchInitialC0Sbvp":{"name":"didFetchInitialLocation","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12trackingType5frame7optionsA2C010ARTrackingF0O_So6CGRectVSDySSypGSgtcfc":{"name":"init(trackingType:frame:options:)","abstract":"

This initializer allows you to specify the type of tracking configuration (defaults to world tracking) as well as","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@M@ARCL@objc(cs)SceneLocationView(im)initWithFrame:options:":{"name":"init(frame:options:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@M@ARCL@objc(cs)SceneLocationView(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC05resetB7HeadingyyF":{"name":"resetSceneHeading()","abstract":"

Resets the scene heading to 0

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC07confirmc2OfC4NodeyyAA0cG0CF":{"name":"confirmLocationOfLocationNode(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC010locationOfC4NodeySo10CLLocationCAA0cG0CF":{"name":"locationOfLocationNode(_:)","abstract":"

Gives the best estimate of the location of a node

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:nodeForAnchor:":{"name":"renderer(_:nodeFor:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didAddNode:forAnchor:":{"name":"renderer(_:didAdd:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:willUpdateNode:forAnchor:":{"name":"renderer(_:willUpdate:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didUpdateNode:forAnchor:":{"name":"renderer(_:didUpdate:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didRemoveNode:forAnchor:":{"name":"renderer(_:didRemove:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)session:didFailWithError:":{"name":"session(_:didFailWithError:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)session:cameraDidChangeTrackingState:":{"name":"session(_:cameraDidChangeTrackingState:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sessionWasInterrupted:":{"name":"sessionWasInterrupted(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sessionInterruptionEnded:":{"name":"sessionInterruptionEnded(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sessionShouldAttemptRelocalization:":{"name":"sessionShouldAttemptRelocalization(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)session:didOutputAudioSampleBuffer:":{"name":"session(_:didOutputAudioSampleBuffer:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didRenderScene:atTime:":{"name":"renderer(_:didRenderScene:atTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:updateAtTime:":{"name":"renderer(_:updateAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didApplyAnimationsAtTime:":{"name":"renderer(_:didApplyAnimationsAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didSimulatePhysicsAtTime:":{"name":"renderer(_:didSimulatePhysicsAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didApplyConstraintsAtTime:":{"name":"renderer(_:didApplyConstraintsAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:willRenderScene:atTime:":{"name":"renderer(_:willRenderScene:atTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC3runyyF":{"name":"run()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC5pauseyyF":{"name":"pause()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC04moveB16HeadingClockwiseyyF":{"name":"moveSceneHeadingClockwise()","abstract":"

iOS can be inaccurate when setting true north","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC04moveB20HeadingAntiClockwiseyyF":{"name":"moveSceneHeadingAntiClockwise()","abstract":"

Moves the scene heading anti-clockwise by 1 degree","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addC22NodeForCurrentPosition08locationF0yAA0cF0C_tF":{"name":"addLocationNodeForCurrentPosition(locationNode:)","abstract":"

Upon being added, a node’s location, locationConfirmed and position may be modified and should not be changed externally.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addC23NodesForCurrentPosition08locationF0ySayAA0C4NodeCG_tF":{"name":"addLocationNodesForCurrentPosition(locationNodes:)","abstract":"

Each node’s addition to the scene can silently fail; See addLocationNodeForCurrentPosition(locationNode:).

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addc17NodeWithConfirmedC008locationF0yAA0cF0C_tF":{"name":"addLocationNodeWithConfirmedLocation(locationNode:)","abstract":"

Silently fails and returns without adding the node unlesslocation is not nil and locationConfirmed is true.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sceneLocationViewTouchedWithSender:":{"name":"sceneLocationViewTouched(sender:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addc18NodesWithConfirmedC008locationF0ySayAA0C4NodeCG_tF":{"name":"addLocationNodesWithConfirmedLocation(locationNodes:)","abstract":"

Each node’s addition to the scene can silently fail; See addLocationNodeWithConfirmedLocation(locationNode:).

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC14removeAllNodesyyF":{"name":"removeAllNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC24sceneContainsNodeWithTagySbSSF":{"name":"sceneContainsNodeWithTag(_:)","abstract":"

Determine if scene contains a node with the specified tag

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9findNodes6taggedSayAA0C4NodeCGSS_tF":{"name":"findNodes(tagged:)","abstract":"

Find all location nodes in the scene tagged with tag

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC06removeC4Node08locationF0yAA0cF0C_tF":{"name":"removeLocationNode(locationNode:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC06removeC5Nodes08locationF0ySayAA0C4NodeCG_tF":{"name":"removeLocationNodes(locationNodes:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9addRoutes6routes10boxBuilderySaySo7MKRouteCG_So6SCNBoxC12CoreGraphics7CGFloatVcSgtF":{"name":"addRoutes(routes:boxBuilder:)","abstract":"

Adds routes to the scene and lets you specify the geometry prototype for the box.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9addRoutes9polylines0012altitude_wBf10boxBuilderySayAA14AttributedTypeVySo10MKPolylineCGG_SdSo6SCNBoxC12CoreGraphics7CGFloatVcSgtF":{"name":"addRoutes(polylines:Δaltitude:boxBuilder:)","abstract":"

Adds polylines to the scene and lets you specify the geometry prototype for the box.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12removeRoutes6routesySaySo7MKRouteCG_tF":{"name":"removeRoutes(routes:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12addPolylines9polylines10boxBuilderySaySo10MKPolylineCG_So6SCNBoxC12CoreGraphics7CGFloatVcSgtF":{"name":"addPolylines(polylines:boxBuilder:)","abstract":"

Adds polylines to the scene and lets you specify the geometry prototype for the box.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC15removePolylines9polylinesySaySo10MKPolylineCG_tF":{"name":"removePolylines(polylines:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC13scenePositionSo10SCNVector3VSgvp":{"name":"scenePosition","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC07confirmc9OfDistantC5NodesyyF":{"name":"confirmLocationOfDistantLocationNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC024updatePositionAndScaleOfC5NodesyyF":{"name":"updatePositionAndScaleOfLocationNodes()","abstract":"

Updates the position and scale of the polylineNodes and the locationNodes.

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC06didAddbC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didAddSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC09didRemovebC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC13locationNodesSayAA08LocationC0CGvp":{"name":"locationNodes","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC8polylineSo10MKPolylineCvp":{"name":"polyline","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC8altitudeSdvp":{"name":"altitude","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC10boxBuilderySo6SCNBoxC12CoreGraphics7CGFloatVcvp":{"name":"boxBuilder","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC8polyline8altitude3tag10boxBuilderACSo10MKPolylineC_SdSSSgSo6SCNBoxC12CoreGraphics7CGFloatVcSgtcfc":{"name":"init(polyline:altitude:tag:boxBuilder:)","abstract":"

Creates a PolylineNode from the provided polyline, altitude (which is assumed to be uniform","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/c:@M@ARCL@objc(cs)PolylineNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC22locationEstimateMethodAA0beF0Ovp":{"name":"locationEstimateMethod","abstract":"

This seems like it should be a bug? Why is it hardcoded? Why would it ever be different from the scene’s setting?

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC8locationSo10CLLocationCSgvp":{"name":"location","abstract":"

Location can be changed and confirmed later by SceneLocationView.

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC3tagSSSgvp":{"name":"tag","abstract":"

A general purpose tag that can be used to find nodes already added to a SceneLocationView

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC17locationConfirmedSbvp":{"name":"locationConfirmed","abstract":"

Whether the location of the node has been confirmed.","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC017continuallyAdjustC23PositionWhenWithinRangeSbvp":{"name":"continuallyAdjustNodePositionWhenWithinRange","abstract":"

Whether a node’s position should be adjusted on an ongoing basis","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC33continuallyUpdatePositionAndScaleSbvp":{"name":"continuallyUpdatePositionAndScale","abstract":"

Whether a node’s position and scale should be updated automatically on a continual basis.","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC23scaleRelativeToDistanceSbvp":{"name":"scaleRelativeToDistance","abstract":"

Whether the node should be scaled relative to its distance from the camera","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC14ignoreAltitudeSbvp":{"name":"ignoreAltitude","abstract":"

Whether the node should appear at the same altitude of the user","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC13scalingSchemeAA07ScalingE0Ovp":{"name":"scalingScheme","abstract":"

The scheme to use for scaling

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC8location3tagACSo10CLLocationCSg_SSSgtcfc":{"name":"init(location:tag:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/c:@M@ARCL@objc(cs)LocationNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC8locationySo10CLLocationCAA05SceneB8EstimateCSgF":{"name":"location(_:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC16adjustedDistance5setup8position08locationcB00H7ManagerSdSb_So10SCNVector3VSo10CLLocationCAA05ScenebI0CtF":{"name":"adjustedDistance(setup:position:locationNodeLocation:locationManager:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC22updatePositionAndScale5setup05sceneE008locationcB00J7Manager12onCompletionySb_So10SCNVector3VSgSo10CLLocationCAA05ScenebK0CyyXEtF":{"name":"updatePositionAndScale(setup:scenePosition:locationNodeLocation:locationManager:onCompletion:)","abstract":"

See LocationAnnotationNode‘s override of this function. Because it doesn’t invoke super’s version, any changes","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC14renderingOrder12fromDistanceSiSd_tF":{"name":"renderingOrder(fromDistance:)","abstract":"

Converts distance from meters to SCNKit rendering order","parent_name":"LocationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC4viewSo6UIViewCSgvp":{"name":"view","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC5imageSo7UIImageCSgvp":{"name":"image","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC5layerSo7CALayerCSgvp":{"name":"layer","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC4view5image5layerACSo6UIViewCSg_So7UIImageCSgSo7CALayerCSgtcfc":{"name":"init(view:image:layer:)","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/c:@M@ARCL@objc(cs)AnnotationNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC010annotationD0AA0cD0Cvp":{"name":"annotationNode","abstract":"

Subnodes and adjustments should be applied to this subnode","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC32annotationHeightAdjustmentFactorSdvp":{"name":"annotationHeightAdjustmentFactor","abstract":"

Parameter to raise or lower the label’s rendering position relative to the node’s actual project location.","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC8location5imageACSo10CLLocationCSg_So7UIImageCtcfc":{"name":"init(location:image:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC8location4viewACSo10CLLocationCSg_So6UIViewCtcfc":{"name":"init(location:view:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC8location5layerACSo10CLLocationCSg_So7CALayerCtcfc":{"name":"init(location:layer:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/c:@M@ARCL@objc(cs)LocationAnnotationNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC22updatePositionAndScale5setup05sceneF008locationdB00K7Manager12onCompletionySb_So10SCNVector3VSgSo10CLLocationCAA05ScenebL0CyyXEtF":{"name":"updatePositionAndScale(setup:scenePosition:locationNodeLocation:locationManager:onCompletion:)","abstract":"

Note: we repeat code from LocationNode‘s implementation of this function. Is this because of the use of SCNTransaction","parent_name":"LocationAnnotationNode"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC05sceneC8DelegateAA0bcdF0_pSgvp":{"name":"sceneLocationDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC22locationEstimateMethodAA0cfG0Ovp":{"name":"locationEstimateMethod","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC08locationD0AA0cD0Cvp":{"name":"locationManager","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC05sceneC9EstimatesSayAA0bC8EstimateCGvp":{"name":"sceneLocationEstimates","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC20updateEstimatesTimerSo7NSTimerCSgvp":{"name":"updateEstimatesTimer","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC04bestC8EstimateAA0bcF0CSgvp":{"name":"bestLocationEstimate","abstract":"

The best estimation of location that has been taken","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC07currentC0So10CLLocationCSgvp":{"name":"currentLocation","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerCACycfc":{"name":"init()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerCfd":{"name":"deinit","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC06updateC4DatayyF":{"name":"updateLocationData()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC03addbC8Estimate8locationySo10CLLocationC_tF":{"name":"addSceneLocationEstimate(location:)","abstract":"

Adds a scene location estimate based on current time, camera position and location from location manager

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC09removeOldC9EstimatesyyF":{"name":"removeOldLocationEstimates()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC09removeOldC9Estimates07currentB8PositionySo10SCNVector3V_tF":{"name":"removeOldLocationEstimates(currentScenePosition:)","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC3runyyF":{"name":"run()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC5pauseyyF":{"name":"pause()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC08locationd9DidUpdateC0_0E0yAA0cD0C_So10CLLocationCtF":{"name":"locationManagerDidUpdateLocation(_:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC8locationSo10CLLocationCvp":{"name":"location","abstract":"

Undocumented

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC8positionSo10SCNVector3Vvp":{"name":"position","abstract":"

Undocumented

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC8location8positionACSo10CLLocationC_So10SCNVector3Vtcfc":{"name":"init(location:position:)","abstract":"

Undocumented

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC19locationTranslation2toAA0cF0VSo10SCNVector3V_tF":{"name":"locationTranslation(to:)","abstract":"

Compares the location’s position to another position, to determine the translation between them

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC010translatedC02toSo10CLLocationCSo10SCNVector3V_tF":{"name":"translatedLocation(to:)","abstract":"

Translates the location by comparing with a given position

","parent_name":"SceneLocationEstimate"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC8delegateAA0bC8Delegate_pSgvp":{"name":"delegate","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC07currentB0So10CLLocationCSgvp":{"name":"currentLocation","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC7headingSdSgvp":{"name":"heading","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC15headingAccuracySdSgvp":{"name":"headingAccuracy","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@M@ARCL@objc(cs)LocationManager(im)init":{"name":"init()","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC20requestAuthorizationyyF":{"name":"requestAuthorization()","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManager:didChangeAuthorizationStatus:":{"name":"locationManager(_:didChangeAuthorization:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManager:didUpdateLocations:":{"name":"locationManager(_:didUpdateLocations:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManager:didUpdateHeading:":{"name":"locationManager(_:didUpdateHeading:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManagerShouldDisplayHeadingCalibration:":{"name":"locationManagerShouldDisplayHeadingCalibration(_:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html":{"name":"LocationManager","abstract":"

Handles retrieving the location and heading from CoreLocation"},"Classes/SceneLocationEstimate.html":{"name":"SceneLocationEstimate","abstract":"

Undocumented

"},"Classes/SceneLocationManager.html":{"name":"SceneLocationManager","abstract":"

Undocumented

"},"Classes/LocationAnnotationNode.html":{"name":"LocationAnnotationNode","abstract":"

A LocationNode which has an attached AnnotationNode.

"},"Classes/AnnotationNode.html":{"name":"AnnotationNode","abstract":"

This node type enables the client to have access to the view or image that"},"Classes/LocationNode.html":{"name":"LocationNode","abstract":"

A location node can be added to a scene using a coordinate.

"},"Classes/PolylineNode.html":{"name":"PolylineNode","abstract":"

A Node that is used to show directions in AR-CL.

"},"Classes/SceneLocationView.html":{"name":"SceneLocationView","abstract":"

Undocumented

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/docsets/ARCL.docset/Contents/Resources/docSet.dsidx b/docs/docsets/ARCL.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..d698f90c337b3a9cc88af2dd6dd248f192edda48 GIT binary patch literal 81920 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

=$g!{HloM1%2ov0m}psod1z-(6$3X+14-$dc+B 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 GLH-9Q14Q2d literal 0 HcmV?d00001 diff --git a/docs/img/carat.png b/docs/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/img/dash.png b/docs/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 ShohtYzipXxh2)4xTk + + + ARCL Reference + + + + + + + + + +

+
+

ARCL Docs (31% documented)

+

View on GitHub

+
+
+
+ +
+
+ +
+
+
+ +

ARKit + CoreLocation

+ +

+ + CI Status + + + MIT License + + + Pods Version + + + Carthage Compatible + +

+ +

ARKit: Uses camera and motion data to map out the local world as you move around.

+ +

CoreLocation: Uses wifi and GPS data to determine your global location, with a low degree of accuracy.

+ +

ARKit + CoreLocation: Combines the high accuracy of AR with the scale of GPS data.

+ +

Points of interest demo Navigation demo

+ +

The potential for combining these technologies is huge, with so many potential applications across many different areas. This library comes with two major features:

+ +
    +
  • Allow items to be placed within the AR world using real-world coordinates.
  • +
  • Dramatically improved location accuracy, using recent location data points combined with knowledge about movement through the AR world.
  • +
+ +

The improved location accuracy is currently in an “experimental” phase, but could be the most important component.

+ +

Because there’s still work to be done there, and in other areas, this project will best be served by an open community, more than what GitHub Issues would allow us. So I’m opening up a Slack group that anyone can join, to discuss the library, improvements to it, and their own work.

+ +

Join the Slack community

+

Requirements

+ +

ARKit requires iOS 11, and supports the following devices:

+ +
    +
  • iPhone 6S and upwards
  • +
  • iPhone SE
  • +
  • iPad (2017)
  • +
  • All iPad Pro models
  • +
+ +

iOS 11 can be downloaded from Apple’s Developer website.

+

Usage

+ +

This library contains the ARKit + CoreLocation framework, as well as a demo application similar to Demo 1.

+ +

Be sure to read the section on True North calibration.

+

Building with Swift:

+
swift build \
+        -Xswiftc "-sdk" -Xswiftc "`xcrun --sdk iphonesimulator --show-sdk-path`" \
+        -Xswiftc "-target" -Xswiftc "x86_64-apple-ios12.1-simulator"
+
+

Setting up using Swift Package Manager

+

Setting up using CocoaPods

+ +
    +
  1. Add to your podfile:
  2. +
+ +

pod 'ARCL'

+ +
    +
  1. In Terminal, navigate to your project folder, then:
  2. +
+ +

pod update

+ +

pod install

+ +
    +
  1. Add NSCameraUsageDescription and NSLocationWhenInUseUsageDescription to plist with a brief explanation (see demo project for an example)
  2. +
+

Setting up manually

+ +
    +
  1. Add all files from the ARKit+CoreLocation/Source directory to your project.
  2. +
  3. Import ARKit, SceneKit, CoreLocation and MapKit.
  4. +
  5. Add NSCameraUsageDescription and NSLocationWhenInUseUsageDescription to plist with a brief explanation (see demo project for an example)
  6. +
+

Quick start guide

+ +

To place a pin over a building, for example Canary Wharf in London, we’ll use the main class that ARCL is built around - SceneLocationView.

+ +

First, import ARCL and CoreLocation, then declare SceneLocationView as a property:

+
import ARCL
+import CoreLocation
+
+class ViewController: UIViewController {
+  var sceneLocationView = SceneLocationView()
+}
+
+ +

You should call sceneLocationView.run() whenever it’s in focus, and sceneLocationView.pause() if it’s interrupted, such as by moving to a different view or by leaving the app.

+
override func viewDidLoad() {
+  super.viewDidLoad()
+
+  sceneLocationView.run()
+  view.addSubview(sceneLocationView)
+}
+
+override func viewDidLayoutSubviews() {
+  super.viewDidLayoutSubviews()
+
+  sceneLocationView.frame = view.bounds
+}
+
+ +

After we’ve called run(), we can add our coordinate. ARCL comes with a class called LocationNode - an object within the 3D scene which has a real-world location along with a few other properties which allow it to be displayed appropriately within the world. LocationNode is a subclass of SceneKit’s SCNNode, and can also be subclassed further. For this example we’re going to use a subclass called LocationAnnotationNode, which we use to display a 2D image within the world, which always faces us:

+
let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
+let location = CLLocation(coordinate: coordinate, altitude: 300)
+let image = UIImage(named: "pin")!
+
+let annotationNode = LocationAnnotationNode(location: location, image: image)
+
+ +

LocationAnnotationNode can also be initialized using a UIView. Internally, the UIView is converted into UIImage, so you cannot update the content dynamically. +However, this methods allows you to easily show complex layout as POI.

+
let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
+let location = CLLocation(coordinate: coordinate, altitude: 300)
+let view = UIView() // or a custom UIView subclass
+
+let annotationNode = LocationAnnotationNode(location: location, view: view)
+
+ +

It can also be initialized with CALayer. You can use this when you want to update the contents live.

+
let coordinate = CLLocationCoordinate2D(latitude: 51.504571, longitude: -0.019717)
+let location = CLLocation(coordinate: coordinate, altitude: 300)
+let layer = CALayer() // or a custom CALayer subclass
+
+let annotationNode = LocationAnnotationNode(location: location, layer: layer)
+
+ +

By default, the image you set should always appear at the size it was given, for example if you give a 100x100 image, it would appear at 100x100 on the screen. This means distant annotation nodes can always be seen at the same size as nearby ones. If you’d rather they scale relative to their distance, you can set LocationAnnotationNode’s scaleRelativeToDistance to true.

+
sceneLocationView.addLocationNodeWithConfirmedLocation(locationNode: annotationNode)
+
+ +

There are two ways to add a location node to a scene - using addLocationNodeWithConfirmedLocation, or addLocationNodeForCurrentPosition, which positions it to be in the same position as the device, within the world, and then gives it a coordinate.

+ +

So that’s it. If you set the frame of your sceneLocationView, you should now see the pin hovering above Canary Wharf.

+ +

In order to get a notification when a node is touched in the sceneLocationView, you need to conform to LNTouchDelegate in the ViewController class.

+ +

The annotationNodeTouched(node: AnnotationNode) gives you access to node that was touched on the screen. AnnotationNode is a subclass of SCNNode with two extra properties: image: UIImage? and view: UIView?. Either of these properties will be filled in based on how the LocationAnnotationNode was initialized (using the constructor that takes UIImage or UIView).

+ +

The locationNodeTouched(node: LocationNode) gives you instead access to the nodes created from a PolyNode (e.g. the rendered directions of a MKRoute).

+
class ViewController: UIViewController, LNTouchDelegate {
+
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        //...
+        self.sceneLocationView.locationNodeTouchDelegate = self
+        //...
+    }
+
+    func annotationNodeTouched(node: AnnotationNode) {
+        // Do stuffs with the node instance
+
+        // node could have either node.view or node.image
+        if let nodeView = node.view{
+            // Do stuffs with the nodeView
+            // ...
+        }
+        if let nodeImage = node.image{
+            // Do stuffs with the nodeImage
+            // ...
+        }
+    }
+
+    func locationNodeTouched(node: LocationNode) {
+        guard let name = node.tag else { return }
+        guard let selectedNode = node.childNodes.first(where: { $0.geometry is SCNBox }) else { return }
+
+        // Interact with the selected node
+    }
+
+}
+
+

Additional features

+ +

The library and demo come with a bunch of additional features for configuration. It’s all fully documented to be sure to have a look around.

+ +

SceneLocationView is a subclass of ARSCNView. Note that while this gives you full access to ARSCNView to use it in other ways, you should not set the delegate to another class. If you need to use delegate features then you should subclass SceneLocationView.

+

True North calibration

+ +

One issue which I haven’t personally been able to overcome is that the iPhone’s True North calibration currently has an accuracy of 15º at best. This is fine for maps navigation, but when placing things on top of the AR world, it starts to become a problem.

+ +

I’m confident that this issue can be overcome by using various AR techniques - it’s one area I think can really benefit from a shared effort.

+ +

To improve this currently, I’ve added some functions to the library that allow adjusting the north point:

+ +
    +
  • sceneLocationView.moveSceneHeadingClockwise
  • +
  • sceneLocationView.moveSceneHeadingAntiClockwise
  • +
  • sceneLocationView.resetSceneHeading
  • +
+ +

You should use these by setting sceneLocationView.useTrueNorth to false, and then pointing the device in the general direction of north before beginning, so it’s reasonably close. With useTrueNorth set to true (default), it would continually adjust as it gets a better sense of north.

+ +

Within the demo app, there’s a disabled property called adjustNorthByTappingSidesOfScreen, which accesses these functions, and, once enabled, allows tapping on the left and right of the screen to adjust the scene heading.

+ +

My recommendation would be to fine a nearby landmark which is directly True North from your location, place an object there using a coordinate, and then use the moveSceneHeading functions to adjust the scene until it lines up.

+

Improved Location Accuracy

+ +

CoreLocation can deliver location updates anywhere from every 1-15 seconds, with accuracies which vary from 150m down to 4m. Occasionally, you’ll receive a far more accurate reading, like 4m or 8m, before returning to more inaccurate readings. At the same time, AR uses motion and camera data to create a map of the local world.

+ +

A user may receive a location reading accurate to 4m, then they walk 10m north and receive another location reading accurate to 65m. This 65m-accurate reading is the best that CoreLocation can offer, but knowing the user’s position within the AR scene when they got that 4m reading, and the fact that they’ve walked 10m north through the scene since then, we can translate that data to give them a new coordinate with about 4m of accuracy. This is accurate up to about 100m.

+ +

There is more detail on this on the wiki.

+

Issues

+ +

I mentioned this was experimental - currently, ARKit occasionally gets confused as the user is walking through a scene, and may change their position inaccurately. This issue also seems to affect the “euler angles”, or directional information about the device, so after a short distance it may think you’re walking in a different direction.

+ +

While Apple can improve ARKit over time, I think there are improvements we can make to avoid those issues, such as recognising when it happens and working to correct it, and by comparing location data with our supposed location to determine if we’ve moved outside a possible bounds.

+

Location Algorithm Improvements

+ +

There are further optimisations to determining a user’s location which can be made.

+ +

For example, one technique could be to look at recent location data, translate each data point using the user’s travel since then, and use the overlap between the data points to more narrowly determine the user’s possible location.

+ +

There is more detail on this on the wiki.

+

Going Forward

+ +

We have some Milestones and Issues related to them - anyone is welcome to discuss and contribute to them. Pull requests are welcomed. You can discuss new features/enhancements/bugs either by adding a new Issue or via the Slack community.

+

Thanks

+ +

Library created by @AndrewProjDent, but a community effort from here on.

+ +

Available as open source under the terms of the MIT License.

+ +
+
+ +
+
+ + + diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js new file mode 100755 index 00000000..c31dc05e --- /dev/null +++ b/docs/js/jazzy.js @@ -0,0 +1,59 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`.token[href="${location.hash}"]`); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); diff --git a/docs/js/jquery.min.js b/docs/js/jquery.min.js new file mode 100644 index 00000000..a1c07fd8 --- /dev/null +++ b/docs/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0A block that will build an SCNBox with the provided distance."},"Structs/AttributedType.html#/s:4ARCL14AttributedTypeV4typexvp":{"name":"type","abstract":"

Undocumented

","parent_name":"AttributedType"},"Structs/AttributedType.html#/s:4ARCL14AttributedTypeV9attributeSSvp":{"name":"attribute","abstract":"

Undocumented

","parent_name":"AttributedType"},"Structs/AttributedType.html#/s:4ARCL14AttributedTypeV4type9attributeACyxGx_SStcfc":{"name":"init(type:attribute:)","abstract":"

Undocumented

","parent_name":"AttributedType"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV08latitudeC0Sdvp":{"name":"latitudeTranslation","abstract":"

Undocumented

","parent_name":"LocationTranslation"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV09longitudeC0Sdvp":{"name":"longitudeTranslation","abstract":"

Undocumented

","parent_name":"LocationTranslation"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV08altitudeC0Sdvp":{"name":"altitudeTranslation","abstract":"

Undocumented

","parent_name":"LocationTranslation"},"Structs/LocationTranslation.html#/s:4ARCL19LocationTranslationV08latitudeC009longitudeC008altitudeC0ACSd_S2dtcfc":{"name":"init(latitudeTranslation:longitudeTranslation:altitudeTranslation:)","abstract":"

This explicit definition is needed because the free init function is marked fileprivate by default,","parent_name":"LocationTranslation"},"Structs/ARKit_CoreLocation.html#/s:4ARCL18ARKit_CoreLocationV4textSSvp":{"name":"text","abstract":"

Undocumented

","parent_name":"ARKit_CoreLocation"},"Structs/ARKit_CoreLocation.html":{"name":"ARKit_CoreLocation","abstract":"

Undocumented

"},"Structs/LocationTranslation.html":{"name":"LocationTranslation","abstract":"

Translation in meters between 2 locations

"},"Structs/AttributedType.html":{"name":"AttributedType","abstract":"

Wrapper to decorate a type with an attribute

"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP21sessionWasInterruptedyySo9ARSessionCF":{"name":"sessionWasInterrupted(_:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP24sessionInterruptionEndedyySo9ARSessionCF":{"name":"sessionInterruptionEnded(_:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP7session_16didFailWithErrorySo9ARSessionC_s0I0_ptF":{"name":"session(_:didFailWithError:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneTrackingDelegate.html#/s:4ARCL21SceneTrackingDelegateP7session_015cameraDidChangeC5StateySo9ARSessionC_So8ARCameraCtF":{"name":"session(_:cameraDidChangeTrackingState:)","abstract":"

Undocumented

","parent_name":"SceneTrackingDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegateP010didConfirmC6OfNode05scenecD04nodeyAA0bcD0C_AA0cI0CtF":{"name":"didConfirmLocationOfNode(sceneLocationView:node:)","abstract":"

After a node’s location is initially set based on current location,","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegateP08didSetupB4Node05scenecD00iH0yAA0bcD0C_So7SCNNodeCtF":{"name":"didSetupSceneNode(sceneLocationView:sceneNode:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegateP09didUpdatec10AndScaleOfC4Node05scenecD008locationK0yAA0bcD0C_AA0cK0CtF":{"name":"didUpdateLocationAndScaleOfLocationNode(sceneLocationView:locationNode:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegatePAAE06didAddbC8Estimate05scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didAddSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewDelegate.html#/s:4ARCL25SceneLocationViewDelegatePAAE09didRemovebC8Estimate05scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewDelegate"},"Protocols/SceneLocationViewEstimateDelegate.html#/s:4ARCL33SceneLocationViewEstimateDelegateP06didAddbcE005scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didAddSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewEstimateDelegate"},"Protocols/SceneLocationViewEstimateDelegate.html#/s:4ARCL33SceneLocationViewEstimateDelegateP09didRemovebcE005scenecD08position8locationyAA0bcD0C_So10SCNVector3VSo10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(sceneLocationView:position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationViewEstimateDelegate"},"Protocols/LNTouchDelegate.html#/s:4ARCL15LNTouchDelegateP21annotationNodeTouched4nodeyAA010AnnotationE0C_tF":{"name":"annotationNodeTouched(node:)","abstract":"

Undocumented

","parent_name":"LNTouchDelegate"},"Protocols/LNTouchDelegate.html#/s:4ARCL15LNTouchDelegateP19locationNodeTouched4nodeyAA08LocationE0C_tF":{"name":"locationNodeTouched(node:)","abstract":"

Undocumented

","parent_name":"LNTouchDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP13scenePositionSo10SCNVector3VSgvp":{"name":"scenePosition","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP07confirmc9OfDistantC5NodesyyF":{"name":"confirmLocationOfDistantLocationNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP024updatePositionAndScaleOfC5NodesyyF":{"name":"updatePositionAndScaleOfLocationNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP06didAddbC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didAddSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/SceneLocationManagerDelegate.html#/s:4ARCL28SceneLocationManagerDelegateP09didRemovebC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationManagerDelegate"},"Protocols/LocationManagerDelegate.html#/s:4ARCL23LocationManagerDelegateP08locationc9DidUpdateB0_0E0yAA0bC0C_So10CLLocationCtF":{"name":"locationManagerDidUpdateLocation(_:location:)","abstract":"

Undocumented

","parent_name":"LocationManagerDelegate"},"Protocols/LocationManagerDelegate.html#/s:4ARCL23LocationManagerDelegateP08locationC16DidUpdateHeading_7heading8accuracyyAA0bC0C_S2dtF":{"name":"locationManagerDidUpdateHeading(_:heading:accuracy:)","abstract":"

Undocumented

","parent_name":"LocationManagerDelegate"},"Protocols/LocationManagerDelegate.html":{"name":"LocationManagerDelegate","abstract":"

Undocumented

"},"Protocols/SceneLocationManagerDelegate.html":{"name":"SceneLocationManagerDelegate","abstract":"

Undocumented

"},"Protocols/LNTouchDelegate.html":{"name":"LNTouchDelegate","abstract":"

Undocumented

"},"Protocols/SceneLocationViewEstimateDelegate.html":{"name":"SceneLocationViewEstimateDelegate","abstract":"

Undocumented

"},"Protocols/SceneLocationViewDelegate.html":{"name":"SceneLocationViewDelegate","abstract":"

Undocumented

"},"Protocols/SceneTrackingDelegate.html":{"name":"SceneTrackingDelegate","abstract":"

Subset of delegate methods from ARSCNViewDelegate to be notified on tracking status changes

"},"Extensions/UIView.html#/s:So6UIViewC4ARCLE5imageSo7UIImageCvp":{"name":"image","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/SCNVector3.html#/s:So10SCNVector3V4ARCLE8distance2toSfAB_tF":{"name":"distance(to:)","abstract":"

Calculates distance between vectors","parent_name":"SCNVector3"},"Extensions/SCNNode.html#/s:So7SCNNodeC4ARCLE13removeFlicker18withRenderingOrderySi_tF":{"name":"removeFlicker(withRenderingOrder:)","abstract":"

Overlapping nodes require unique renderingOrder values to avoid flicker","parent_name":"SCNNode"},"Extensions/SCNNode.html#/s:So7SCNNodeC4ARCLE8axesNode12quiverLength0E9ThicknessAB12CoreGraphics7CGFloatV_AItFZ":{"name":"axesNode(quiverLength:quiverThickness:)","abstract":"

Returns a node similar to the one displayed when an ARSCNView‘s .debugOptions includes .showWorldOrigin

","parent_name":"SCNNode"},"Extensions/FloatingPoint.html#/s:SF4ARCLE16degreesToRadiansxvp":{"name":"degreesToRadians","abstract":"

Undocumented

","parent_name":"FloatingPoint"},"Extensions/FloatingPoint.html#/s:SF4ARCLE16radiansToDegreesxvp":{"name":"radiansToDegrees","abstract":"

Undocumented

","parent_name":"FloatingPoint"},"Extensions/CLLocationCoordinate2D.html#/s:So22CLLocationCoordinate2DV4ARCLE21coordinateWithBearing7bearing14distanceMetersABSd_SdtF":{"name":"coordinateWithBearing(bearing:distanceMeters:)","abstract":"

Returns a new CLLocationCoordinate2D at the given bearing and distance from the original point.","parent_name":"CLLocationCoordinate2D"},"Extensions/CLLocationCoordinate2D.html#/s:So22CLLocationCoordinate2DV4ARCLE17earthRadiusMetersSdyF":{"name":"earthRadiusMeters()","abstract":"

Return the WGS-84 radius of the earth, in meters, at the given point.

","parent_name":"CLLocationCoordinate2D"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE10coordinate8altitudeABSo0A12Coordinate2DV_Sdtcfc":{"name":"init(coordinate:altitude:)","abstract":"

Undocumented

","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE11translation10toLocationAC0E11TranslationVAB_tF":{"name":"translation(toLocation:)","abstract":"

Translates distance in meters between two locations.","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE18translatedLocation4withAbC0D11TranslationV_tF":{"name":"translatedLocation(with:)","abstract":"

TODO: rewrite .translatedLocation(with:) to improve the accuracy. See unit test notes.

","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE7bearing7betweenSdAB_tF":{"name":"bearing(between:)","abstract":"

Bearing from self to another point. Returns bearing in +/- degrees from north","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE14approxMidpoint2toA2B_tF":{"name":"approxMidpoint(to:)","abstract":"

Returns the midpoint between two locations","parent_name":"CLLocation"},"Extensions/CLLocation.html#/s:So10CLLocationC4ARCLE8debugLogSSvp":{"name":"debugLog","abstract":"

Undocumented

","parent_name":"CLLocation"},"Extensions/CGPoint.html#/s:So7CGPointV4ARCLE15pointWithVector6vectorABSo10SCNVector3V_tFZ":{"name":"pointWithVector(vector:)","abstract":"

Undocumented

","parent_name":"CGPoint"},"Extensions/CGPoint.html#/s:So7CGPointV4ARCLE19radiusContainsPoint0C05pointSb12CoreGraphics7CGFloatV_ABtF":{"name":"radiusContainsPoint(radius:point:)","abstract":"

Undocumented

","parent_name":"CGPoint"},"Extensions/Int.html#/s:Si4ARCLE5shortSSvp":{"name":"short","abstract":"

Undocumented

","parent_name":"Int"},"Extensions/Int.html#/s:Si4ARCLE6short3SSvp":{"name":"short3","abstract":"

Undocumented

","parent_name":"Int"},"Extensions/Float.html#/s:Sf4ARCLE5shortSSvp":{"name":"short","abstract":"

Undocumented

","parent_name":"Float"},"Extensions/Double.html#/s:Sd4ARCLE5shortSSvp":{"name":"short","abstract":"

Undocumented

","parent_name":"Double"},"Extensions/Double.html":{"name":"Double"},"Extensions/Float.html":{"name":"Float"},"Extensions/Int.html":{"name":"Int"},"Extensions/CGPoint.html":{"name":"CGPoint"},"Extensions/CLLocation.html":{"name":"CLLocation"},"Extensions/CLLocationCoordinate2D.html":{"name":"CLLocationCoordinate2D"},"Extensions/FloatingPoint.html":{"name":"FloatingPoint"},"Extensions/SCNNode.html":{"name":"SCNNode"},"Extensions/SCNVector3.html":{"name":"SCNVector3"},"Extensions/UIView.html":{"name":"UIView"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO6normalyA2CmF":{"name":"normal","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO6tieredyACSd_SftcACmF":{"name":"tiered(threshold:scale:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO12doubleTieredyACSd_SfSdSftcACmF":{"name":"doubleTiered(firstThreshold:firstScale:secondThreshold:secondScale:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO6linearyACSd_tcACmF":{"name":"linear(threshold:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO12linearBufferyACSd_SdtcACmF":{"name":"linearBuffer(threshold:buffer:)","abstract":"

Undocumented

","parent_name":"ScalingScheme"},"Enums/ScalingScheme.html#/s:4ARCL13ScalingSchemeO03getC0SfSd_SdtcyF":{"name":"getScheme()","abstract":"

Returns a closure to compute appropriate scale factor based on the current value of self (a ScalingSchee).","parent_name":"ScalingScheme"},"Enums/LocationEstimateMethod.html#/s:4ARCL22LocationEstimateMethodO04coreB8DataOnlyyA2CmF":{"name":"coreLocationDataOnly","abstract":"

Only uses Core Location data.","parent_name":"LocationEstimateMethod"},"Enums/LocationEstimateMethod.html#/s:4ARCL22LocationEstimateMethodO012mostRelevantC0yA2CmF":{"name":"mostRelevantEstimate","abstract":"

Combines knowledge about movement through the AR world with","parent_name":"LocationEstimateMethod"},"Enums/LocationEstimateMethod.html":{"name":"LocationEstimateMethod","abstract":"

Different methods which can be used when determining locations (such as the user’s location).

"},"Enums/ScalingScheme.html":{"name":"ScalingScheme","abstract":"

A set of schemes that can be used to scale a LocationNode.

"},"Classes/SceneLocationView/ARTrackingType.html#/s:4ARCL17SceneLocationViewC14ARTrackingTypeO19orientationTrackingyA2EmF":{"name":"orientationTracking","abstract":"

Undocumented

","parent_name":"ARTrackingType"},"Classes/SceneLocationView/ARTrackingType.html#/s:4ARCL17SceneLocationViewC14ARTrackingTypeO13worldTrackingyA2EmF":{"name":"worldTracking","abstract":"

Undocumented

","parent_name":"ARTrackingType"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC10sceneLimitSdvpZ":{"name":"sceneLimit","abstract":"

The limit to the scene, in terms of what data is considered reasonably accurate.","parent_name":"SceneLocationView"},"Classes/SceneLocationView/ARTrackingType.html":{"name":"ARTrackingType","abstract":"

The type of tracking to use.

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC08locationD8DelegateAA0bcdF0_pSgvp":{"name":"locationViewDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC24locationEstimateDelegateAA0bcdfG0_pSgvp":{"name":"locationEstimateDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC25locationNodeTouchDelegateAA07LNTouchH0_pSgvp":{"name":"locationNodeTouchDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC21sceneTrackingDelegateAA0bfG0_pSgvp":{"name":"sceneTrackingDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC05sceneC7ManagerAA0bcF0Cvp":{"name":"sceneLocationManager","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@M@ARCL@objc(cs)SceneLocationView(py)delegate":{"name":"delegate","abstract":"

Addresses Issue #196 -","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC02arD8DelegateSo09ARSCNViewF0_pSgvp":{"name":"arViewDelegate","abstract":"

If you wish to receive delegate ARSCNViewDelegate events, use this instead of the delegate property.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC22locationEstimateMethodAA0cfG0Ovp":{"name":"locationEstimateMethod","abstract":"

The method to use for determining locations.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12showAxesNodeSbvp":{"name":"showAxesNode","abstract":"

When set to true, displays an axes node at the start of the scene

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9sceneNodeSo7SCNNodeCSgvp":{"name":"sceneNode","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC17orientToTrueNorthSbvp":{"name":"orientToTrueNorth","abstract":"

Only to be overrided if you plan on manually setting True North.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC17showFeaturePointsSbvp":{"name":"showFeaturePoints","abstract":"

Whether debugging feature points should be displayed.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC07currentB8PositionSo10SCNVector3VSgvp":{"name":"currentScenePosition","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC18currentEulerAnglesSo10SCNVector3VSgvp":{"name":"currentEulerAngles","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC13locationNodesSayAA0C4NodeCGvp":{"name":"locationNodes","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC13polylineNodesSayAA12PolylineNodeCGvp":{"name":"polylineNodes","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC14arTrackingTypeAC010ARTrackingG0Ovp":{"name":"arTrackingType","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC015didFetchInitialC0Sbvp":{"name":"didFetchInitialLocation","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12trackingType5frame7optionsA2C010ARTrackingF0O_So6CGRectVSDySSypGSgtcfc":{"name":"init(trackingType:frame:options:)","abstract":"

This initializer allows you to specify the type of tracking configuration (defaults to world tracking) as well as","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@M@ARCL@objc(cs)SceneLocationView(im)initWithFrame:options:":{"name":"init(frame:options:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@M@ARCL@objc(cs)SceneLocationView(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC05resetB7HeadingyyF":{"name":"resetSceneHeading()","abstract":"

Resets the scene heading to 0

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC07confirmc2OfC4NodeyyAA0cG0CF":{"name":"confirmLocationOfLocationNode(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC010locationOfC4NodeySo10CLLocationCAA0cG0CF":{"name":"locationOfLocationNode(_:)","abstract":"

Gives the best estimate of the location of a node

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:nodeForAnchor:":{"name":"renderer(_:nodeFor:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didAddNode:forAnchor:":{"name":"renderer(_:didAdd:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:willUpdateNode:forAnchor:":{"name":"renderer(_:willUpdate:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didUpdateNode:forAnchor:":{"name":"renderer(_:didUpdate:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didRemoveNode:forAnchor:":{"name":"renderer(_:didRemove:for:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)session:didFailWithError:":{"name":"session(_:didFailWithError:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)session:cameraDidChangeTrackingState:":{"name":"session(_:cameraDidChangeTrackingState:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sessionWasInterrupted:":{"name":"sessionWasInterrupted(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sessionInterruptionEnded:":{"name":"sessionInterruptionEnded(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sessionShouldAttemptRelocalization:":{"name":"sessionShouldAttemptRelocalization(_:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)session:didOutputAudioSampleBuffer:":{"name":"session(_:didOutputAudioSampleBuffer:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didRenderScene:atTime:":{"name":"renderer(_:didRenderScene:atTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:updateAtTime:":{"name":"renderer(_:updateAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didApplyAnimationsAtTime:":{"name":"renderer(_:didApplyAnimationsAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didSimulatePhysicsAtTime:":{"name":"renderer(_:didSimulatePhysicsAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:didApplyConstraintsAtTime:":{"name":"renderer(_:didApplyConstraintsAtTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)renderer:willRenderScene:atTime:":{"name":"renderer(_:willRenderScene:atTime:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC3runyyF":{"name":"run()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC5pauseyyF":{"name":"pause()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC04moveB16HeadingClockwiseyyF":{"name":"moveSceneHeadingClockwise()","abstract":"

iOS can be inaccurate when setting true north","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC04moveB20HeadingAntiClockwiseyyF":{"name":"moveSceneHeadingAntiClockwise()","abstract":"

Moves the scene heading anti-clockwise by 1 degree","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addC22NodeForCurrentPosition08locationF0yAA0cF0C_tF":{"name":"addLocationNodeForCurrentPosition(locationNode:)","abstract":"

Upon being added, a node’s location, locationConfirmed and position may be modified and should not be changed externally.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addC23NodesForCurrentPosition08locationF0ySayAA0C4NodeCG_tF":{"name":"addLocationNodesForCurrentPosition(locationNodes:)","abstract":"

Each node’s addition to the scene can silently fail; See addLocationNodeForCurrentPosition(locationNode:).

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addc17NodeWithConfirmedC008locationF0yAA0cF0C_tF":{"name":"addLocationNodeWithConfirmedLocation(locationNode:)","abstract":"

Silently fails and returns without adding the node unlesslocation is not nil and locationConfirmed is true.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/c:@CM@ARCL@objc(cs)SceneLocationView(im)sceneLocationViewTouchedWithSender:":{"name":"sceneLocationViewTouched(sender:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC03addc18NodesWithConfirmedC008locationF0ySayAA0C4NodeCG_tF":{"name":"addLocationNodesWithConfirmedLocation(locationNodes:)","abstract":"

Each node’s addition to the scene can silently fail; See addLocationNodeWithConfirmedLocation(locationNode:).

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC14removeAllNodesyyF":{"name":"removeAllNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC24sceneContainsNodeWithTagySbSSF":{"name":"sceneContainsNodeWithTag(_:)","abstract":"

Determine if scene contains a node with the specified tag

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9findNodes6taggedSayAA0C4NodeCGSS_tF":{"name":"findNodes(tagged:)","abstract":"

Find all location nodes in the scene tagged with tag

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC06removeC4Node08locationF0yAA0cF0C_tF":{"name":"removeLocationNode(locationNode:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC06removeC5Nodes08locationF0ySayAA0C4NodeCG_tF":{"name":"removeLocationNodes(locationNodes:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9addRoutes6routes10boxBuilderySaySo7MKRouteCG_So6SCNBoxC12CoreGraphics7CGFloatVcSgtF":{"name":"addRoutes(routes:boxBuilder:)","abstract":"

Adds routes to the scene and lets you specify the geometry prototype for the box.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC9addRoutes9polylines0012altitude_wBf10boxBuilderySayAA14AttributedTypeVySo10MKPolylineCGG_SdSo6SCNBoxC12CoreGraphics7CGFloatVcSgtF":{"name":"addRoutes(polylines:Δaltitude:boxBuilder:)","abstract":"

Adds polylines to the scene and lets you specify the geometry prototype for the box.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12removeRoutes6routesySaySo7MKRouteCG_tF":{"name":"removeRoutes(routes:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC12addPolylines9polylines10boxBuilderySaySo10MKPolylineCG_So6SCNBoxC12CoreGraphics7CGFloatVcSgtF":{"name":"addPolylines(polylines:boxBuilder:)","abstract":"

Adds polylines to the scene and lets you specify the geometry prototype for the box.","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC15removePolylines9polylinesySaySo10MKPolylineCG_tF":{"name":"removePolylines(polylines:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC13scenePositionSo10SCNVector3VSgvp":{"name":"scenePosition","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC07confirmc9OfDistantC5NodesyyF":{"name":"confirmLocationOfDistantLocationNodes()","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC024updatePositionAndScaleOfC5NodesyyF":{"name":"updatePositionAndScaleOfLocationNodes()","abstract":"

Updates the position and scale of the polylineNodes and the locationNodes.

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC06didAddbC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didAddSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/SceneLocationView.html#/s:4ARCL17SceneLocationViewC09didRemovebC8Estimate8position8locationySo10SCNVector3V_So10CLLocationCtF":{"name":"didRemoveSceneLocationEstimate(position:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationView"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC13locationNodesSayAA08LocationC0CGvp":{"name":"locationNodes","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC8polylineSo10MKPolylineCvp":{"name":"polyline","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC8altitudeSdvp":{"name":"altitude","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC10boxBuilderySo6SCNBoxC12CoreGraphics7CGFloatVcvp":{"name":"boxBuilder","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/s:4ARCL12PolylineNodeC8polyline8altitude3tag10boxBuilderACSo10MKPolylineC_SdSSSgSo6SCNBoxC12CoreGraphics7CGFloatVcSgtcfc":{"name":"init(polyline:altitude:tag:boxBuilder:)","abstract":"

Creates a PolylineNode from the provided polyline, altitude (which is assumed to be uniform","parent_name":"PolylineNode"},"Classes/PolylineNode.html#/c:@M@ARCL@objc(cs)PolylineNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"PolylineNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC22locationEstimateMethodAA0beF0Ovp":{"name":"locationEstimateMethod","abstract":"

This seems like it should be a bug? Why is it hardcoded? Why would it ever be different from the scene’s setting?

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC8locationSo10CLLocationCSgvp":{"name":"location","abstract":"

Location can be changed and confirmed later by SceneLocationView.

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC3tagSSSgvp":{"name":"tag","abstract":"

A general purpose tag that can be used to find nodes already added to a SceneLocationView

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC17locationConfirmedSbvp":{"name":"locationConfirmed","abstract":"

Whether the location of the node has been confirmed.","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC017continuallyAdjustC23PositionWhenWithinRangeSbvp":{"name":"continuallyAdjustNodePositionWhenWithinRange","abstract":"

Whether a node’s position should be adjusted on an ongoing basis","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC33continuallyUpdatePositionAndScaleSbvp":{"name":"continuallyUpdatePositionAndScale","abstract":"

Whether a node’s position and scale should be updated automatically on a continual basis.","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC23scaleRelativeToDistanceSbvp":{"name":"scaleRelativeToDistance","abstract":"

Whether the node should be scaled relative to its distance from the camera","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC14ignoreAltitudeSbvp":{"name":"ignoreAltitude","abstract":"

Whether the node should appear at the same altitude of the user","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC13scalingSchemeAA07ScalingE0Ovp":{"name":"scalingScheme","abstract":"

The scheme to use for scaling

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC8location3tagACSo10CLLocationCSg_SSSgtcfc":{"name":"init(location:tag:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/c:@M@ARCL@objc(cs)LocationNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC8locationySo10CLLocationCAA05SceneB8EstimateCSgF":{"name":"location(_:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC16adjustedDistance5setup8position08locationcB00H7ManagerSdSb_So10SCNVector3VSo10CLLocationCAA05ScenebI0CtF":{"name":"adjustedDistance(setup:position:locationNodeLocation:locationManager:)","abstract":"

Undocumented

","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC22updatePositionAndScale5setup05sceneE008locationcB00J7Manager12onCompletionySb_So10SCNVector3VSgSo10CLLocationCAA05ScenebK0CyyXEtF":{"name":"updatePositionAndScale(setup:scenePosition:locationNodeLocation:locationManager:onCompletion:)","abstract":"

See LocationAnnotationNode‘s override of this function. Because it doesn’t invoke super’s version, any changes","parent_name":"LocationNode"},"Classes/LocationNode.html#/s:4ARCL12LocationNodeC14renderingOrder12fromDistanceSiSd_tF":{"name":"renderingOrder(fromDistance:)","abstract":"

Converts distance from meters to SCNKit rendering order","parent_name":"LocationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC4viewSo6UIViewCSgvp":{"name":"view","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC5imageSo7UIImageCSgvp":{"name":"image","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC5layerSo7CALayerCSgvp":{"name":"layer","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/s:4ARCL14AnnotationNodeC4view5image5layerACSo6UIViewCSg_So7UIImageCSgSo7CALayerCSgtcfc":{"name":"init(view:image:layer:)","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/AnnotationNode.html#/c:@M@ARCL@objc(cs)AnnotationNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"AnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC010annotationD0AA0cD0Cvp":{"name":"annotationNode","abstract":"

Subnodes and adjustments should be applied to this subnode","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC32annotationHeightAdjustmentFactorSdvp":{"name":"annotationHeightAdjustmentFactor","abstract":"

Parameter to raise or lower the label’s rendering position relative to the node’s actual project location.","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC8location5imageACSo10CLLocationCSg_So7UIImageCtcfc":{"name":"init(location:image:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC8location4viewACSo10CLLocationCSg_So6UIViewCtcfc":{"name":"init(location:view:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC8location5layerACSo10CLLocationCSg_So7CALayerCtcfc":{"name":"init(location:layer:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/c:@M@ARCL@objc(cs)LocationAnnotationNode(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Undocumented

","parent_name":"LocationAnnotationNode"},"Classes/LocationAnnotationNode.html#/s:4ARCL22LocationAnnotationNodeC22updatePositionAndScale5setup05sceneF008locationdB00K7Manager12onCompletionySb_So10SCNVector3VSgSo10CLLocationCAA05ScenebL0CyyXEtF":{"name":"updatePositionAndScale(setup:scenePosition:locationNodeLocation:locationManager:onCompletion:)","abstract":"

Note: we repeat code from LocationNode‘s implementation of this function. Is this because of the use of SCNTransaction","parent_name":"LocationAnnotationNode"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC05sceneC8DelegateAA0bcdF0_pSgvp":{"name":"sceneLocationDelegate","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC22locationEstimateMethodAA0cfG0Ovp":{"name":"locationEstimateMethod","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC08locationD0AA0cD0Cvp":{"name":"locationManager","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC05sceneC9EstimatesSayAA0bC8EstimateCGvp":{"name":"sceneLocationEstimates","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC20updateEstimatesTimerSo7NSTimerCSgvp":{"name":"updateEstimatesTimer","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC04bestC8EstimateAA0bcF0CSgvp":{"name":"bestLocationEstimate","abstract":"

The best estimation of location that has been taken","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC07currentC0So10CLLocationCSgvp":{"name":"currentLocation","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerCACycfc":{"name":"init()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerCfd":{"name":"deinit","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC06updateC4DatayyF":{"name":"updateLocationData()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC03addbC8Estimate8locationySo10CLLocationC_tF":{"name":"addSceneLocationEstimate(location:)","abstract":"

Adds a scene location estimate based on current time, camera position and location from location manager

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC09removeOldC9EstimatesyyF":{"name":"removeOldLocationEstimates()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC09removeOldC9Estimates07currentB8PositionySo10SCNVector3V_tF":{"name":"removeOldLocationEstimates(currentScenePosition:)","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC3runyyF":{"name":"run()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC5pauseyyF":{"name":"pause()","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationManager.html#/s:4ARCL20SceneLocationManagerC08locationd9DidUpdateC0_0E0yAA0cD0C_So10CLLocationCtF":{"name":"locationManagerDidUpdateLocation(_:location:)","abstract":"

Undocumented

","parent_name":"SceneLocationManager"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC8locationSo10CLLocationCvp":{"name":"location","abstract":"

Undocumented

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC8positionSo10SCNVector3Vvp":{"name":"position","abstract":"

Undocumented

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC8location8positionACSo10CLLocationC_So10SCNVector3Vtcfc":{"name":"init(location:position:)","abstract":"

Undocumented

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC19locationTranslation2toAA0cF0VSo10SCNVector3V_tF":{"name":"locationTranslation(to:)","abstract":"

Compares the location’s position to another position, to determine the translation between them

","parent_name":"SceneLocationEstimate"},"Classes/SceneLocationEstimate.html#/s:4ARCL21SceneLocationEstimateC010translatedC02toSo10CLLocationCSo10SCNVector3V_tF":{"name":"translatedLocation(to:)","abstract":"

Translates the location by comparing with a given position

","parent_name":"SceneLocationEstimate"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC8delegateAA0bC8Delegate_pSgvp":{"name":"delegate","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC07currentB0So10CLLocationCSgvp":{"name":"currentLocation","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC7headingSdSgvp":{"name":"heading","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC15headingAccuracySdSgvp":{"name":"headingAccuracy","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@M@ARCL@objc(cs)LocationManager(im)init":{"name":"init()","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/s:4ARCL15LocationManagerC20requestAuthorizationyyF":{"name":"requestAuthorization()","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManager:didChangeAuthorizationStatus:":{"name":"locationManager(_:didChangeAuthorization:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManager:didUpdateLocations:":{"name":"locationManager(_:didUpdateLocations:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManager:didUpdateHeading:":{"name":"locationManager(_:didUpdateHeading:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html#/c:@CM@ARCL@objc(cs)LocationManager(im)locationManagerShouldDisplayHeadingCalibration:":{"name":"locationManagerShouldDisplayHeadingCalibration(_:)","abstract":"

Undocumented

","parent_name":"LocationManager"},"Classes/LocationManager.html":{"name":"LocationManager","abstract":"

Handles retrieving the location and heading from CoreLocation"},"Classes/SceneLocationEstimate.html":{"name":"SceneLocationEstimate","abstract":"

Undocumented

"},"Classes/SceneLocationManager.html":{"name":"SceneLocationManager","abstract":"

Undocumented

"},"Classes/LocationAnnotationNode.html":{"name":"LocationAnnotationNode","abstract":"

A LocationNode which has an attached AnnotationNode.

"},"Classes/AnnotationNode.html":{"name":"AnnotationNode","abstract":"

This node type enables the client to have access to the view or image that"},"Classes/LocationNode.html":{"name":"LocationNode","abstract":"

A location node can be added to a scene using a coordinate.

"},"Classes/PolylineNode.html":{"name":"PolylineNode","abstract":"

A Node that is used to show directions in AR-CL.

"},"Classes/SceneLocationView.html":{"name":"SceneLocationView","abstract":"

Undocumented

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json new file mode 100644 index 00000000..fab731df --- /dev/null +++ b/docs/undocumented.json @@ -0,0 +1,1132 @@ +{ + "warnings": [ + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/ARKit_CoreLocation.swift", + "line": 1, + "symbol": "ARKit_CoreLocation", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/ARKit_CoreLocation.swift", + "line": 3, + "symbol": "ARKit_CoreLocation.text", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/BaseTypes+Extensions.swift", + "line": 12, + "symbol": "Double.short", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/BaseTypes+Extensions.swift", + "line": 16, + "symbol": "Float.short", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/BaseTypes+Extensions.swift", + "line": 20, + "symbol": "Int.short", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/BaseTypes+Extensions.swift", + "line": 21, + "symbol": "Int.short3", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CGPoint+Extensions.swift", + "line": 13, + "symbol": "CGPoint.pointWithVector(vector:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CGPoint+Extensions.swift", + "line": 17, + "symbol": "CGPoint.radiusContainsPoint(radius:point:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CLLocation+Extensions.swift", + "line": 14, + "symbol": "LocationTranslation.latitudeTranslation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CLLocation+Extensions.swift", + "line": 15, + "symbol": "LocationTranslation.longitudeTranslation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CLLocation+Extensions.swift", + "line": 16, + "symbol": "LocationTranslation.altitudeTranslation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CLLocation+Extensions.swift", + "line": 28, + "symbol": "CLLocation.init(coordinate:altitude:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/CLLocation+Extensions.swift", + "line": 110, + "symbol": "CLLocation.debugLog", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/FloatingPoint+Radians.swift", + "line": 12, + "symbol": "FloatingPoint.degreesToRadians", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Extensions/FloatingPoint+Radians.swift", + "line": 13, + "symbol": "FloatingPoint.radiansToDegrees", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 12, + "symbol": "LocationManagerDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 13, + "symbol": "LocationManagerDelegate.locationManagerDidUpdateLocation(_:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 15, + "symbol": "LocationManagerDelegate.locationManagerDidUpdateHeading(_:heading:accuracy:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 20, + "symbol": "LocationManagerDelegate", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 21, + "symbol": "LocationManagerDelegate.locationManagerDidUpdateLocation(_:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 24, + "symbol": "LocationManagerDelegate.locationManagerDidUpdateHeading(_:heading:accuracy:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 32, + "symbol": "LocationManager.delegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 36, + "symbol": "LocationManager.currentLocation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 38, + "symbol": "LocationManager.heading", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 39, + "symbol": "LocationManager.headingAccuracy", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 41, + "symbol": "LocationManager.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 58, + "symbol": "LocationManager.requestAuthorization()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 77, + "symbol": "LocationManager.locationManager(_:didChangeAuthorization:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 81, + "symbol": "LocationManager.locationManager(_:didUpdateLocations:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 89, + "symbol": "LocationManager.locationManager(_:didUpdateHeading:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/LocationManager.swift", + "line": 96, + "symbol": "LocationManager.locationManagerShouldDisplayHeadingCalibration(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationEstimate.swift", + "line": 12, + "symbol": "SceneLocationEstimate", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationEstimate.swift", + "line": 13, + "symbol": "SceneLocationEstimate", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationEstimate.swift", + "line": 14, + "symbol": "SceneLocationEstimate.location", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationEstimate.swift", + "line": 15, + "symbol": "SceneLocationEstimate.position", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationEstimate.swift", + "line": 17, + "symbol": "SceneLocationEstimate.init(location:position:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 25, + "symbol": "SceneLocationManagerDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 26, + "symbol": "SceneLocationManagerDelegate.scenePosition", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 28, + "symbol": "SceneLocationManagerDelegate.confirmLocationOfDistantLocationNodes()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 29, + "symbol": "SceneLocationManagerDelegate.updatePositionAndScaleOfLocationNodes()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 31, + "symbol": "SceneLocationManagerDelegate.didAddSceneLocationEstimate(position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 32, + "symbol": "SceneLocationManagerDelegate.didRemoveSceneLocationEstimate(position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 35, + "symbol": "SceneLocationManager", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 36, + "symbol": "SceneLocationManager.sceneLocationDelegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 38, + "symbol": "SceneLocationManager.locationEstimateMethod", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 39, + "symbol": "SceneLocationManager.locationManager", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 41, + "symbol": "SceneLocationManager.sceneLocationEstimates", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 43, + "symbol": "SceneLocationManager.updateEstimatesTimer", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 61, + "symbol": "SceneLocationManager.currentLocation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 70, + "symbol": "SceneLocationManager.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 74, + "symbol": "SceneLocationManager.deinit", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 79, + "symbol": "SceneLocationManager.updateLocationData()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 95, + "symbol": "SceneLocationManager.removeOldLocationEstimates()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 100, + "symbol": "SceneLocationManager.removeOldLocationEstimates(currentScenePosition:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 122, + "symbol": "SceneLocationManager", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 123, + "symbol": "SceneLocationManager.run()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 134, + "symbol": "SceneLocationManager.pause()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 140, + "symbol": "SceneLocationManager", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Location Manager/SceneLocationManager.swift", + "line": 142, + "symbol": "SceneLocationManager.locationManagerDidUpdateLocation(_:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationAnnotationNode.swift", + "line": 23, + "symbol": "LocationAnnotationNode.init(location:image:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationAnnotationNode.swift", + "line": 49, + "symbol": "LocationAnnotationNode.init(location:view:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationAnnotationNode.swift", + "line": 53, + "symbol": "LocationAnnotationNode.init(location:layer:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationAnnotationNode.swift", + "line": 71, + "symbol": "LocationAnnotationNode.init(coder:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationAnnotationNode.swift", + "line": 132, + "symbol": "UIView.image", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 16, + "symbol": "AnnotationNode.view", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 17, + "symbol": "AnnotationNode.image", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 18, + "symbol": "AnnotationNode.layer", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 20, + "symbol": "AnnotationNode.init(view:image:layer:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 27, + "symbol": "AnnotationNode.init(coder:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 88, + "symbol": "LocationNode.init(location:tag:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 94, + "symbol": "LocationNode.init(coder:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 98, + "symbol": "LocationNode.location(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/LocationNode.swift", + "line": 111, + "symbol": "LocationNode.adjustedDistance(setup:position:locationNodeLocation:locationManager:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/PolylineNode.swift", + "line": 19, + "symbol": "PolylineNode.locationNodes", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/PolylineNode.swift", + "line": 21, + "symbol": "PolylineNode.polyline", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/PolylineNode.swift", + "line": 22, + "symbol": "PolylineNode.altitude", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/PolylineNode.swift", + "line": 23, + "symbol": "PolylineNode.boxBuilder", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/PolylineNode.swift", + "line": 48, + "symbol": "PolylineNode.init(coder:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/ScalingScheme.swift", + "line": 22, + "symbol": "ScalingScheme.normal", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/ScalingScheme.swift", + "line": 23, + "symbol": "ScalingScheme.tiered(threshold:scale:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/ScalingScheme.swift", + "line": 24, + "symbol": "ScalingScheme.doubleTiered(firstThreshold:firstScale:secondThreshold:secondScale:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/ScalingScheme.swift", + "line": 25, + "symbol": "ScalingScheme.linear(threshold:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Nodes/ScalingScheme.swift", + "line": 26, + "symbol": "ScalingScheme.linearBuffer(threshold:buffer:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 19, + "symbol": "SceneLocationView.renderer(_:nodeFor:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 23, + "symbol": "SceneLocationView.renderer(_:didAdd:for:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 27, + "symbol": "SceneLocationView.renderer(_:willUpdate:for:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 31, + "symbol": "SceneLocationView.renderer(_:didUpdate:for:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 35, + "symbol": "SceneLocationView.renderer(_:didRemove:for:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 46, + "symbol": "SceneLocationView.session(_:didFailWithError:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 54, + "symbol": "SceneLocationView.session(_:cameraDidChangeTrackingState:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 77, + "symbol": "SceneLocationView.sessionWasInterrupted(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 85, + "symbol": "SceneLocationView.sessionInterruptionEnded(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 94, + "symbol": "SceneLocationView.sessionShouldAttemptRelocalization(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 98, + "symbol": "SceneLocationView.session(_:didOutputAudioSampleBuffer:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 109, + "symbol": "SceneLocationView.renderer(_:didRenderScene:atTime:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 133, + "symbol": "SceneLocationView.renderer(_:updateAtTime:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 137, + "symbol": "SceneLocationView.renderer(_:didApplyAnimationsAtTime:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 141, + "symbol": "SceneLocationView.renderer(_:didSimulatePhysicsAtTime:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 145, + "symbol": "SceneLocationView.renderer(_:didApplyConstraintsAtTime:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView+ARSCNViewDelegate.swift", + "line": 149, + "symbol": "SceneLocationView.renderer(_:willRenderScene:atTime:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 17, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 23, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 37, + "symbol": "SceneLocationView.ARTrackingType.orientationTracking", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 38, + "symbol": "SceneLocationView.ARTrackingType.worldTracking", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 41, + "symbol": "SceneLocationView.locationViewDelegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 42, + "symbol": "SceneLocationView.locationEstimateDelegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 43, + "symbol": "SceneLocationView.locationNodeTouchDelegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 44, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 44, + "symbol": "SceneLocationView.sceneTrackingDelegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 46, + "symbol": "SceneLocationView.sceneLocationManager", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 86, + "symbol": "SceneLocationView.sceneNode", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 107, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 110, + "symbol": "SceneLocationView.currentScenePosition", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 115, + "symbol": "SceneLocationView.currentEulerAngles", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 117, + "symbol": "SceneLocationView.locationNodes", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 118, + "symbol": "SceneLocationView.polylineNodes", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 119, + "symbol": "SceneLocationView.arTrackingType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 122, + "symbol": "SceneLocationView.didFetchInitialLocation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 138, + "symbol": "SceneLocationView.init(frame:options:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 143, + "symbol": "SceneLocationView.init(coder:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 167, + "symbol": "SceneLocationView.confirmLocationOfLocationNode(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 189, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 191, + "symbol": "SceneLocationView.run()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 207, + "symbol": "SceneLocationView.pause()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 279, + "symbol": "SceneLocationView.sceneLocationViewTouched(sender:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 303, + "symbol": "SceneLocationView.removeAllNodes()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 331, + "symbol": "SceneLocationView.removeLocationNode(locationNode:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 339, + "symbol": "SceneLocationView.removeLocationNodes(locationNodes:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 345, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 393, + "symbol": "SceneLocationView.removeRoutes(routes:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 403, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 434, + "symbol": "SceneLocationView.removePolylines(polylines:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 444, + "symbol": "SceneLocationView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 445, + "symbol": "SceneLocationView.scenePosition", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 447, + "symbol": "SceneLocationView.confirmLocationOfDistantLocationNodes()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 488, + "symbol": "SceneLocationView.didAddSceneLocationEstimate(position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationView.swift", + "line": 492, + "symbol": "SceneLocationView.didRemoveSceneLocationEstimate(position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 15, + "symbol": "LNTouchDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 16, + "symbol": "LNTouchDelegate.annotationNodeTouched(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 17, + "symbol": "LNTouchDelegate.locationNodeTouched(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 21, + "symbol": "SceneLocationViewEstimateDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 22, + "symbol": "SceneLocationViewEstimateDelegate.didAddSceneLocationEstimate(sceneLocationView:position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 23, + "symbol": "SceneLocationViewEstimateDelegate.didRemoveSceneLocationEstimate(sceneLocationView:position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 27, + "symbol": "SceneLocationViewEstimateDelegate", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 28, + "symbol": "SceneLocationViewEstimateDelegate.didAddSceneLocationEstimate(sceneLocationView:position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 31, + "symbol": "SceneLocationViewEstimateDelegate.didRemoveSceneLocationEstimate(sceneLocationView:position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 37, + "symbol": "SceneLocationViewDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 43, + "symbol": "SceneLocationViewDelegate.didSetupSceneNode(sceneLocationView:sceneNode:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 45, + "symbol": "SceneLocationViewDelegate.didUpdateLocationAndScaleOfLocationNode(sceneLocationView:locationNode:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 52, + "symbol": "SceneTrackingDelegate.sessionWasInterrupted(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 54, + "symbol": "SceneTrackingDelegate.sessionInterruptionEnded(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 56, + "symbol": "SceneTrackingDelegate.session(_:didFailWithError:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 58, + "symbol": "SceneTrackingDelegate.session(_:cameraDidChangeTrackingState:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 63, + "symbol": "SceneLocationViewDelegate", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 64, + "symbol": "SceneLocationViewDelegate.didAddSceneLocationEstimate(sceneLocationView:position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 67, + "symbol": "SceneLocationViewDelegate.didRemoveSceneLocationEstimate(sceneLocationView:position:location:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 74, + "symbol": "SceneLocationViewDelegate.didSetupSceneNode(sceneLocationView:sceneNode:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/SceneLocationViewEstimateDelegate.swift", + "line": 78, + "symbol": "SceneLocationViewDelegate.didUpdateLocationAndScaleOfLocationNode(sceneLocationView:locationNode:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Util/AttributedType.swift", + "line": 12, + "symbol": "AttributedType.type", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Util/AttributedType.swift", + "line": 13, + "symbol": "AttributedType.attribute", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation/Sources/ARKit-CoreLocation/Util/AttributedType.swift", + "line": 15, + "symbol": "AttributedType.init(type:attribute:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + } + ], + "source_directory": "/Users/hal/DevelopmentSandbox/ProjectDent-ARKit-CoreLocation" +} \ No newline at end of file