void collect_relations_from_assembly(Assembly& assembly) { collect_relations_from(assembly.colors()); collect_relations_from(assembly.textures()); collect_relations_from(assembly.texture_instances()); collect_relations_from(assembly.shader_groups()); collect_relations_from(assembly.assembly_instances()); collect_relations_from(assembly.bsdfs()); collect_relations_from(assembly.bssrdfs()); collect_relations_from(assembly.edfs()); collect_relations_from(assembly.surface_shaders()); collect_relations_from(assembly.materials()); collect_relations_from(assembly.lights()); collect_relations_from(assembly.objects()); collect_relations_from(assembly.object_instances()); collect_relations_from(assembly.volumes()); for (auto& child_assembly : assembly.assemblies()) collect_relations_from_assembly(child_assembly); // Lights are implicitly referenced by their parent assembly. for (auto& light : assembly.lights()) { const InputBinder::ReferencedEntity referenced_entity(assembly.lights(), &light); insert_relation(referenced_entity, assembly); } // Object instances are implicitly referenced by their parent assembly. for (auto& object_instance : assembly.object_instances()) { const InputBinder::ReferencedEntity referenced_entity(assembly.object_instances(), &object_instance); insert_relation(referenced_entity, assembly); } // Assembly instances are implicitly referenced by their parent assembly. for (auto& assembly_instance : assembly.assembly_instances()) { const InputBinder::ReferencedEntity referenced_entity(assembly.assembly_instances(), &assembly_instance); insert_relation(referenced_entity, assembly); } }
void remove_unused_entities_from_assembly(Assembly& assembly) { remove_unused_entities_from(assembly.colors()); remove_unused_entities_from(assembly.textures()); remove_unused_entities_from(assembly.texture_instances()); remove_unused_entities_from(assembly.shader_groups()); remove_unused_entities_from(assembly.assembly_instances()); remove_unused_entities_from(assembly.bsdfs()); remove_unused_entities_from(assembly.bssrdfs()); remove_unused_entities_from(assembly.edfs()); remove_unused_entities_from(assembly.surface_shaders()); remove_unused_entities_from(assembly.materials()); remove_unused_entities_from(assembly.lights()); remove_unused_entities_from(assembly.objects()); remove_unused_entities_from(assembly.object_instances()); remove_unused_entities_from(assembly.volumes()); for (auto& child_assembly : assembly.assemblies()) remove_unused_entities_from_assembly(child_assembly); }
AssemblyItem::AssemblyItem( EntityEditorContext& editor_context, Assembly& assembly, BaseGroup& parent, BaseGroupItem* parent_item) : BaseGroupItem(editor_context, g_class_uid, assembly) , m_assembly(assembly) , m_assembly_uid(assembly.get_uid()) , m_parent(parent) , m_parent_item(parent_item) { set_title(QString::fromAscii(assembly.get_name())); set_allow_edition(false); insertChild( 3, m_bsdf_collection_item = add_multi_model_collection_item<BSDF>(assembly.bsdfs())); insertChild( 4, m_bssrdf_collection_item = add_multi_model_collection_item<BSSRDF>(assembly.bssrdfs())); insertChild( 5, m_edf_collection_item = add_multi_model_collection_item<EDF>(assembly.edfs())); insertChild( 6, m_surface_shader_collection_item = add_multi_model_collection_item<SurfaceShader>(assembly.surface_shaders())); insertChild( 7, m_material_collection_item = new MaterialCollectionItem( m_editor_context, assembly.materials(), assembly, this)); insertChild( 8, m_light_collection_item = add_multi_model_collection_item<Light>(assembly.lights())); insertChild( 9, m_object_collection_item = new ObjectCollectionItem( m_editor_context, assembly.objects(), assembly, this)); insertChild( 10, m_object_instance_collection_item = new ObjectInstanceCollectionItem( m_editor_context, new_guid(), EntityTraits<ObjectInstance>::get_human_readable_collection_type_name(), assembly)); m_object_instance_collection_item->add_items(assembly.object_instances()); insertChild( 11, m_volume_collection_item = add_multi_model_collection_item<Volume>(assembly.volumes())); m_editor_context.m_item_registry.insert(m_assembly, this); }