Ejemplo n.º 1
0
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 );
  }
}
Ejemplo n.º 2
0
  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);
  }