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; }