# MGLFillExtrusionStyleLayer

    @interface MGLFillExtrusionStyleLayer : MGLVectorStyleLayer

An `MGLFillExtrusionStyleLayer` is a style layer that renders one or more 3D extruded polygons on the map.

Use a fill-extrusion style layer to configure the visual appearance of polygon or multipolygon features. These features can come from vector tiles loaded by an `MGLVectorTileSource` object, or they can be `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` or `MGLComputedShapeSource` object.

You can access an existing fill-extrusion style layer using the `-[MGLStyle layerWithIdentifier:]` method if you know its identifier; otherwise, find it using the `MGLStyle.layers` property. You can also create a new fill-extrusion style layer and add it to the style using a method such as `-[MGLStyle addLayer:]`.

#### Related examples

See the Display 3D buildings example to learn how to add and style 3D layers on a map.

### Example

    let layer = MGLFillExtrusionStyleLayer(identifier: "buildings", source: buildings)
    layer.sourceLayerIdentifier = "building"
    layer.fillExtrusionHeight = NSExpression(forKeyPath: "height")
    layer.fillExtrusionBase = NSExpression(forKeyPath: "min_height")
    layer.predicate = NSPredicate(format: "extrude == 'true'")
    mapView.style?.addLayer(layer)

- `-initWithIdentifier:source:`

  Returns a fill-extrusion style layer initialized with an identifier and source.

  After initializing and configuring the style layer, add it to a map view’s style using the `-[MGLStyle addLayer:]` or `-[MGLStyle insertLayer:belowLayer:]` method.

  #### Declaration

  Objective-C

      - (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier
                                          source:(nonnull MGLSource *)source;

  Swift

      init(identifier: String, source: MGLSource)

  #### Parameters

  `identifier` | A string that uniquely identifies the source in the style to which it is added.
  `source` | 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.

  #### Return Value

  An initialized foreground style layer.

  View Source on GitHub

### Accessing the Paint Attributes

- `fillExtrusionBase`

  The height with which to extrude the base of this layer. Must be less than or equal to `fillExtrusionHeight`.

  This property is measured in meters.

  The default value of this property is an expression that evaluates to the float `0`. Set this property to `nil` to reset it to the default value.

  This property is only applied to the style if `fillExtrusionHeight` is non-`nil`. Otherwise, it is ignored.

  You can set this property to an expression containing any of the following:

  - Constant numeric values no less than 0
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Interpolation and step functions applied to the `$zoomLevel` variable and/or feature attributes

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionBase;

  Swift

      var fillExtrusionBase: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionBaseTransition`

  The transition affecting any changes to this layer’s `fillExtrusionBase` property.

  This property corresponds to the `fill-extrusion-base-transition` property in the style JSON file format.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic)
          MGLTransition fillExtrusionBaseTransition;

  Swift

      var fillExtrusionBaseTransition: MGLTransition { get set }

  View Source on GitHub
- `fillExtrusionColor`

  The base color of this layer. The extrusion’s surfaces will be shaded differently based on this color in combination with the `light` settings. If this color is specified with an alpha component, the alpha component will be ignored; use `fillExtrusionOpacity` to set layer opacityco.

  The default value of this property is an expression that evaluates to `UIColor.blackColor`. Set this property to `nil` to reset it to the default value.

  This property is only applied to the style if `fillExtrusionPattern` is set to `nil`. Otherwise, it is ignored.

  You can set this property to an expression containing any of the following:

  - Constant `UIColor` values
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Interpolation and step functions applied to the `$zoomLevel` variable and/or feature attributes

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionColor;

  Swift

      var fillExtrusionColor: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionColorTransition`

  The transition affecting any changes to this layer’s `fillExtrusionColor` property.

  This property corresponds to the `fill-extrusion-color-transition` property in the style JSON file format.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic)
          MGLTransition fillExtrusionColorTransition;

  Swift

      var fillExtrusionColorTransition: MGLTransition { get set }

  View Source on GitHub
- `fillExtrusionHasVerticalGradient`

  Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.

  The default value of this property is an expression that evaluates to `YES`. Set this property to `nil` to reset it to the default value.

  This attribute corresponds to the `fill-extrusion-vertical-gradient` layout property in the Mapbox Style Specification.

  You can set this property to an expression containing any of the following:

  - Constant Boolean values
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Step functions applied to the `$zoomLevel` variable

  This property does not support applying interpolation functions to the `$zoomLevel` variable or applying interpolation or step functions to feature attributes.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionHasVerticalGradient;

  Swift

      var fillExtrusionHasVerticalGradient: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionHeight`

  The height with which to extrude this layer.

  This property is measured in meters.

  The default value of this property is an expression that evaluates to the float `0`. Set this property to `nil` to reset it to the default value.

  You can set this property to an expression containing any of the following:

  - Constant numeric values no less than 0
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Interpolation and step functions applied to the `$zoomLevel` variable and/or feature attributes

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionHeight;

  Swift

      var fillExtrusionHeight: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionHeightTransition`

  The transition affecting any changes to this layer’s `fillExtrusionHeight` property.

  This property corresponds to the `fill-extrusion-height-transition` property in the style JSON file format.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic)
          MGLTransition fillExtrusionHeightTransition;

  Swift

      var fillExtrusionHeightTransition: MGLTransition { get set }

  View Source on GitHub
