Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/scene.c')
-rw-r--r--source/blender/blenkernel/intern/scene.c67
1 files changed, 37 insertions, 30 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index fe52375617b..8793c412d7d 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -38,14 +38,16 @@
#else
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_group_types.h"
+#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_anim.h"
#include "BKE_animsys.h"
#include "BKE_depsgraph.h"
@@ -67,10 +69,6 @@
//XXX #include "BIF_previewrender.h"
//XXX #include "BIF_editseq.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -171,9 +169,12 @@ Scene *copy_scene(Main *bmain, Scene *sce, int type)
BLI_duplicatelist(&(scen->transform_spaces), &(sce->transform_spaces));
BLI_duplicatelist(&(scen->r.layers), &(sce->r.layers));
BKE_keyingsets_copy(&(scen->keyingsets), &(sce->keyingsets));
-
- scen->nodetree= ntreeCopyTree(sce->nodetree, 0);
-
+
+ if(sce->nodetree) {
+ scen->nodetree= ntreeCopyTree(sce->nodetree, 0);
+ ntreeSwitchID(scen->nodetree, &sce->id, &scen->id);
+ }
+
obase= sce->base.first;
base= scen->base.first;
while(base) {
@@ -316,11 +317,12 @@ void free_scene(Scene *sce)
Scene *add_scene(char *name)
{
+ Main *bmain= G.main;
Scene *sce;
ParticleEditSettings *pset;
int a;
- sce= alloc_libblock(&G.main->scene, ID_SCE, name);
+ sce= alloc_libblock(&bmain->scene, ID_SCE, name);
sce->lay= sce->layact= 1;
sce->r.mode= R_GAMMA|R_OSA|R_SHADOW|R_SSS|R_ENVMAP|R_RAYTRACE;
@@ -395,6 +397,7 @@ Scene *add_scene(char *name)
sce->toolsettings->jointrilimit = 0.8f;
sce->toolsettings->selectmode= SCE_SELECT_VERTEX;
+ sce->toolsettings->uv_selectmode= UV_SELECT_VERTEX;
sce->toolsettings->normalsize= 0.1;
sce->toolsettings->autokey_mode= U.autokey_mode;
@@ -500,7 +503,7 @@ Base *object_in_scene(Object *ob, Scene *sce)
return NULL;
}
-void set_scene_bg(Scene *scene)
+void set_scene_bg(Main *bmain, Scene *scene)
{
Scene *sce;
Base *base;
@@ -510,14 +513,18 @@ void set_scene_bg(Scene *scene)
int flag;
/* check for cyclic sets, for reading old files but also for definite security (py?) */
- scene_check_setscene(scene);
+ scene_check_setscene(bmain, scene);
+ /* can happen when switching modes in other scenes */
+ if(scene->obedit && !(scene->obedit->mode & OB_MODE_EDIT))
+ scene->obedit= NULL;
+
/* deselect objects (for dataselect) */
- for(ob= G.main->object.first; ob; ob= ob->id.next)
+ for(ob= bmain->object.first; ob; ob= ob->id.next)
ob->flag &= ~(SELECT|OB_FROMGROUP);
/* group flags again */
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
go= group->gobject.first;
while(go) {
if(go->ob) go->ob->flag |= OB_FROMGROUP;
@@ -526,12 +533,12 @@ void set_scene_bg(Scene *scene)
}
/* sort baselist */
- DAG_scene_sort(scene);
+ DAG_scene_sort(bmain, scene);
/* ensure dags are built for sets */
for(sce= scene->set; sce; sce= sce->set)
if(sce->theDag==NULL)
- DAG_scene_sort(sce);
+ DAG_scene_sort(bmain, sce);
/* copy layers and flags from bases to objects */
for(base= scene->base.first; base; base= base->next) {
@@ -553,11 +560,11 @@ void set_scene_bg(Scene *scene)
}
/* called from creator.c */
-Scene *set_scene_name(char *name)
+Scene *set_scene_name(Main *bmain, char *name)
{
Scene *sce= (Scene *)find_id("SC", name);
if(sce) {
- set_scene_bg(sce);
+ set_scene_bg(bmain, sce);
printf("Scene switch: '%s' in file: '%s'\n", name, G.sce);
return sce;
}
@@ -577,7 +584,7 @@ void unlink_scene(Main *bmain, Scene *sce, Scene *newsce)
sce1->set= NULL;
/* check all sequences */
- clear_scene_in_allseqs(sce);
+ clear_scene_in_allseqs(bmain, sce);
/* check render layer nodes in other scenes */
clear_scene_in_nodes(bmain, sce);
@@ -866,7 +873,7 @@ void scene_select_base(Scene *sce, Base *selbase)
}
/* checks for cycle, returns 1 if it's all OK */
-int scene_check_setscene(Scene *sce)
+int scene_check_setscene(Main *bmain, Scene *sce)
{
Scene *scene;
int a, totscene;
@@ -874,7 +881,7 @@ int scene_check_setscene(Scene *sce)
if(sce->set==NULL) return 1;
totscene= 0;
- for(scene= G.main->scene.first; scene; scene= scene->id.next)
+ for(scene= bmain->scene.first; scene; scene= scene->id.next)
totscene++;
for(a=0, scene=sce; scene->set; scene=scene->set, a++) {
@@ -902,14 +909,14 @@ float BKE_curframe(Scene *scene)
return ctime;
}
-static void scene_update_tagged_recursive(Scene *scene, Scene *scene_parent)
+static void scene_update_tagged_recursive(Main *bmain, Scene *scene, Scene *scene_parent)
{
Base *base;
/* sets first, we allow per definition current scene to have
dependencies on sets, but not the other way around. */
if(scene->set)
- scene_update_tagged_recursive(scene->set, scene_parent);
+ scene_update_tagged_recursive(bmain, scene->set, scene_parent);
for(base= scene->base.first; base; base= base->next) {
Object *ob= base->object;
@@ -925,14 +932,14 @@ static void scene_update_tagged_recursive(Scene *scene, Scene *scene_parent)
}
/* this is called in main loop, doing tagged updates before redraw */
-void scene_update_tagged(Scene *scene)
+void scene_update_tagged(Main *bmain, Scene *scene)
{
scene->physics_settings.quick_cache_step= 0;
/* update all objects: drivers, matrices, displists, etc. flags set
by depgraph or manual, no layer check here, gets correct flushed */
- scene_update_tagged_recursive(scene, scene);
+ scene_update_tagged_recursive(bmain, scene, scene);
/* recalc scene animation data here (for sequencer) */
{
@@ -944,14 +951,14 @@ void scene_update_tagged(Scene *scene)
}
if(scene->physics_settings.quick_cache_step)
- BKE_ptcache_quick_cache_all(scene);
+ BKE_ptcache_quick_cache_all(bmain, scene);
/* in the future this should handle updates for all datablocks, not
only objects and scenes. - brecht */
}
/* applies changes right away, does all sets too */
-void scene_update_for_newframe(Scene *sce, unsigned int lay)
+void scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
{
float ctime = BKE_curframe(sce);
Scene *sce_iter;
@@ -961,13 +968,13 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
for(sce_iter= sce; sce_iter; sce_iter= sce_iter->set) {
if(sce_iter->theDag==NULL)
- DAG_scene_sort(sce_iter);
+ DAG_scene_sort(bmain, sce_iter);
}
/* Following 2 functions are recursive
* so dont call within 'scene_update_tagged_recursive' */
- DAG_scene_update_flags(sce, lay); // only stuff that moves or needs display still
+ DAG_scene_update_flags(bmain, sce, lay); // only stuff that moves or needs display still
/* All 'standard' (i.e. without any dependencies) animation is handled here,
* with an 'local' to 'macro' order of evaluation. This should ensure that
@@ -975,11 +982,11 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay)
* can be overridden by settings from Scene, which owns the Texture through a hierarchy
* such as Scene->World->MTex/Texture) can still get correctly overridden.
*/
- BKE_animsys_evaluate_all_animation(G.main, ctime);
+ BKE_animsys_evaluate_all_animation(bmain, ctime);
/*...done with recusrive funcs */
/* object_handle_update() on all objects, groups and sets */
- scene_update_tagged_recursive(sce, sce);
+ scene_update_tagged_recursive(bmain, sce, sce);
}
/* return default layer, also used to patch old files */