std::shared_ptr<utymap::builders::BuilderContext> createBuilderContext( const utymap::QuadKey &quadKey, const std::string &stylesheet, std::function<void(const utymap::math::Mesh &)> meshCallback = nullptr, std::function<void(const utymap::entities::Element &)> elementCallback = nullptr) { return std::make_shared<utymap::builders::BuilderContext>( quadKey, *getStyleProvider(stylesheet), *getStringTable(), *getMeshPool(), *getElevationProvider(), meshCallback, elementCallback, cancelToken); }
// Loads quadKey. void loadQuadKey(const char* styleFile, const utymap::QuadKey& quadKey, OnMeshBuilt* meshCallback, OnElementLoaded* elementCallback, OnError* errorCallback) { safeExecute([&]() { auto styleProvider = getStyleProvider(styleFile); ExportElementVisitor elementVisitor(stringTable_, *styleProvider, quadKey.levelOfDetail, elementCallback); quadKeyBuilder_.build(quadKey, *styleProvider, getElevationProvider(quadKey), [&meshCallback](const utymap::meshing::Mesh& mesh) { // NOTE do not notify if mesh is empty. if (!mesh.vertices.empty()) { meshCallback(mesh.name.data(), mesh.vertices.data(), static_cast<int>(mesh.vertices.size()), mesh.triangles.data(), static_cast<int>(mesh.triangles.size()), mesh.colors.data(), static_cast<int>(mesh.colors.size())); } }, [&elementVisitor](const utymap::entities::Element& element) { element.accept(elementVisitor); }); }, errorCallback); }
// Preload elevation data. Not thread safe. void preloadElevation(const utymap::QuadKey& quadKey) { getElevationProvider(quadKey).preload(utymap::utils::GeoUtils::quadKeyToBoundingBox(quadKey)); }