StringDictionary EntityBrowser<Assembly>::get_entities(const Assembly& assembly, const string& type) const { StringDictionary entities; if (type == "bsdf") { entities = build_entity_dictionary(assembly.bsdfs()); } else if (type == "edf") { entities = build_entity_dictionary(assembly.edfs()); } else if (type == "material") { entities = build_entity_dictionary(assembly.materials()); } else if (type == "surface_shader") { entities = build_entity_dictionary(assembly.surface_shaders()); } else if (type == "environment_edf") { entities = build_entity_dictionary(get_parent_scene(&assembly)->environment_edfs()); } else if (type == "environment_shader") { entities = build_entity_dictionary(get_parent_scene(&assembly)->environment_shaders()); } else { entities = EntityBrowser<BaseGroup>::get_entities(type); } const Assembly* parent_assembly = dynamic_cast<const Assembly*>(assembly.get_parent()); if (parent_assembly) { merge_dictionary(entities, get_entities(*parent_assembly, type)); } else { const Scene* parent_scene = dynamic_cast<const Scene*>(assembly.get_parent()); assert(parent_scene); merge_dictionary(entities, EntityBrowser<Scene>(*parent_scene).get_entities(type)); } return entities; }