Created
November 28, 2023 22:13
-
-
Save MichaelDanielTom/855796f23ce81c588d58faf41123146d to your computer and use it in GitHub Desktop.
rnmapbox ModelLayer iOS + js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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