[core] Introduce API to collect placed symbols data

The following methods are added to the `Renderer` class:
- `collectPlacedSymbolData()`
  enables or disables collecting of the placed symbols data

- `getPlacedSymbolsData()`
  if collecting of the placed symbols data is enabled, returns the
  reference to the `PlacedSymbolData` vector holding the collected data.
This commit is contained in:
Mikhail Pozdnyakov
2020-03-25 17:03:52 +02:00
parent 4bdb3ce200
commit 5f4e33b1a3
6 changed files with 70 additions and 6 deletions

View File

@@ -21,6 +21,21 @@ namespace gfx {
class RendererBackend;
} // namespace gfx
struct PlacedSymbolData {
// Contents of the label
std::u16string key;
// If symbol contains text, text collision box in viewport coordinates
optional<mapbox::geometry::box<float>> textCollisionBox;
// If symbol contains icon, icon collision box in viewport coordinates
optional<mapbox::geometry::box<float>> iconCollisionBox;
// Symbol text was placed
bool textPlaced;
// Symbol icon was placed
bool iconPlaced;
// Symbol text or icon collision box intersects tile borders
bool intersectsTileBorder;
};
class Renderer {
public:
Renderer(gfx::RendererBackend&, float pixelRatio_, const optional<std::string>& localFontFamily = {});
@@ -54,12 +69,32 @@ public:
void getFeatureState(FeatureState& state, const std::string& sourceID, const optional<std::string>& sourceLayerID,
const std::string& featureID) const;
void removeFeatureState(const std::string& sourceID, const optional<std::string>& sourceLayerID,
const optional<std::string>& featureID, const optional<std::string>& stateKey);
void removeFeatureState(const std::string& sourceID,
const optional<std::string>& sourceLayerID,
const optional<std::string>& featureID,
const optional<std::string>& stateKey);
// Debug
void dumpDebugLogs();
/**
* @brief In Tile map mode, enables or disables collecting of the placed symbols data,
* which can be obtained with `getPlacedSymbolsData()`.
*
* The placed symbols data collecting is disabled by default.
*/
void collectPlacedSymbolData(bool enable);
/**
* @brief If collecting of the placed symbols data is enabled, returns the reference
* to the `PlacedSymbolData` vector holding the collected data.
*
* Note: the returned vector gets re-populated at every `render()` call.
*
* @return collected placed symbols data
*/
const std::vector<PlacedSymbolData>& getPlacedSymbolsData() const;
// Memory
void reduceMemoryUse();
void clearData();