Revision: 28359
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28359
Author:   campbellbarton
Date:     2010-04-22 21:57:18 +0200 (Thu, 22 Apr 2010)

Log Message:
-----------
chaning the camera from the scene buttons didnt update the views. moved some 
scene/view functions from view3d_view.c into BKE_screen since they need to be 
accessed when changing cameras from outside the view.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_screen.h
    trunk/blender/source/blender/blenkernel/intern/screen.c
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_header.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_screen.h        2010-04-22 
18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/blenkernel/BKE_screen.h        2010-04-22 
19:57:18 UTC (rev 28359)
@@ -235,6 +235,11 @@
 
 struct ARegion *BKE_area_find_region_type(struct ScrArea *sa, int type);
 
+void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
+void BKE_screen_view3d_scene_sync(struct bScreen *sc);
+void BKE_screen_view3d_main_sync(ListBase *screen_lb, struct Scene *scene);
+
+
 /* screen */
 void free_screen(struct bScreen *sc); 
 unsigned int BKE_screen_visible_layers(struct bScreen *screen, struct Scene 
*scene);

Modified: trunk/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/screen.c     2010-04-22 
18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/blenkernel/intern/screen.c     2010-04-22 
19:57:18 UTC (rev 28359)
@@ -330,3 +330,67 @@
        }
        return NULL;
 }
+
+void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene)
+{
+       int bit;
+
+       if(v3d->scenelock && v3d->localvd==NULL) {
+               v3d->lay= scene->lay;
+               v3d->camera= scene->camera;
+
+               if(v3d->camera==NULL) {
+                       ARegion *ar;
+
+                       for(ar=v3d->regionbase.first; ar; ar= ar->next) {
+                               if(ar->regiontype == RGN_TYPE_WINDOW) {
+                                       RegionView3D *rv3d= ar->regiondata;
+                                       if(rv3d->persp==RV3D_CAMOB)
+                                               rv3d->persp= RV3D_PERSP;
+                               }
+                       }
+               }
+
+               if((v3d->lay & v3d->layact) == 0) {
+                       for(bit= 0; bit<32; bit++) {
+                               if(v3d->lay & (1<<bit)) {
+                                       v3d->layact= 1<<bit;
+                                       break;
+                               }
+                       }
+               }
+       }
+}
+
+void BKE_screen_view3d_scene_sync(bScreen *sc)
+{
+       /* are there cameras in the views that are not in the scene? */
+       ScrArea *sa;
+       for(sa= sc->areabase.first; sa; sa= sa->next) {
+               SpaceLink *sl;
+               for(sl= sa->spacedata.first; sl; sl= sl->next) {
+                       if(sl->spacetype==SPACE_VIEW3D) {
+                               View3D *v3d= (View3D*) sl;
+                               BKE_screen_view3d_sync(v3d, sc->scene);
+                       }
+               }
+       }
+}
+
+void BKE_screen_view3d_main_sync(ListBase *screen_lb, Scene *scene)
+{
+       bScreen *sc;
+       ScrArea *sa;
+       SpaceLink *sl;
+
+       /* from scene copy to the other views */
+       for(sc=screen_lb->first; sc; sc=sc->id.next) {
+               if(sc->scene!=scene)
+                       continue;
+
+               for(sa=sc->areabase.first; sa; sa=sa->next)
+                       for(sl=sa->spacedata.first; sl; sl=sl->next)
+                               if(sl->spacetype==SPACE_VIEW3D)
+                                       BKE_screen_view3d_sync((View3D*)sl, 
scene);
+       }
+}

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h    2010-04-22 
18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h    2010-04-22 
19:57:18 UTC (rev 28359)
@@ -153,8 +153,6 @@
 
 void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
 
-void ED_view3d_scene_layers_copy(struct View3D *v3d, struct Scene *scene);
-void ED_view3d_scene_layers_update(struct Main *bmain, struct Scene *scene);
 int ED_view3d_scene_layer_set(int lay, const int *values);
 
 int ED_view3d_context_activate(struct bContext *C);

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c   2010-04-22 
18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c   2010-04-22 
19:57:18 UTC (rev 28359)
@@ -1395,7 +1395,7 @@
                                        if(sl->spacetype==SPACE_VIEW3D) {
                                                View3D *v3d= (View3D*) sl;
 
-                                               
ED_view3d_scene_layers_copy(v3d, scene);
+                                               BKE_screen_view3d_sync(v3d, 
scene);
 
                                                if (!v3d->camera || 
!object_in_scene(v3d->camera, scene)) {
                                                        v3d->camera= 
scene_find_camera(sc->scene);
@@ -1729,20 +1729,7 @@
                        bScreen *sc;
                        /* are there cameras in the views that are not in the 
scene? */
                        for(sc= CTX_data_main(C)->screen.first; sc; sc= 
sc->id.next) {
-                               ScrArea *sa= sc->areabase.first;
-                               while(sa) {
-                                       SpaceLink *sl= sa->spacedata.first;
-                                       while(sl) {
-                                               if(sl->spacetype==SPACE_VIEW3D) 
{
-                                                       View3D *v3d= (View3D*) 
sl;
-                                                       if (v3d->scenelock) {
-                                                               v3d->camera= 
camera;
-                                                       }
-                                               }
-                                               sl= sl->next;
-                                       }
-                                       sa= sa->next;
-                               }
+                               BKE_screen_view3d_scene_sync(sc);
                        }
                }
 

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_header.c   
2010-04-22 18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c   
2010-04-22 19:57:18 UTC (rev 28359)
@@ -141,7 +141,7 @@
 
                        /* not through notifiery, listener don't have context
                           and non-open screens or spaces need to be updated 
too */
-                       ED_view3d_scene_layers_update(bmain, scene);
+                       BKE_screen_view3d_main_sync(&bmain->screen, scene);
                        
                        /* notifiers for scene update */
                        WM_event_add_notifier(C, NC_SCENE|ND_LAYER, scene);

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c     
2010-04-22 18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c     
2010-04-22 19:57:18 UTC (rev 28359)
@@ -1385,60 +1385,6 @@
        return 0;
 }
 
