Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/layer.c
| Show First 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | SceneLayer *BKE_scene_layer_from_scene_get(const Scene *scene) | ||||
| SceneLayer *sl = BLI_findlink(&scene->render_layers, scene->active_layer); | SceneLayer *sl = BLI_findlink(&scene->render_layers, scene->active_layer); | ||||
| BLI_assert(sl); | BLI_assert(sl); | ||||
| return sl; | return sl; | ||||
| } | } | ||||
| /** | /** | ||||
| * Returns the SceneLayer to be used for drawing, outliner, and other context related areas. | * Returns the SceneLayer to be used for drawing, outliner, and other context related areas. | ||||
| */ | */ | ||||
| SceneLayer *BKE_scene_layer_from_workspace_get(const struct WorkSpace *workspace) | SceneLayer *BKE_scene_layer_from_workspace_get(const struct Scene *scene, const struct WorkSpace *workspace) | ||||
| { | { | ||||
| if (BKE_workspace_use_scene_settings_get(workspace)) { | |||||
| return BKE_scene_layer_from_scene_get(scene); | |||||
| } | |||||
| else { | |||||
| return BKE_workspace_render_layer_get(workspace); | return BKE_workspace_render_layer_get(workspace); | ||||
| } | } | ||||
| } | |||||
| /** | /** | ||||
| * This is a placeholder to know which areas of the code need to be addressed for the Workspace changes. | * This is a placeholder to know which areas of the code need to be addressed for the Workspace changes. | ||||
| * Never use this, you should either use BKE_scene_layer_workspace_active or get SceneLayer explicitly. | * Never use this, you should either use BKE_scene_layer_workspace_active or get SceneLayer explicitly. | ||||
| */ | */ | ||||
| SceneLayer *BKE_scene_layer_context_active_PLACEHOLDER(const Scene *scene) | SceneLayer *BKE_scene_layer_context_active_PLACEHOLDER(const Scene *scene) | ||||
| { | { | ||||
| return BKE_scene_layer_from_scene_get(scene); | return BKE_scene_layer_from_scene_get(scene); | ||||
| ▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | void BKE_scene_layer_free(SceneLayer *sl) | ||||
| BLI_freelistN(&sl->drawdata); | BLI_freelistN(&sl->drawdata); | ||||
| MEM_SAFE_FREE(sl->stats); | MEM_SAFE_FREE(sl->stats); | ||||
| MEM_freeN(sl); | MEM_freeN(sl); | ||||
| } | } | ||||
| /** | /** | ||||
| * Set the render engine of a renderlayer | |||||
| */ | |||||
| void BKE_scene_layer_engine_set(SceneLayer *sl, const char *engine) | |||||
| { | |||||
| BLI_strncpy_utf8(sl->engine, engine, sizeof(sl->engine)); | |||||
| } | |||||
| /** | |||||
| * Tag all the selected objects of a renderlayer | * Tag all the selected objects of a renderlayer | ||||
| */ | */ | ||||
| void BKE_scene_layer_selected_objects_tag(SceneLayer *sl, const int tag) | void BKE_scene_layer_selected_objects_tag(SceneLayer *sl, const int tag) | ||||
| { | { | ||||
| for (Base *base = sl->object_bases.first; base; base = base->next) { | for (Base *base = sl->object_bases.first; base; base = base->next) { | ||||
| if ((base->flag & BASE_SELECTED) != 0) { | if ((base->flag & BASE_SELECTED) != 0) { | ||||
| base->object->flag |= tag; | base->object->flag |= tag; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,586 Lines • ▼ Show 20 Lines | void BKE_visible_bases_iterator_next(BLI_Iterator *iter) | ||||
| object_bases_iterator_next(iter, BASE_VISIBLED); | object_bases_iterator_next(iter, BASE_VISIBLED); | ||||
| } | } | ||||
| void BKE_visible_bases_iterator_end(BLI_Iterator *UNUSED(iter)) | void BKE_visible_bases_iterator_end(BLI_Iterator *UNUSED(iter)) | ||||
| { | { | ||||
| /* do nothing */ | /* do nothing */ | ||||
| } | } | ||||
| void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in) | |||||
| { | |||||
| ObjectsRenderableIteratorData *data = data_in; | |||||
| for (Scene *scene = data->scene; scene; scene = scene->set) { | |||||
| for (SceneLayer *sl = scene->render_layers.first; sl; sl = sl->next) { | |||||
| for (Base *base = sl->object_bases.first; base; base = base->next) { | |||||
| base->object->id.flag |= LIB_TAG_DOIT; | |||||
| } | |||||
| } | |||||
| } | |||||
| SceneLayer *scene_layer = data->scene->render_layers.first; | |||||
| data->iter.scene_layer = scene_layer; | |||||
| Base base = {(Base *)scene_layer->object_bases.first, NULL}; | |||||
| data->iter.base = &base; | |||||
| data->iter.set = NULL; | |||||
| iter->data = data_in; | |||||
| BKE_renderable_objects_iterator_next(iter); | |||||
| } | |||||
| void BKE_renderable_objects_iterator_next(BLI_Iterator *iter) | |||||
| { | |||||
| ObjectsRenderableIteratorData *data = iter->data; | |||||
| Base *base = data->iter.base->next; | |||||
| /* There is still a base in the current scene layer. */ | |||||
| if (base != NULL) { | |||||
| Object *ob = base->object; | |||||
| iter->current = ob; | |||||
| data->iter.base = base; | |||||
| if ((base->flag & BASE_VISIBLED) == 0) { | |||||
| BKE_renderable_objects_iterator_next(iter); | |||||
| } | |||||
| return; | |||||
| } | |||||
| /* Time to go to the next scene layer. */ | |||||
| if (data->iter.set == NULL) { | |||||
| while ((data->iter.scene_layer = data->iter.scene_layer->next)) { | |||||
| SceneLayer *scene_layer = data->iter.scene_layer; | |||||
| if (scene_layer->flag & SCENE_LAYER_RENDER) { | |||||
| Base base_iter = {(Base *)scene_layer->object_bases.first, NULL}; | |||||
| data->iter.base = &base_iter; | |||||
| BKE_renderable_objects_iterator_next(iter); | |||||
| return; | |||||
| } | |||||
| } | |||||
| /* Setup the "set" for the next iteration. */ | |||||
| Scene scene = {.set = data->scene}; | |||||
| data->iter.set = &scene; | |||||
| BKE_renderable_objects_iterator_next(iter); | |||||
| return; | |||||
| } | |||||
| /* Look for an object in the next set. */ | |||||
| while ((data->iter.set = data->iter.set->set)) { | |||||
| SceneLayer *scene_layer = BKE_scene_layer_from_scene_get(data->iter.set); | |||||
| Base base_iter = {(Base *)scene_layer->object_bases.first, NULL}; | |||||
| data->iter.base = &base_iter; | |||||
| BKE_renderable_objects_iterator_next(iter); | |||||
| return; | |||||
| } | |||||
| iter->current = NULL; | |||||
| iter->valid = false; | |||||
| } | |||||
| void BKE_renderable_objects_iterator_end(BLI_Iterator *UNUSED(iter)) | |||||
| { | |||||
| /* Do nothing - iter->data was static allocated, we can't free it. */ | |||||
| } | |||||
| /* Evaluation */ | /* Evaluation */ | ||||
| /** | /** | ||||
| * Reset props | * Reset props | ||||
| * | * | ||||
| * If props_ref is pasted, copy props from it | * If props_ref is pasted, copy props from it | ||||
| */ | */ | ||||
| static void idproperty_reset(IDProperty **props, IDProperty *props_ref) | static void idproperty_reset(IDProperty **props, IDProperty *props_ref) | ||||
| ▲ Show 20 Lines • Show All 100 Lines • Show Last 20 Lines | |||||