std::unique_ptr<SymbolLayout> SymbolLayer::Impl::createLayout(BucketParameters& parameters) const { SymbolLayoutProperties layoutProperties = layout; CalculationParameters p(parameters.tileID.overscaledZ); layoutProperties.recalculate(p); if (layoutProperties.iconRotationAlignment.value == AlignmentType::Auto) { if (layoutProperties.symbolPlacement.value == SymbolPlacementType::Line) { layoutProperties.iconRotationAlignment.value = AlignmentType::Map; } else { layoutProperties.iconRotationAlignment.value = AlignmentType::Viewport; } } if (layoutProperties.textRotationAlignment.value == AlignmentType::Auto) { if (layoutProperties.symbolPlacement.value == SymbolPlacementType::Line) { layoutProperties.textRotationAlignment.value = AlignmentType::Map; } else { layoutProperties.textRotationAlignment.value = AlignmentType::Viewport; } } // If unspecified `text-pitch-alignment` inherits `text-rotation-alignment` if (layoutProperties.textPitchAlignment.value == AlignmentType::Auto) { layoutProperties.textPitchAlignment.value = layoutProperties.textRotationAlignment.value; } layoutProperties.textSize.calculate(CalculationParameters(18)); float textMaxSize = layoutProperties.textSize; layoutProperties.iconSize.calculate(CalculationParameters(p.z + 1)); layoutProperties.textSize.calculate(CalculationParameters(p.z + 1)); return std::make_unique<SymbolLayout>(id, parameters.layer.getName(), parameters.tileID.overscaleFactor(), parameters.tileID.overscaledZ, parameters.mode, parameters.layer, filter, layoutProperties, textMaxSize, *spriteAtlas); }
std::unique_ptr<Bucket> LineLayer::Impl::createBucket(BucketParameters& parameters) const { auto bucket = std::make_unique<LineBucket>(parameters.tileID.overscaleFactor()); bucket->layout = layout; bucket->layout.recalculate(CalculationParameters(parameters.tileID.overscaledZ)); auto& name = bucketName(); parameters.eachFilteredFeature(filter, [&] (const auto& feature, std::size_t index, const std::string& layerName) { auto geometries = feature.getGeometries(); bucket->addGeometry(geometries); parameters.featureIndex.insert(geometries, index, layerName, name); }); return std::move(bucket); }