Custom drawable layer: Simple Fill (#1810)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alex Cristici <alex.cristici@gmail.com>
This commit is contained in:
@@ -30,76 +30,108 @@ public:
|
||||
interface.setTileID({11, 327, 791});
|
||||
|
||||
// add polylines
|
||||
using namespace mbgl;
|
||||
{
|
||||
using namespace mbgl;
|
||||
|
||||
constexpr auto numLines = 6;
|
||||
Interface::LineOptions options[numLines]{
|
||||
{/*color=*/Color::red(),
|
||||
/*blur=*/0.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/0.0f,
|
||||
/*offset=*/0.0f,
|
||||
/*width=*/8.0f,
|
||||
{}},
|
||||
{/*color=*/Color::blue(),
|
||||
/*blur=*/4.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/2.0f,
|
||||
/*offset=*/-1.0f,
|
||||
/*width=*/4.0f,
|
||||
{}},
|
||||
{/*color=*/Color(1.f, 0.5f, 0, 0.5f),
|
||||
/*blur=*/16.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/2.0f,
|
||||
/*width=*/16.0f,
|
||||
{}},
|
||||
{/*color=*/Color(1.f, 1.f, 0, 0.3f),
|
||||
/*blur=*/2.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/-2.0f,
|
||||
/*width=*/2.0f,
|
||||
{}},
|
||||
{/*color=*/Color::black(),
|
||||
/*blur=*/0.5f,
|
||||
/*opacity=*/0.5f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/0.5f,
|
||||
/*width=*/0.5f,
|
||||
{}},
|
||||
{/*color=*/Color(1.f, 0, 1.f, 0.2f),
|
||||
/*blur=*/24.0f,
|
||||
/*opacity=*/0.5f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/-5.0f,
|
||||
/*width=*/24.0f,
|
||||
{}},
|
||||
};
|
||||
for (auto& opt : options) {
|
||||
opt.geometry.beginCap = style::LineCapType::Round;
|
||||
opt.geometry.endCap = style::LineCapType::Round;
|
||||
opt.geometry.joinType = style::LineJoinType::Round;
|
||||
}
|
||||
|
||||
constexpr auto numPoints = 100;
|
||||
GeometryCoordinates polyline;
|
||||
for (auto ipoint{0}; ipoint < numPoints; ++ipoint) {
|
||||
polyline.emplace_back(ipoint * util::EXTENT / numPoints,
|
||||
std::sin(ipoint * 2 * M_PI / numPoints) * util::EXTENT / numLines / 2.f);
|
||||
}
|
||||
|
||||
for (auto index{0}; index < numLines; ++index) {
|
||||
for (auto& p : polyline) {
|
||||
p.y += util::EXTENT / numLines;
|
||||
constexpr auto numLines = 6;
|
||||
Interface::LineOptions options[numLines]{
|
||||
{/*color=*/Color::red(),
|
||||
/*blur=*/0.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/0.0f,
|
||||
/*offset=*/0.0f,
|
||||
/*width=*/8.0f,
|
||||
{}},
|
||||
{/*color=*/Color::blue(),
|
||||
/*blur=*/4.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/2.0f,
|
||||
/*offset=*/-1.0f,
|
||||
/*width=*/4.0f,
|
||||
{}},
|
||||
{/*color=*/Color(1.f, 0.5f, 0, 0.5f),
|
||||
/*blur=*/16.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/2.0f,
|
||||
/*width=*/16.0f,
|
||||
{}},
|
||||
{/*color=*/Color(1.f, 1.f, 0, 0.3f),
|
||||
/*blur=*/2.0f,
|
||||
/*opacity=*/1.0f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/-2.0f,
|
||||
/*width=*/2.0f,
|
||||
{}},
|
||||
{/*color=*/Color::black(),
|
||||
/*blur=*/0.5f,
|
||||
/*opacity=*/0.5f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/0.5f,
|
||||
/*width=*/0.5f,
|
||||
{}},
|
||||
{/*color=*/Color(1.f, 0, 1.f, 0.2f),
|
||||
/*blur=*/24.0f,
|
||||
/*opacity=*/0.5f,
|
||||
/*gapWidth=*/1.0f,
|
||||
/*offset=*/-5.0f,
|
||||
/*width=*/24.0f,
|
||||
{}},
|
||||
};
|
||||
for (auto& opt : options) {
|
||||
opt.geometry.beginCap = style::LineCapType::Round;
|
||||
opt.geometry.endCap = style::LineCapType::Round;
|
||||
opt.geometry.joinType = style::LineJoinType::Round;
|
||||
}
|
||||
|
||||
// set property values
|
||||
interface.setLineOptions(options[index]);
|
||||
constexpr auto numPoints = 100;
|
||||
GeometryCoordinates polyline;
|
||||
for (auto ipoint{0}; ipoint < numPoints; ++ipoint) {
|
||||
polyline.emplace_back(ipoint * util::EXTENT / numPoints,
|
||||
std::sin(ipoint * 2 * M_PI / numPoints) * util::EXTENT / numLines / 2.f);
|
||||
}
|
||||
|
||||
// add polyline
|
||||
interface.addPolyline(polyline);
|
||||
for (auto index{0}; index < numLines; ++index) {
|
||||
for (auto& p : polyline) {
|
||||
p.y += util::EXTENT / numLines;
|
||||
}
|
||||
|
||||
// set property values
|
||||
interface.setLineOptions(options[index]);
|
||||
|
||||
// add polyline
|
||||
interface.addPolyline(polyline);
|
||||
}
|
||||
}
|
||||
|
||||
// add fill polygon
|
||||
{
|
||||
using namespace mbgl;
|
||||
|
||||
GeometryCollection geometry{
|
||||
{
|
||||
// ring 1
|
||||
{static_cast<int16_t>(util::EXTENT * 0.1f), static_cast<int16_t>(util::EXTENT * 0.2f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.5f), static_cast<int16_t>(util::EXTENT * 0.5f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.7f), static_cast<int16_t>(util::EXTENT * 0.5f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.5f), static_cast<int16_t>(util::EXTENT * 1.0f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.0f), static_cast<int16_t>(util::EXTENT * 0.5f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.1f), static_cast<int16_t>(util::EXTENT * 0.2f)},
|
||||
},
|
||||
{
|
||||
// ring 2
|
||||
{static_cast<int16_t>(util::EXTENT * 0.1f), static_cast<int16_t>(util::EXTENT * 0.25f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.15f), static_cast<int16_t>(util::EXTENT * 0.5f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.25f), static_cast<int16_t>(util::EXTENT * 0.45f)},
|
||||
{static_cast<int16_t>(util::EXTENT * 0.1f), static_cast<int16_t>(util::EXTENT * 0.25f)},
|
||||
},
|
||||
};
|
||||
|
||||
// set properties
|
||||
interface.setFillOptions({/*color=*/Color::green(), /*opacity=*/0.5f});
|
||||
|
||||
// add fill
|
||||
interface.addFill(geometry);
|
||||
}
|
||||
|
||||
// finish
|
||||
|
||||
Reference in New Issue
Block a user