- `fillExtrusionOpacity`

  The opacity of the entire fill extrusion layer. This is rendered on a per-layer, not per-feature, basis, and data-driven styling is not available.

  The default value of this property is an expression that evaluates to the float `1`. Set this property to `nil` to reset it to the default value.

  You can set this property to an expression containing any of the following:

  - Constant numeric values between 0 and 1 inclusive
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Interpolation and step functions applied to the `$zoomLevel` variable

  This property does not support applying interpolation or step functions to feature attributes.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionOpacity;

  Swift

      var fillExtrusionOpacity: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionOpacityTransition`

  The transition affecting any changes to this layer’s `fillExtrusionOpacity` property.

  This property corresponds to the `fill-extrusion-opacity-transition` property in the style JSON file format.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic)
          MGLTransition fillExtrusionOpacityTransition;

  Swift

      var fillExtrusionOpacityTransition: MGLTransition { get set }

  View Source on GitHub
- `fillExtrusionPattern`

  Name of image in style images to use for drawing image fill-extrusions. For seamless patterns, image width and height must be a factor of two (2, 4, 8, …, 512).

  You can set this property to an expression containing any of the following:

  - Constant string values
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Interpolation and step functions applied to the `$zoomLevel` variable and/or feature attributes

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionPattern;

  Swift

      var fillExtrusionPattern: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionPatternTransition`

  The transition affecting any changes to this layer’s `fillExtrusionPattern` property.

  This property corresponds to the `fill-extrusion-pattern-transition` property in the style JSON file format.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic)
          MGLTransition fillExtrusionPatternTransition;

  Swift

      var fillExtrusionPatternTransition: MGLTransition { get set }

  View Source on GitHub
- `fillExtrusionTranslation`

  The geometry’s offset.

  This property is measured in points.

  The default value of this property is an expression that evaluates to an `NSValue` object containing a `CGVector` struct set to 0 points rightward and 0 points downward. Set this property to `nil` to reset it to the default value.

  This attribute corresponds to the `fill-extrusion-translate` layout property in the Mapbox Style Specification.

  You can set this property to an expression containing any of the following:

  - Constant `CGVector` values
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Interpolation and step functions applied to the `$zoomLevel` variable

  This property does not support applying interpolation or step functions to feature attributes.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionTranslation;

  Swift

      var fillExtrusionTranslation: NSExpression! { get set }

  View Source on GitHub
- `fillExtrusionTranslationTransition`

  The transition affecting any changes to this layer’s `fillExtrusionTranslation` property.

  This property corresponds to the `fill-extrusion-translate-transition` property in the style JSON file format.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic)
          MGLTransition fillExtrusionTranslationTransition;

  Swift

      var fillExtrusionTranslationTransition: MGLTransition { get set }

  View Source on GitHub
- `fillExtrusionTranslationAnchor`

  Controls the frame of reference for `fillExtrusionTranslation`.

  The default value of this property is an expression that evaluates to `map`. Set this property to `nil` to reset it to the default value.

  This property is only applied to the style if `fillExtrusionTranslation` is non-`nil`. Otherwise, it is ignored.

  This attribute corresponds to the `fill-extrusion-translate-anchor` layout property in the Mapbox Style Specification.

  You can set this property to an expression containing any of the following:

  - Constant `MGLFillExtrusionTranslationAnchor` values
  - Any of the following constant string values:
    - `map`: The fill extrusion is translated relative to the map.
    - `viewport`: The fill extrusion is translated relative to the viewport.
  - Predefined functions, including mathematical and string operators
  - Conditional expressions
  - Variable assignments and references to assigned variables
  - Step functions applied to the `$zoomLevel` variable

  This property does not support applying interpolation functions to the `$zoomLevel` variable or applying interpolation or step functions to feature attributes.

  #### Declaration

  Objective-C

      @property (assign, readwrite, nonatomic, null_resettable)
          NSExpression *fillExtrusionTranslationAnchor;

  Swift

      var fillExtrusionTranslationAnchor: NSExpression! { get set }

  View Source on GitHub