From ebe2e0eb13cf9bae5f401c07124ecc4106bcd5e9 Mon Sep 17 00:00:00 2001 From: Benjamin Devine Date: Mon, 26 Feb 2018 18:44:34 +0100 Subject: [PATCH 1/4] Add constraint prop --- components/lib/createArComponent.js | 2 ++ components/lib/propTypes.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/components/lib/createArComponent.js b/components/lib/createArComponent.js index 548fdcd..0d68437 100644 --- a/components/lib/createArComponent.js +++ b/components/lib/createArComponent.js @@ -18,6 +18,7 @@ import { renderingOrder, rotation, scale, + constraint, transition, } from './propTypes'; import addAnimatedSupport from './addAnimatedSupport'; @@ -45,6 +46,7 @@ const PROP_TYPES_NODE = { castsShadow, renderingOrder, opacity, + constraint, }; const NODE_PROPS = keys(PROP_TYPES_NODE); diff --git a/components/lib/propTypes.js b/components/lib/propTypes.js index d936ae9..fb2f1cc 100644 --- a/components/lib/propTypes.js +++ b/components/lib/propTypes.js @@ -84,6 +84,8 @@ export const colorBufferWriteMask = PropTypes.oneOf( export const opacity = animatableNumber; +export const constraint = PropTypes.oneOf(values(ARKitManager.Constraint)); + export const wrapMode = PropTypes.oneOf(values(ARKitManager.WrapMode)); export const materialProperty = PropTypes.shape({ From c4d9b6326cabfbca8f334bfd3c8cce57ea958bea Mon Sep 17 00:00:00 2001 From: Benjamin Devine Date: Mon, 26 Feb 2018 18:45:19 +0100 Subject: [PATCH 2/4] Add billboard axis constraints --- ios/RCTARKitManager.m | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ios/RCTARKitManager.m b/ios/RCTARKitManager.m index ba501a2..947e285 100644 --- a/ios/RCTARKitManager.m +++ b/ios/RCTARKitManager.m @@ -102,6 +102,13 @@ - (NSDictionary *)constantsToExport @"Clamp": [@(SCNWrapModeClamp) stringValue], @"Repeat": [@(SCNWrapModeRepeat) stringValue], @"Mirror": [@(SCNWrapModeMirror) stringValue], + }, + @"Constraint": @{ + @"None": @"0", + @"BillboardAxisAll": [@(SCNBillboardAxisAll) stringValue], + @"BillboardAxisX": [@(SCNBillboardAxisX) stringValue], + @"BillboardAxisY": [@(SCNBillboardAxisY) stringValue], + @"BillboardAxisZ": [@(SCNBillboardAxisZ) stringValue], } }; } From 05c4aea0b1c47a69d0f6b5a0f5859e57f0b690b2 Mon Sep 17 00:00:00 2001 From: Benjamin Devine Date: Mon, 26 Feb 2018 18:45:46 +0100 Subject: [PATCH 3/4] Implement constraint --- ios/RCTConvert+ARKit.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ios/RCTConvert+ARKit.m b/ios/RCTConvert+ARKit.m index 257085d..b74ed39 100644 --- a/ios/RCTConvert+ARKit.m +++ b/ios/RCTConvert+ARKit.m @@ -441,6 +441,11 @@ + (void)setNodeProperties:(SCNNode *)node properties:(id)json { if (json[@"castsShadow"]) { node.castsShadow = [json[@"castsShadow"] boolValue]; } + if (json[@"constraint"]) { + SCNBillboardConstraint *constraint = [SCNBillboardConstraint billboardConstraint]; + constraint.freeAxes = [json[@"constraint"] integerValue]; + node.constraints = @[constraint]; + } if(json[@"transition"]) { NSDictionary * transition =json[@"transition"]; if(transition[@"duration"]) { From 9622978197f388838a4c1c099767de41aee9de71 Mon Sep 17 00:00:00 2001 From: Benjamin Devine Date: Mon, 26 Feb 2018 20:40:39 +0100 Subject: [PATCH 4/4] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72ee42f..b8c9a0e 100644 --- a/README.md +++ b/README.md @@ -256,7 +256,8 @@ Most 3d object have these common properties | `transition` | `{duration: 1}` | Some property changes can be animated like in css transitions. Currently you can specify the duration (in seconds). | | `renderingOrder` | Number | Order in which object is rendered. Usefull to place elements "behind" others, although they are nearer. | | `categoryBitMask` | Number / bitmask | control which lights affect this object | -| `castsShadow` | `boolean` | whether this object casts hadows | +| `castsShadow` | `boolean` | whether this object casts shadows | +| `constraint` | `ARKit.Constraint.{ BillboardAxisAll \| BillboardAxisX \| BillboardAxisY \| BillboardAxisZ \| None }` | Constrains the node to always point to the camera | *New experimental feature:*