void Scene::__removeObject( const Object3D::Ptr& object ) { if ( !object ) return; detail::Remove objectRemove( *this, object ); object->visit( objectRemove ); for ( auto& child : object->children ) { __removeObject( child ); } }
void Scene::__removeObject(Object * object) { if (dynamic_cast<Light *>(object)) { lights.erase(std::remove(lights.begin(), lights.end(), object), lights.end()); } else if (!dynamic_cast<Camera *>(object)) { std::vector<Object *>::iterator result = std::find(objectsRemoved.begin(), objectsRemoved.end(), object); if (result != objectsRemoved.end()) { objects.erase(result); objectsRemoved.push_back(object); objectsAdded.erase(std::remove(objectsAdded.begin(), objectsAdded.end(), object), objectsAdded.end()); } } for (std::vector<Object *>::iterator it = object->children.begin(), end = object->children.end(); it != end; ++it) __removeObject(*it); }