public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            CoreVectorLayerProperties coreOptions = (CoreVectorLayerProperties)EditorHelper.GetTargetObjectOfProperty(property);

            EditorGUI.BeginProperty(position, null, property);

            var primitiveType = property.FindPropertyRelative("geometryType");

            var primitiveTypeLabel = new GUIContent
            {
                text    = "Primitive Type",
                tooltip = "Primitive geometry type of the visualizer, allowed primitives - point, line, polygon."
            };

            var displayNames = primitiveType.enumDisplayNames;
            int count        = primitiveType.enumDisplayNames.Length;

            if (!_isGUIContentSet)
            {
                _primitiveTypeContent = new GUIContent[count];
                for (int extIdx = 0; extIdx < count; extIdx++)
                {
                    _primitiveTypeContent[extIdx] = new GUIContent
                    {
                        text    = displayNames[extIdx],
                        tooltip = EnumExtensions.Description((VectorPrimitiveType)extIdx),
                    };
                }
                _isGUIContentSet = true;
            }

            primitiveType.enumValueIndex = EditorGUILayout.Popup(primitiveTypeLabel, primitiveType.enumValueIndex, _primitiveTypeContent);
            EditorHelper.CheckForModifiedProperty(primitiveType, coreOptions);

            if ((VectorPrimitiveType)primitiveType.enumValueIndex == VectorPrimitiveType.Line)
            {
                EditorGUILayout.PropertyField(property.FindPropertyRelative("lineWidth"));
                EditorHelper.CheckForModifiedProperty(property.FindPropertyRelative("lineWidth"), coreOptions);
            }
            EditorGUI.EndProperty();
        }
        /// <summary>
        /// Sets the sub layer properties for the newly added layer
        /// </summary>
        /// <param name="subLayer">Sub layer.</param>
        void SetSubLayerProps(SerializedProperty subLayer)
        {
            subLayer.FindPropertyRelative("coreOptions.sublayerName").stringValue = subLayerProperties.coreOptions.sublayerName;
            subLayer.FindPropertyRelative("presetFeatureType").enumValueIndex     = (int)subLayerProperties.presetFeatureType;
            // Set defaults here because SerializedProperty copies the previous element.
            var subLayerCoreOptions = subLayer.FindPropertyRelative("coreOptions");
            CoreVectorLayerProperties coreOptions = subLayerProperties.coreOptions;

            subLayerCoreOptions.FindPropertyRelative("isActive").boolValue          = coreOptions.isActive;
            subLayerCoreOptions.FindPropertyRelative("layerName").stringValue       = coreOptions.layerName;
            subLayerCoreOptions.FindPropertyRelative("geometryType").enumValueIndex = (int)coreOptions.geometryType;
            subLayerCoreOptions.FindPropertyRelative("snapToTerrain").boolValue     = coreOptions.snapToTerrain;
            subLayerCoreOptions.FindPropertyRelative("combineMeshes").boolValue     = coreOptions.combineMeshes;

            var subLayerlineGeometryOptions = subLayer.FindPropertyRelative("lineGeometryOptions");
            var lineGeometryOptions         = subLayerProperties.lineGeometryOptions;

            subLayerlineGeometryOptions.FindPropertyRelative("Width").floatValue        = lineGeometryOptions.Width;
            subLayerlineGeometryOptions.FindPropertyRelative("CapType").enumValueIndex  = (int)lineGeometryOptions.CapType;
            subLayerlineGeometryOptions.FindPropertyRelative("JoinType").enumValueIndex = (int)lineGeometryOptions.JoinType;
            subLayerlineGeometryOptions.FindPropertyRelative("MiterLimit").floatValue   = lineGeometryOptions.MiterLimit;
            subLayerlineGeometryOptions.FindPropertyRelative("RoundLimit").floatValue   = lineGeometryOptions.RoundLimit;


            var subLayerExtrusionOptions = subLayer.FindPropertyRelative("extrusionOptions");
            var extrusionOptions         = subLayerProperties.extrusionOptions;

            subLayerExtrusionOptions.FindPropertyRelative("extrusionType").enumValueIndex         = (int)extrusionOptions.extrusionType;
            subLayerExtrusionOptions.FindPropertyRelative("extrusionGeometryType").enumValueIndex = (int)extrusionOptions.extrusionGeometryType;
            subLayerExtrusionOptions.FindPropertyRelative("propertyName").stringValue             = extrusionOptions.propertyName;
            subLayerExtrusionOptions.FindPropertyRelative("extrusionScaleFactor").floatValue      = extrusionOptions.extrusionScaleFactor;
            subLayerExtrusionOptions.FindPropertyRelative("maximumHeight").floatValue             = extrusionOptions.maximumHeight;

            var subLayerFilterOptions = subLayer.FindPropertyRelative("filterOptions");
            var filterOptions         = subLayerProperties.filterOptions;

            subLayerFilterOptions.FindPropertyRelative("filters").ClearArray();
            subLayerFilterOptions.FindPropertyRelative("combinerType").enumValueIndex = (int)filterOptions.combinerType;
            //Add any future filter related assignments here

            var subLayerGeometryMaterialOptions = subLayer.FindPropertyRelative("materialOptions");
            var materialOptions = subLayerProperties.materialOptions;

            subLayerGeometryMaterialOptions.FindPropertyRelative("style").enumValueIndex = (int)materialOptions.style;

            var mats = subLayerGeometryMaterialOptions.FindPropertyRelative("materials");

            mats.arraySize = 2;

            var topMatArray  = mats.GetArrayElementAtIndex(0).FindPropertyRelative("Materials");
            var sideMatArray = mats.GetArrayElementAtIndex(1).FindPropertyRelative("Materials");

            if (topMatArray.arraySize == 0)
            {
                topMatArray.arraySize = 1;
            }
            if (sideMatArray.arraySize == 0)
            {
                sideMatArray.arraySize = 1;
            }

            var topMat  = topMatArray.GetArrayElementAtIndex(0);
            var sideMat = sideMatArray.GetArrayElementAtIndex(0);

            var atlas              = subLayerGeometryMaterialOptions.FindPropertyRelative("atlasInfo");
            var palette            = subLayerGeometryMaterialOptions.FindPropertyRelative("colorPalette");
            var lightStyleOpacity  = subLayerGeometryMaterialOptions.FindPropertyRelative("lightStyleOpacity");
            var darkStyleOpacity   = subLayerGeometryMaterialOptions.FindPropertyRelative("darkStyleOpacity");
            var colorStyleColor    = subLayerGeometryMaterialOptions.FindPropertyRelative("colorStyleColor");
            var customStyleOptions = subLayerGeometryMaterialOptions.FindPropertyRelative("customStyleOptions");

            topMat.objectReferenceValue  = materialOptions.materials[0].Materials[0];
            sideMat.objectReferenceValue = materialOptions.materials[1].Materials[0];
            atlas.objectReferenceValue   = materialOptions.atlasInfo;
            palette.objectReferenceValue = materialOptions.colorPalette;
            lightStyleOpacity.floatValue = materialOptions.lightStyleOpacity;
            darkStyleOpacity.floatValue  = materialOptions.darkStyleOpacity;
            colorStyleColor.colorValue   = materialOptions.colorStyleColor;
            //set custom style options.
            var customMats = customStyleOptions.FindPropertyRelative("materials");

            customMats.arraySize = 2;

            var customTopMatArray  = customMats.GetArrayElementAtIndex(0).FindPropertyRelative("Materials");
            var customSideMatArray = customMats.GetArrayElementAtIndex(1).FindPropertyRelative("Materials");

            if (customTopMatArray.arraySize == 0)
            {
                customTopMatArray.arraySize = 1;
            }
            if (customSideMatArray.arraySize == 0)
            {
                customSideMatArray.arraySize = 1;
            }

            var customTopMat  = customTopMatArray.GetArrayElementAtIndex(0);
            var customSideMat = customSideMatArray.GetArrayElementAtIndex(0);


            customTopMat.objectReferenceValue  = materialOptions.customStyleOptions.materials[0].Materials[0];
            customSideMat.objectReferenceValue = materialOptions.customStyleOptions.materials[1].Materials[0];
            customStyleOptions.FindPropertyRelative("atlasInfo").objectReferenceValue    = materialOptions.customStyleOptions.atlasInfo;
            customStyleOptions.FindPropertyRelative("colorPalette").objectReferenceValue = materialOptions.customStyleOptions.colorPalette;

            subLayer.FindPropertyRelative("buildingsWithUniqueIds").boolValue     = subLayerProperties.buildingsWithUniqueIds;
            subLayer.FindPropertyRelative("moveFeaturePositionTo").enumValueIndex = (int)subLayerProperties.moveFeaturePositionTo;
            subLayer.FindPropertyRelative("MeshModifiers").ClearArray();
            subLayer.FindPropertyRelative("GoModifiers").ClearArray();

            var subLayerColliderOptions = subLayer.FindPropertyRelative("colliderOptions");

            subLayerColliderOptions.FindPropertyRelative("colliderType").enumValueIndex = (int)subLayerProperties.colliderOptions.colliderType;
        }
        /// <summary>
        /// Sets the sub layer properties for the newly added layer
        /// </summary>
        /// <param name="subLayer">Sub layer.</param>
        void SetSubLayerProps(SerializedProperty subLayer)
        {
            subLayer.FindPropertyRelative("coreOptions.sublayerName").stringValue = subLayerProperties.coreOptions.sublayerName;
            subLayer.FindPropertyRelative("presetFeatureType").enumValueIndex     = (int)subLayerProperties.presetFeatureType;
            // Set defaults here because SerializedProperty copies the previous element.
            var subLayerCoreOptions = subLayer.FindPropertyRelative("coreOptions");
            CoreVectorLayerProperties coreOptions = subLayerProperties.coreOptions;

            subLayerCoreOptions.FindPropertyRelative("isActive").boolValue          = coreOptions.isActive;
            subLayerCoreOptions.FindPropertyRelative("layerName").stringValue       = coreOptions.layerName;
            subLayerCoreOptions.FindPropertyRelative("geometryType").enumValueIndex = (int)coreOptions.geometryType;
            subLayerCoreOptions.FindPropertyRelative("snapToTerrain").boolValue     = coreOptions.snapToTerrain;
            subLayerCoreOptions.FindPropertyRelative("combineMeshes").boolValue     = coreOptions.combineMeshes;
            subLayerCoreOptions.FindPropertyRelative("lineWidth").floatValue        = coreOptions.lineWidth;

            var subLayerExtrusionOptions = subLayer.FindPropertyRelative("extrusionOptions");
            var extrusionOptions         = subLayerProperties.extrusionOptions;

            subLayerExtrusionOptions.FindPropertyRelative("extrusionType").enumValueIndex         = (int)extrusionOptions.extrusionType;
            subLayerExtrusionOptions.FindPropertyRelative("extrusionGeometryType").enumValueIndex = (int)extrusionOptions.extrusionGeometryType;
            subLayerExtrusionOptions.FindPropertyRelative("propertyName").stringValue             = extrusionOptions.propertyName;
            subLayerExtrusionOptions.FindPropertyRelative("extrusionScaleFactor").floatValue      = extrusionOptions.extrusionScaleFactor;

            var subLayerFilterOptions = subLayer.FindPropertyRelative("filterOptions");
            var filterOptions         = subLayerProperties.filterOptions;

            subLayerFilterOptions.FindPropertyRelative("filters").ClearArray();
            subLayerFilterOptions.FindPropertyRelative("combinerType").enumValueIndex = (int)filterOptions.combinerType;
            //Add any future filter related assignments here

            var subLayerGeometryMaterialOptions = subLayer.FindPropertyRelative("materialOptions");
            var materialOptions = subLayerProperties.materialOptions;

            subLayerGeometryMaterialOptions.FindPropertyRelative("style").enumValueIndex = (int)materialOptions.style;

            GeometryMaterialOptions geometryMaterialOptionsReference = MapboxDefaultStyles.GetDefaultAssets();

            var mats = subLayerGeometryMaterialOptions.FindPropertyRelative("materials");

            mats.arraySize = 2;

            var topMatArray  = mats.GetArrayElementAtIndex(0).FindPropertyRelative("Materials");
            var sideMatArray = mats.GetArrayElementAtIndex(1).FindPropertyRelative("Materials");

            if (topMatArray.arraySize == 0)
            {
                topMatArray.arraySize = 1;
            }
            if (sideMatArray.arraySize == 0)
            {
                sideMatArray.arraySize = 1;
            }

            var topMat  = topMatArray.GetArrayElementAtIndex(0);
            var sideMat = sideMatArray.GetArrayElementAtIndex(0);

            var atlas   = subLayerGeometryMaterialOptions.FindPropertyRelative("atlasInfo");
            var palette = subLayerGeometryMaterialOptions.FindPropertyRelative("colorPalette");

            topMat.objectReferenceValue  = geometryMaterialOptionsReference.materials[0].Materials[0];
            sideMat.objectReferenceValue = geometryMaterialOptionsReference.materials[1].Materials[0];
            atlas.objectReferenceValue   = geometryMaterialOptionsReference.atlasInfo;
            palette.objectReferenceValue = geometryMaterialOptionsReference.colorPalette;

            subLayer.FindPropertyRelative("buildingsWithUniqueIds").boolValue     = subLayerProperties.buildingsWithUniqueIds;
            subLayer.FindPropertyRelative("moveFeaturePositionTo").enumValueIndex = (int)subLayerProperties.moveFeaturePositionTo;
            subLayer.FindPropertyRelative("MeshModifiers").ClearArray();
            subLayer.FindPropertyRelative("GoModifiers").ClearArray();

            var subLayerColliderOptions = subLayer.FindPropertyRelative("colliderOptions");

            subLayerColliderOptions.FindPropertyRelative("colliderType").enumValueIndex = (int)subLayerProperties.colliderOptions.colliderType;
        }