-static void copy_view3d_lock_space(View3D *v3d, Scene *scene)
-{
-       int bit;
-       
-       if(v3d->scenelock && v3d->localvd==NULL) {
-               v3d->lay= scene->lay;
-               v3d->camera= scene->camera;
-               
-               if(v3d->camera==NULL) {
-                       ARegion *ar;
-                       
-                       for(ar=v3d->regionbase.first; ar; ar= ar->next) {
-                               if(ar->regiontype == RGN_TYPE_WINDOW) {
-                                       RegionView3D *rv3d= ar->regiondata;
-                                       if(rv3d->persp==RV3D_CAMOB)
-                                               rv3d->persp= RV3D_PERSP;
-                               }
-                       }
-               }
-               
-               if((v3d->lay & v3d->layact) == 0) {
-                       for(bit= 0; bit<32; bit++) {
-                               if(v3d->lay & (1<<bit)) {
-                                       v3d->layact= 1<<bit;
-                                       break;
-                               }
-                       }
-               }
-       }
-}
-
-void ED_view3d_scene_layers_copy(struct View3D *v3d, struct Scene *scene)
-{
-       copy_view3d_lock_space(v3d, scene);
-}
-
-void ED_view3d_scene_layers_update(Main *bmain, Scene *scene)
-{
-       bScreen *sc;
-       ScrArea *sa;
-       SpaceLink *sl;
-       
-       /* from scene copy to the other views */
-       for(sc=bmain->screen.first; sc; sc=sc->id.next) {
-               if(sc->scene!=scene)
-                       continue;
-               
-               for(sa=sc->areabase.first; sa; sa=sa->next)
-                       for(sl=sa->spacedata.first; sl; sl=sl->next)
-                               if(sl->spacetype==SPACE_VIEW3D)
-                                       copy_view3d_lock_space((View3D*)sl, 
scene);
-       }
-}
-
 int ED_view3d_scene_layer_set(int lay, const int *values)
 {
        int i, tot= 0;

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c    2010-04-22 
18:22:04 UTC (rev 28358)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c    2010-04-22 
19:57:18 UTC (rev 28359)
@@ -156,6 +156,7 @@
 #include "BKE_image.h"
 #include "BKE_mesh.h"
 #include "BKE_sound.h"
+#include "BKE_screen.h"
 
 #include "BLI_threads.h"
 #include "BLI_editVert.h"
@@ -273,11 +274,11 @@
        scene->lay= ED_view3d_scene_layer_set(scene->lay, values);
 }
 
-static void rna_Scene_layer_update(Main *bmain, Scene *unused, PointerRNA *ptr)
+static void rna_Scene_view3d_update(Main *bmain, Scene *unused, PointerRNA 
*ptr)
 {
        Scene *scene= (Scene*)ptr->data;
 
-       ED_view3d_scene_layers_update(bmain, scene);
+       BKE_screen_view3d_main_sync(&bmain->screen, scene);
 }
 
 static void rna_Scene_current_frame_set(PointerRNA *ptr, int value)
@@ -2860,7 +2861,7 @@
        prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Camera", "Active camera used for 
rendering the scene");
-       RNA_def_property_update(prop, NC_SCENE, NULL);
+       RNA_def_property_update(prop, NC_SCENE|NA_EDITED, 
"rna_Scene_view3d_update");
 
        prop= RNA_def_property(srna, "set", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "set");
@@ -2901,7 +2902,7 @@
        RNA_def_property_array(prop, 20);
        RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_layer_set");
        RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible when 
rendering the scene");
-       RNA_def_property_update(prop, NC_SCENE|ND_LAYER, 
"rna_Scene_layer_update");
+       RNA_def_property_update(prop, NC_SCENE|ND_LAYER, 
"rna_Scene_view3d_update");
        
        /* Frame Range Stuff */
        prop= RNA_def_property(srna, "frame_current", PROP_INT, PROP_TIME);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to