Exemplo n.º 1
0
TEST_F(GlyphColorMapping_test, GlyphMagnitudeColorMappingCreated)
{
    auto poly = genPolyData();
    auto rendered = poly->createRendered();
    auto rendered3D = dynamic_cast<RenderedData3D *>(rendered.get());
    assert(rendered3D);

    auto glyphMappings = rendered3D->glyphMapping().vectors();
    auto vecGlyphMappingIt = std::find_if(glyphMappings.begin(), glyphMappings.end(),
        [] (GlyphMappingData * glyphMappingData)
    {
        assert(glyphMappingData);
        return glyphMappingData->name() == GlyphColorMapping_test::vectorName();
    });
    ASSERT_NE(glyphMappings.end(), vecGlyphMappingIt);

    auto vecGlyphMapping = *vecGlyphMappingIt;
    vecGlyphMapping->setVisible(true);

    auto & colorMapping = rendered3D->colorMapping();

    ASSERT_TRUE(colorMapping.scalarsNames().contains(glyphMagnitudeColorMappingName()));
    colorMapping.setCurrentScalarsByName(glyphMagnitudeColorMappingName(), true);

    auto glyphColorMapping = dynamic_cast<GlyphMagnitudeColorMapping *>(&colorMapping.currentScalars());
    ASSERT_TRUE(glyphColorMapping);
}
std::vector<std::unique_ptr<ColorMappingData>> GlyphMagnitudeColorMapping::newInstances(const std::vector<AbstractVisualizedData*> & visualizedData)
{
    // If multiple visualizations share glyph mappings with the same name, the same glyph color
    // mapping will be created for them. Note that this is only relevant if these visualizations
    // share a color mapping instance.
    std::map<QString, std::vector<std::pair<RenderedData3D *, GlyphMappingData *>>> glyphMappingDataByName;

    for (auto vis : visualizedData)
    {
        auto renderedData3D = dynamic_cast<RenderedData3D *>(vis);
        if (!renderedData3D)
        {
            continue;
        }

        for (auto glyphMappingData : renderedData3D->glyphMapping().vectors())
        {
            if (glyphMappingData->isVisible())
            {
                glyphMappingDataByName[glyphMappingData->name()].push_back(
                    std::make_pair(renderedData3D, glyphMappingData));
            }
        }
    }

    std::vector<std::unique_ptr<ColorMappingData>> instances;
    for (auto && it : glyphMappingDataByName)
    {
        instances.push_back(std::make_unique<GlyphMagnitudeColorMapping>(
            visualizedData,
            it.first,
            std::map<RenderedData3D *, GlyphMappingData *>(it.second.begin(), it.second.end())));
    }

    return instances;
}