Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save MichaelDanielTom/855796f23ce81c588d58faf41123146d to your computer and use it in GitHub Desktop.
Save MichaelDanielTom/855796f23ce81c588d58faf41123146d to your computer and use it in GitHub Desktop.
rnmapbox ModelLayer iOS + js
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMapView.swift b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMapView.swift
index 02473cf..1bc2483 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMapView.swift
+++ b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXMapView.swift
@@ -1,4 +1,4 @@
-@_spi(Restricted) import MapboxMaps
+@_spi(Experimental) @_spi(Restricted) import MapboxMaps
import Turf
import MapKit
@@ -157,7 +157,31 @@ open class RNMBXMapView: UIView {
_mapView.gestures.delegate = self
setupEvents()
- }
+ loadRadiateData()
+ }
+
+ func loadRadiateData() {
+ let bundlePath = Bundle.main.resourcePath!
+ let modelDirPath = URL(string:"\(bundlePath)/models")!
+
+ if let enumerator = FileManager.default.enumerator(at: modelDirPath,
+ includingPropertiesForKeys: [.isRegularFileKey],
+ options: [.skipsHiddenFiles, .skipsPackageDescendants]) {
+ for case let fileURL as URL in enumerator {
+ do {
+ let fileAttributes = try fileURL.resourceValues(forKeys:[.isRegularFileKey])
+ if fileAttributes.isRegularFile! && fileURL.pathExtension == "glb" {
+ let modelName = fileURL.deletingPathExtension().lastPathComponent
+ print("Radiate loading bundled model file \(fileURL.lastPathComponent) to map.")
+ try! self.mapboxMap.addStyleModel(modelId: modelName, modelUri: fileURL.absoluteString)
+ }
+ } catch {
+ print("Failed Loading Radiate Data \(error)")
+ print(error, fileURL)
+ }
+ }
+ }
+ }
var mapView : MapView! {
get { return _mapView }
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyle.swift b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyle.swift
index 62924ec..ca965cc 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyle.swift
+++ b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyle.swift
@@ -1,7 +1,8 @@
// DO NOT MODIFY
// THIS FILE IS AUTOGENERATED
-import MapboxMaps
+@_spi(Experimental) import MapboxMaps
+
class RNMBXStyle {
var style : Style
@@ -464,12 +465,128 @@ func fillExtrusionLayer(layer: inout FillExtrusionLayer, reactStyle:Dictionary<S
self.setFillExtrusionBaseTransition(&layer, styleValue:styleValue);
} else if (prop == "fillExtrusionVerticalGradient") {
self.setFillExtrusionVerticalGradient(&layer, styleValue:styleValue);
+ } else if (prop == "fillExtrusionEdgeRadius") {
+ layer.fillExtrusionEdgeRadius = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionAmbientOcclusionIntensity") {
+ layer.fillExtrusionAmbientOcclusionIntensity = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionAmbientOcclusionIntensityTransition") {
+ layer.fillExtrusionAmbientOcclusionIntensityTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionAmbientOcclusionGroundAttenuation") {
+ layer.fillExtrusionAmbientOcclusionGroundAttenuation = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionAmbientOcclusionGroundRadius") {
+ layer.fillExtrusionAmbientOcclusionGroundRadius = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionAmbientOcclusionGroundRadiusTransition") {
+ layer.fillExtrusionAmbientOcclusionGroundRadiusTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionAmbientOcclusionWallRadius") {
+ layer.fillExtrusionAmbientOcclusionWallRadius = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionAmbientOcclusionWallRadiusTransition") {
+ layer.fillExtrusionAmbientOcclusionWallRadiusTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionFloodLightColor") {
+ layer.fillExtrusionFloodLightColor = styleValue.mglStyleValueColor();
+ } else if (prop == "fillExtrusionFloodLightColorTransition") {
+ layer.fillExtrusionFloodLightColorTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionFloodLightGroundAttenuation") {
+ layer.fillExtrusionFloodLightGroundAttenuation = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionFloodLightGroundAttenuationTransition") {
+ layer.fillExtrusionFloodLightGroundAttenuationTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionFloodLightGroundRadius") {
+ layer.fillExtrusionFloodLightGroundRadius = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionFloodLightGroundRadiusTransition") {
+ layer.fillExtrusionFloodLightGroundRadiusTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionFloodLightIntensity") {
+ layer.fillExtrusionFloodLightIntensity = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionFloodLightIntensityTransition") {
+ layer.fillExtrusionFloodLightIntensityTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionFloodLightWallRadius") {
+ layer.fillExtrusionFloodLightWallRadius = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionRoundedRoof") {
+ layer.fillExtrusionRoundedRoof = styleValue.mglStyleValueBoolean();
+ } else if (prop == "fillExtrusionTranslate") {
+ layer.fillExtrusionTranslate = styleValue.mglStyleValueArrayNumber();
+ } else if (prop == "fillExtrusionTranslateTransition") {
+ layer.fillExtrusionTranslateTransition = styleValue.getTransition();
+ } else if (prop == "fillExtrusionVerticalScale") {
+ layer.fillExtrusionVerticalScale = styleValue.mglStyleValueNumber();
+ } else if (prop == "fillExtrusionVerticalScaleTransition") {
+ layer.fillExtrusionVerticalScaleTransition = styleValue.getTransition();
} else {
Logger.log(level:.error, message: "Unexpected property \(prop) for layer: fill-extrusion")
}
}
}
+public func modelLayer(layer: inout ModelLayer, reactStyle:Dictionary<String, Any>, oldReactStyle:Dictionary<String, Any>?, applyUpdater: @escaping ((inout ModelLayer)->Void)->Void, isValid: @escaping () -> Bool)
+{
+ guard self._hasReactStyle(reactStyle) else {
+ Logger.log(level:.error, message: "Invalid style: \(reactStyle)")
+ return
+ }
+
+ let styleProps = reactStyle.keys
+ for prop in styleProps {
+ if (prop == "__MAPBOX_STYLESHEET__") {
+ continue;
+ }
+
+ let styleValue = RNMBXStyleValue.make(reactStyle[prop])
+
+ if (prop == "modelRotation") {
+ layer.modelRotation = styleValue.mglStyleValueArrayNumber();
+ } else if (prop == "visibility") {
+ layer.visibility = styleValue.isVisible();
+ } else if (prop == "modelId") {
+ layer.modelId = styleValue.mglStyleValueString();
+ } else if (prop == "modelRotationTransition") {
+ layer.modelRotationTransition = styleValue.getTransition();
+ } else if (prop == "modelScaleTransition") {
+ layer.modelScaleTransition = styleValue.getTransition();
+ } else if (prop == "modelRoughness") {
+ layer.modelRoughness = styleValue.mglStyleValueNumber();
+ } else if (prop == "modelRoughnessTransition") {
+ layer.modelRoughnessTransition = styleValue.getTransition();
+ } else if (prop == "modelReceiveShadows") {
+ layer.modelReceiveShadows = styleValue.mglStyleValueBoolean();
+ } else if (prop == "modelCastShadows") {
+ layer.modelCastShadows = styleValue.mglStyleValueBoolean();
+ } else if (prop == "modelEmissiveStrength") {
+ layer.modelEmissiveStrength = styleValue.mglStyleValueNumber();
+ } else if (prop == "modelEmissiveStrengthTransition") {
+ layer.modelEmissiveStrengthTransition = styleValue.getTransition();
+ } else if (prop == "modelColor") {
+ layer.modelColor = styleValue.mglStyleValueColor();
+ } else if (prop == "modelColorTransition") {
+ layer.modelColorTransition = styleValue.getTransition();
+ } else if (prop == "modelOpacity") {
+ layer.modelOpacity = styleValue.mglStyleValueNumber();
+ } else if (prop == "modelOpacityTransition") {
+ layer.modelOpacityTransition = styleValue.getTransition();
+ } else if (prop == "modelColorMixIntensity") {
+ layer.modelColorMixIntensity = styleValue.mglStyleValueNumber();
+ } else if (prop == "modelColorMixIntensityTransition") {
+ layer.modelColorMixIntensityTransition = styleValue.getTransition();
+ } else if (prop == "modelAmbientOcclusionIntensity") {
+ layer.modelAmbientOcclusionIntensity = styleValue.mglStyleValueNumber();
+ } else if (prop == "modelAmbientOcclusionIntensityTransition") {
+ layer.modelAmbientOcclusionIntensityTransition = styleValue.getTransition();
+ } else if (prop == "modelHeightBasedEmissiveStrengthMultiplier") {
+ layer.modelHeightBasedEmissiveStrengthMultiplier = styleValue.mglStyleValueArrayNumber();
+ } else if (prop == "modelHeightBasedEmissiveStrengthMultiplierTransition") {
+ layer.modelHeightBasedEmissiveStrengthMultiplierTransition = styleValue.getTransition();
+ } else if (prop == "modelTranslation") {
+ layer.modelTranslation = styleValue.mglStyleValueArrayNumber();
+ } else if (prop == "modelScale") {
+ layer.modelScale = styleValue.mglStyleValueArrayNumber();
+ } else if (prop == "modelScaleTransition") {
+ layer.modelScaleTransition = styleValue.getTransition();
+ } else if (prop == "modelScaleMode") {
+ layer.modelScaleMode = styleValue.mglStyleValueEnum();
+ } else {
+ Logger.log(level:.error, message: "Unexpected property \(prop) for layer: model")
+ }
+ }
+}
+
+
func rasterLayer(layer: inout RasterLayer, reactStyle:Dictionary<String, Any>, oldReactStyle:Dictionary<String, Any>?, applyUpdater: @escaping ((inout RasterLayer)->Void)->Void, isValid: @escaping () -> Bool)
{
guard self._hasReactStyle(reactStyle) else {
@@ -2286,7 +2403,7 @@ func setColor(_ layer: inout Light, styleValue: RNMBXStyleValue)
{
- layer.color = styleValue.mglStyleValueColorRaw();
+ layer.color = styleValue.mglStyleValueColor();
}
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyleValue.swift b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyleValue.swift
index acf2060..7569d9b 100644
--- a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyleValue.swift
+++ b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXStyleValue.swift
@@ -280,23 +280,6 @@ class RNMBXStyleValue {
return decodedExpression
}
- #if RNMBX_11
- func mglStyleValueColorRaw() -> Value<StyleColor> {
- guard let value = value as? Dictionary<String,Any> else {
- Logger.log(level: .error, message: "Invalid value for color: \(value) retuning red")
- return .constant(StyleColor(UIColor.red))
- }
- let valueObj = RNMBXStyleValue.convert(value["stylevalue"] as! [String:Any])
-
- if let num = value as? Int {
- let uicolor = uicolor(num)
- return .constant(StyleColor(uicolor))
- } else {
- Logger.log(level: .error, message: "Unexpeted value for color: \(valueObj), retuning red")
- return .constant(StyleColor(UIColor.red))
- }
- }
- #else
func mglStyleValueColorRaw() -> StyleColor {
guard let value = value as? Dictionary<String,Any> else {
Logger.log(level: .error, message: "Invalid value for color: \(value) retuning red")
@@ -312,7 +295,6 @@ class RNMBXStyleValue {
return StyleColor(UIColor.red)
}
}
- #endif
func mglStyleValueBoolean() -> Value<Bool> {
guard let value = value as? Dictionary<String,Any> else {
@@ -358,6 +340,28 @@ class RNMBXStyleValue {
}
}
+ func mglStyleValueString() -> Value<String> {
+ guard let value = value as? Dictionary<String,Any> else {
+ Logger.log(level: .error, message: "Invalid value for string: \(value)")
+ return Value.constant("")
+ }
+
+ let valueObj = RNMBXStyleValue.convert(value["stylevalue"] as! [String:Any])
+
+ if let valueObj = valueObj as? String {
+ return .constant(valueObj)
+ } else {
+ do {
+ let data = try JSONSerialization.data(withJSONObject: valueObj, options: .prettyPrinted)
+ let decodedExpression = try JSONDecoder().decode(Expression.self, from: data)
+ return .expression(decodedExpression)
+ } catch {
+ Logger.log(level: .error, message: "Invalid value for string: \(value) error: \(error) setting dummy value")
+ return .constant("")
+ }
+ }
+ }
+
func mglStyleValueArrayString() -> Value<[String]> {
guard let value = value as? Dictionary<String,Any> else {
Logger.log(level: .error, message: "Invalid value for array of strings: \(value)")
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayer.swift b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayer.swift
new file mode 100644
index 0000000..7d80157
--- /dev/null
+++ b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayer.swift
@@ -0,0 +1,61 @@
+@_spi(Experimental) import MapboxMaps
+
+let modelSourceID = "radmodel-source"
+let modelLayerID = "radmodel-layer"
+
+@objc(RNMBXModelLayer)
+class RNMBXModelLayer: RNMBXLayer {
+ typealias LayerType = ModelLayer
+
+ override func makeLayer(style: Style) throws -> Layer {
+// let _ : ModelSource = try self.layerWithSourceID(in: style)
+ var layer = LayerType(id: self.id!, source: self.sourceID ?? "")
+ layer.sourceLayer = self.sourceLayerID
+ layer.source = sourceID
+ return layer
+ }
+
+ override func layerType() -> Layer.Type {
+ return LayerType.self
+ }
+
+ override func apply(style : Style) throws {
+ try style.updateLayer(withId: id, type: LayerType.self) { (layer : inout LayerType) in
+ if let styleLayer = self.styleLayer as? LayerType {
+ layer = styleLayer
+ }
+ }
+ }
+
+ override func addStyles() {
+ if let style : Style = self.style {
+ let styler = RNMBXStyle(style: self.style!)
+ styler.bridge = self.bridge
+
+ if var styleLayer = self.styleLayer as? LayerType,
+ let reactStyle = self.reactStyle {
+
+ styler.modelLayer(
+ layer: &styleLayer,
+ reactStyle: reactStyle,
+ oldReactStyle: oldReatStyle,
+ applyUpdater: { (updater) in logged("RNMBXModelLayer.addStyles") {
+ try style.updateLayer(withId: self.id, type: LayerType.self) { (layer: inout LayerType) in updater(&layer) }
+ }},
+ isValid: {
+ return self.isAddedToMap()
+ }
+ )
+ self.styleLayer = styleLayer
+ }
+ }
+ }
+
+ func isAddedToMap() -> Bool {
+ return true
+ }
+
+ internal override func hasSource() -> Bool {
+ return false
+ }
+}
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayerViewManager.m b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayerViewManager.m
new file mode 100644
index 0000000..563491a
--- /dev/null
+++ b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayerViewManager.m
@@ -0,0 +1,9 @@
+#import <React/RCTBridgeModule.h>
+#import <React/RCTViewManager.h>
+
+@interface RCT_EXTERN_REMAP_MODULE(RNMBXModelLayer, RNMBXModelLayerViewManager, RCTViewManager)
+
+// standard layer props
+#include "CommonLayerProperties.H"
+
+@end
diff --git a/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayerViewManager.swift b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayerViewManager.swift
new file mode 100644
index 0000000..c5ed481
--- /dev/null
+++ b/node_modules/@rnmapbox/maps/ios/RNMBX/RNMBXModelLayerViewManager.swift
@@ -0,0 +1,13 @@
+@objc(RNMBXModelLayerViewManager)
+class RNMBXModelLayerViewManager: RCTViewManager {
+ @objc
+ override static func requiresMainQueueSetup() -> Bool {
+ return true
+ }
+
+ override func view() -> UIView! {
+ let layer = RNMBXModelLayer()
+ layer.bridge = self.bridge
+ return layer
+ }
+}
diff --git a/node_modules/@rnmapbox/maps/src/Mapbox.ts b/node_modules/@rnmapbox/maps/src/Mapbox.ts
index dd61194..65e3507 100644
--- a/node_modules/@rnmapbox/maps/src/Mapbox.ts
+++ b/node_modules/@rnmapbox/maps/src/Mapbox.ts
@@ -34,6 +34,7 @@ export { default as HeatmapLayer } from './components/HeatmapLayer';
export { default as LineLayer } from './components/LineLayer';
export { default as CircleLayer } from './components/CircleLayer';
export { default as SkyLayer } from './components/SkyLayer';
+export { default as ModelLayer } from './components/ModelLayer';
export { SymbolLayer } from './components/SymbolLayer';
export { default as RasterLayer } from './components/RasterLayer';
export { default as BackgroundLayer } from './components/BackgroundLayer';
diff --git a/node_modules/@rnmapbox/maps/src/components/ModelLayer.tsx b/node_modules/@rnmapbox/maps/src/components/ModelLayer.tsx
new file mode 100644
index 0000000..f92196d
--- /dev/null
+++ b/node_modules/@rnmapbox/maps/src/components/ModelLayer.tsx
@@ -0,0 +1,73 @@
+import React from 'react';
+import {NativeModules, requireNativeComponent} from 'react-native';
+
+import {FilterExpression, SkyLayerStyleProps} from '../utils/MapboxStyles';
+import {StyleValue} from '../utils/StyleValue';
+
+import AbstractLayer from './AbstractLayer';
+
+const MapboxGL = NativeModules.RNMBXModule;
+
+export const NATIVE_MODULE_NAME = 'RNMBXModelLayer';
+
+export type Props = {
+ /**
+ * A string that uniquely identifies the source in the style to which it is added.
+ */
+ id: string;
+
+ /**
+ * The id refers to en existing layer in the style. Does not create a new layer.
+ */
+ existing?: boolean;
+
+ /**
+ * The source from which to obtain the data to style.
+ * If the source has not yet been added to the current style, the behavior is undefined.
+ */
+ sourceID?: string;
+
+ /**
+ * Inserts a layer above aboveLayerID.
+ */
+ aboveLayerID?: string;
+
+ /**
+ * Inserts a layer below belowLayerID
+ */
+ belowLayerID?: string;
+
+ /**
+ * Inserts a layer at a specified index
+ */
+ layerIndex?: number;
+
+ /**
+ * Filter only the features in the source layer that satisfy a condition that you define
+ */
+ filter?: FilterExpression;
+
+ /**
+ * Customizable style attributes
+ */
+ style?: any;
+} & React.ComponentProps<typeof AbstractLayer>;
+
+type NativeTypeProps = Omit<Props, 'style'> & {
+ reactStyle?: { [key: string]: StyleValue };
+};
+
+class ModelLayer extends AbstractLayer<Props, NativeTypeProps> {
+ static defaultProps = {
+ sourceID: MapboxGL.StyleSource.DefaultSourceID,
+ };
+
+ render() {
+ return <RNMBXModelLayer ref={this.setNativeLayer} {...this.baseProps} />;
+ }
+}
+
+const RNMBXModelLayer =
+ requireNativeComponent<NativeTypeProps>(NATIVE_MODULE_NAME);
+
+export default ModelLayer;
diff --git a/node_modules/@rnmapbox/maps/src/utils/styleMap.ts b/node_modules/@rnmapbox/maps/src/utils/styleMap.ts
index 20a81c9..25a4030 100644
--- a/node_modules/@rnmapbox/maps/src/utils/styleMap.ts
+++ b/node_modules/@rnmapbox/maps/src/utils/styleMap.ts
@@ -175,6 +175,64 @@ const styleMap = {
fillExtrusionBase: StyleTypes.Constant,
fillExtrusionBaseTransition: StyleTypes.Transition,
fillExtrusionVerticalGradient: StyleTypes.Constant,
+ fillExtrusionEdgeRadius: StyleTypes.Constant,
+ fillExtrusionAmbientOcclusionIntensity: StyleTypes.Constant,
+ fillExtrusionAmbientOcclusionIntensityTransition: StyleTypes.Transition,
+ fillExtrusionAmbientOcclusionGroundAttenuation: StyleTypes.Constant,
+ fillExtrusionAmbientOcclusionGroundRadius: StyleTypes.Constant,
+ fillExtrusionAmbientOcclusionGroundRadiusTransition: StyleTypes.Transition,
+ fillExtrusionAmbientOcclusionWallRadius: StyleTypes.Constant,
+ fillExtrusionAmbientOcclusionWallRadiusTransition: StyleTypes.Transition,
+ fillExtrusionFloodLightColor: StyleTypes.Color,
+ fillExtrusionFloodLightColorTransition: StyleTypes.Transition,
+ fillExtrusionFloodLightGroundAttenuation: StyleTypes.Constant,
+ fillExtrusionFloodLightGroundAttenuationTransition: StyleTypes.Transition,
+ fillExtrusionFloodLightGroundRadius: StyleTypes.Constant,
+ fillExtrusionFloodLightGroundRadiusTransition: StyleTypes.Transition,
+ fillExtrusionFloodLightIntensity: StyleTypes.Constant,
+ fillExtrusionFloodLightIntensityTransition: StyleTypes.Transition,
+ fillExtrusionFloodLightWallRadius: StyleTypes.Constant,
+ fillExtrusionRoundedRoof: StyleTypes.Constant,
+ fillExtrusionTranslate: StyleTypes.Constant,
+ fillExtrusionTranslateTransition: StyleTypes.Transition,
+ fillExtrusionVerticalScale: StyleTypes.Constant,
+ fillExtrusionVerticalScaleTransition: StyleTypes.Transition,
+
+ modelName: StyleTypes.Enum,
+ modelScale: StyleTypes.Constant,
+ modelTranslation: StyleTypes.Constant,
+ modelRotation: StyleTypes.Constant,
+ modelRotationTransition: StyleTypes.Transition,
+ modelScaleTransition: StyleTypes.Transition,
+ modelRoughness: StyleTypes.Constant,
+ modelRoughnessTransition: StyleTypes.Transition,
+ modelReceiveShadows: StyleTypes.Constant,
+ modelCastShadows: StyleTypes.Constant,
+ modelEmissiveStrength: StyleTypes.Constant,
+ modelEmissiveStrengthTransition: StyleTypes.Transition,
+ modelColor: StyleTypes.Color,
+ modelColorTransition: StyleTypes.Transition,
+ modelOpacity: StyleTypes.Constant,
+ modelOpacityTransition: StyleTypes.Transition,
+ modelColorMixIntensity: StyleTypes.Constant,
+ modelColorMixIntensityTransition: StyleTypes.Transition,
+ modelAmbientOcclusionIntensity: StyleTypes.Constant,
+ modelAmbientOcclusionIntensityTransition: StyleTypes.Transition,
+ modelHeightBasedEmissiveStrengthMultiplier: StyleTypes.Constant,
+ modelHeightBasedEmissiveStrengthMultiplierTransition: StyleTypes.Transition,
+ modelTranslation: StyleTypes.Constant,
+ modelScale: StyleTypes.Constant,
+ modelScaleTransition: StyleTypes.Transition,
+ modelScaleMode: StyleTypes.Enum,
+ modelId: StyleTypes.Constant,
rasterOpacity: StyleTypes.Constant,
rasterOpacityTransition: StyleTypes.Transition,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment