fun createLayerBuilder()

in plot-stem/src/commonMain/kotlin/org/jetbrains/letsPlot/core/spec/front/tiles/PlotGeomTilesUtil.kt [149:222]


    fun createLayerBuilder(
        layerConfig: LayerConfig,
        fontFamilyRegistry: FontFamilyRegistry,
        geomInteraction: GeomInteraction?,
        theme: Theme
    ): GeomLayerBuilder {
        val geomProvider =
            layerConfig.geomProto.geomProvider(
                layerConfig,
                layerConfig.aopConversion,
                expFormat = theme.exponentFormat
            )

        val stat = layerConfig.stat
        val layerBuilder = GeomLayerBuilder(
            geomProvider = geomProvider,
            stat = stat,
            posProvider = layerConfig.posProvider,
            fontFamilyRegistry = fontFamilyRegistry
        )
            .yOrientation(layerConfig.isYOrientation)
            .marginal(layerConfig.isMarginal, layerConfig.marginalSide, layerConfig.marginalSize)

        // Color aesthetics
        layerBuilder
            .colorByAes(layerConfig.colorByAes)
            .fillByAes(layerConfig.fillByAes)

        // geomTheme
        layerBuilder.geomTheme(theme.geometries(layerConfig.geomProto.geomKind))

        val constantAesMap = layerConfig.constantsMap
        for (aes in constantAesMap.keys) {
            @Suppress("UNCHECKED_CAST", "MapGetWithNotNullAssertionOperator")
            layerBuilder.addConstantAes(aes as Aes<Any>, constantAesMap[aes]!!)
        }

        if (layerConfig.explicitGroupingVarNames != null) {
            layerBuilder.groupingVarNames(layerConfig.explicitGroupingVarNames)
        }

        // no map_join, data=gdf or map=gdf - group values and geometries by GEO_ID
        DataFrameUtil.variables(layerConfig.combinedData)[GeoConfig.GEO_ID]?.let {
            layerBuilder.pathIdVarName(GeoConfig.GEO_ID)
        }

        // variable bindings
        val bindings = layerConfig.varBindings
        for (binding in bindings) {
            layerBuilder.addBinding(binding)
        }

        layerBuilder
            .disableLegend(layerConfig.isLegendDisabled)
            .customLegendOptions(layerConfig.customLegendOptions)

        geomInteraction?.let {
            layerBuilder
                .locatorLookupSpec(it.createLookupSpec())
                .contextualMappingProvider(it)
        }
        // annotations
        layerBuilder.annotationSpecification(
            layerConfig.annotations,
            theme.annotations().textStyle(),
            theme.annotations().useCustomColor()
        )

        layerBuilder.defaultFormatters(
            createDefaultFormatters(layerConfig, theme.exponentFormat, tz = layerConfig.tz)
        )

        return layerBuilder
    }