Blender V4.3
BlenderContext.cpp
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009-2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <vector>
10
11#include "BlenderContext.h"
12#include "ExportSettings.h"
13
14#include "BKE_layer.hh"
15#include "BKE_scene.hh"
16
17#include "BLI_listbase.h"
18
19bool bc_is_base_node(LinkNode *export_set, Object *ob, const Scene *scene, ViewLayer *view_layer)
20{
21 Object *root = bc_get_highest_exported_ancestor_or_self(export_set, ob, scene, view_layer);
22 return (root == ob);
23}
24
26 Object *ob,
27 const Scene *scene,
28 ViewLayer *view_layer)
29{
30 Object *ancestor = ob;
31 while (ob->parent) {
32 if (bc_is_in_Export_set(export_set, ob->parent, scene, view_layer)) {
33 ancestor = ob->parent;
34 }
35 ob = ob->parent;
36 }
37 return ancestor;
38}
39
40void bc_get_children(std::vector<Object *> &child_set,
41 Object *ob,
42 const Scene *scene,
43 ViewLayer *view_layer)
44{
45 BKE_view_layer_synced_ensure(scene, view_layer);
47 Object *cob = base->object;
48 if (cob->parent == ob) {
49 switch (ob->type) {
50 case OB_MESH:
51 case OB_CAMERA:
52 case OB_LAMP:
53 case OB_EMPTY:
54 case OB_ARMATURE:
55 child_set.push_back(cob);
56 default:
57 break;
58 }
59 }
60 }
61}
62
64 Object *ob,
65 const Scene *scene,
66 ViewLayer *view_layer)
67{
68 bool to_export = (BLI_linklist_index(export_set, ob) != -1);
69
70 if (!to_export) {
71 /* Mark this object as to_export even if it is not in the
72 * export list, but it contains children to export. */
73
74 std::vector<Object *> children;
75 bc_get_children(children, ob, scene, view_layer);
76 for (Object *child : children) {
77 if (bc_is_in_Export_set(export_set, child, scene, view_layer)) {
78 to_export = true;
79 break;
80 }
81 }
82 }
83 return to_export;
84}
85
87{
88 return ob && (ob->id.tag & ID_TAG_DOIT);
89}
90
92{
93 ob->id.tag &= ~ID_TAG_DOIT;
94}
95
97{
98 ob->id.tag |= ID_TAG_DOIT;
99}
100
101BlenderContext::BlenderContext(bContext *C)
102{
103 context = C;
104 main = CTX_data_main(C);
105 scene = CTX_data_scene(C);
106 view_layer = CTX_data_view_layer(C);
107 depsgraph = nullptr; /* create only when needed */
108}
109
110bContext *BlenderContext::get_context()
111{
112 return context;
113}
114
115Depsgraph *BlenderContext::get_depsgraph()
116{
117 if (!depsgraph) {
118 depsgraph = BKE_scene_ensure_depsgraph(main, scene, view_layer);
119 }
120 return depsgraph;
121}
122
123Scene *BlenderContext::get_scene()
124{
125 return scene;
126}
127
128Scene *BlenderContext::get_evaluated_scene()
129{
130 Scene *scene_eval = DEG_get_evaluated_scene(get_depsgraph());
131 return scene_eval;
132}
133
134Object *BlenderContext::get_evaluated_object(Object *ob)
135{
137 return ob_eval;
138}
139
140ViewLayer *BlenderContext::get_view_layer()
141{
142 return view_layer;
143}
144
145Main *BlenderContext::get_main()
146{
147 return main;
148}
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
Depsgraph * BKE_scene_ensure_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer)
Definition scene.cc:3377
#define LISTBASE_FOREACH(type, var, list)
bool bc_is_base_node(LinkNode *export_set, Object *ob, const Scene *scene, ViewLayer *view_layer)
void bc_remove_mark(Object *ob)
Object * bc_get_highest_exported_ancestor_or_self(LinkNode *export_set, Object *ob, const Scene *scene, ViewLayer *view_layer)
bool bc_is_in_Export_set(LinkNode *export_set, Object *ob, const Scene *scene, ViewLayer *view_layer)
void bc_get_children(std::vector< Object * > &child_set, Object *ob, const Scene *scene, ViewLayer *view_layer)
int bc_is_marked(Object *ob)
void bc_set_mark(Object *ob)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
@ ID_TAG_DOIT
Definition DNA_ID.h:1003
@ OB_EMPTY
@ OB_CAMERA
@ OB_ARMATURE
@ OB_LAMP
@ OB_MESH
#define C
Definition RandGen.cpp:29
const Depsgraph * depsgraph
int main()
int tag
Definition DNA_ID.h:434
struct Object * parent