Commit: 3ae44ffa9a8f0dc66561e8abf57c721b96320aa6
Author: Julian Eisel
Date:   Wed Jul 27 01:06:44 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB3ae44ffa9a8f0dc66561e8abf57c721b96320aa6

Compatibility with old local view storage

Reading old .blends works just fine now.

===================================================================

M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/versioning_270.c

===================================================================

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index f538087..db101f1 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6245,6 +6245,11 @@ static void lib_link_screen(FileData *fd, Main *main)
                                                        bgpic->ima = 
newlibadr_us(fd, sc->id.lib, bgpic->ima);
                                                        bgpic->clip = 
newlibadr_us(fd, sc->id.lib, bgpic->clip);
                                                }
+                                               /* old localview data */
+                                               if (v3d->localvd) {
+                                                       v3d->localvd->camera = 
newlibadr(fd, sc->id.lib, v3d->localvd->camera);
+                                               }
+                                               /* new localview data */
                                                if (v3d->localviewd) {
                                                        v3d->localviewd->camera 
= newlibadr(fd, sc->id.lib, v3d->localviewd->camera);
                                                }
@@ -6565,6 +6570,9 @@ void blo_lib_link_screen_restore(Main *newmain, bScreen 
*curscreen, Scene *cursc
                                        if (v3d->localviewd) {
                                                /*Base *base;*/
 
+                                               /* old localview data */
+                                               v3d->localvd->camera = 
sc->scene->camera;
+                                               /* new localview data */
                                                v3d->localviewd->camera = 
sc->scene->camera;
 
                                                /* localview can become invalid 
during undo/redo steps, so we exit it when no could be found */
@@ -6829,7 +6837,11 @@ static void direct_link_region(FileData *fd, ARegion 
*ar, int spacetype)
                        if (spacetype == SPACE_VIEW3D) {
                                RegionView3D *rv3d = ar->regiondata;
 
+                               /* old localview data */
+                               rv3d->localvd = newdataadr(fd, rv3d->localvd);
+                               /* new localview data */
                                rv3d->localviewd = newdataadr(fd, 
rv3d->localviewd);
+
                                rv3d->clipbb = newdataadr(fd, rv3d->clipbb);
 
                                rv3d->depths = NULL;
@@ -6984,7 +6996,12 @@ static bool direct_link_screen(FileData *fd, bScreen *sc)
                                        v3d->gpd = newdataadr(fd, v3d->gpd);
                                        direct_link_gpencil(fd, v3d->gpd);
                                }
+
+                               /* old localview data */
+                               v3d->localvd = newdataadr(fd, v3d->localvd);
+                               /* new localview data */
                                v3d->localviewd = newdataadr(fd, 
v3d->localviewd);
+
                                BLI_listbase_clear(&v3d->afterdraw_transp);
                                BLI_listbase_clear(&v3d->afterdraw_xray);
                                BLI_listbase_clear(&v3d->afterdraw_xraytransp);
diff --git a/source/blender/blenloader/intern/versioning_270.c 
b/source/blender/blenloader/intern/versioning_270.c
index ac2811a..004bc84 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -172,6 +172,45 @@ static void do_version_bones_super_bbone(ListBase *lb)
        }
 }
 
+static void do_version_localview_regiondata(RegionView3D *rv3d)
+{
+       RegionView3D *old_lvd = rv3d->localvd;
+       if (!old_lvd) {
+               return;
+       }
+
+       LocalViewRegionData *new_lvd = MEM_mallocN(sizeof(*rv3d->localviewd), 
__func__);
+       new_lvd->camzoom = old_lvd->camzoom;
+       new_lvd->persp = old_lvd->persp;
+       new_lvd->view = old_lvd->view;
+       new_lvd->dist = old_lvd->dist;
+       copy_qt_qt(new_lvd->viewquat, old_lvd->viewquat);
+       copy_v3_v3(new_lvd->ofs, old_lvd->ofs);
+
+       rv3d->localviewd = new_lvd;
+       /* remove old data */
+       MEM_freeN(rv3d->localvd);
+}
+
+static void do_version_localview_areadata(View3D *v3d)
+{
+       View3D *old_lvd = v3d->localvd;
+       if (!old_lvd) {
+               return;
+       }
+
+       LocalViewAreaData *new_lvd = MEM_mallocN(sizeof(*v3d->localviewd), 
__func__);
+       new_lvd->viewbits = 0; /* XXX */
+       new_lvd->near = old_lvd->near;
+       new_lvd->far = old_lvd->far;
+       new_lvd->drawtype = old_lvd->drawtype;
+       new_lvd->camera = old_lvd->camera;
+
+       v3d->localviewd = new_lvd;
+       /* remove old data */
+       MEM_freeN(v3d->localvd);
+}
+
 void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 {
        if (!MAIN_VERSION_ATLEAST(main, 270, 0)) {
@@ -1226,4 +1265,23 @@ void blo_do_versions_270(FileData *fd, Library 
*UNUSED(lib), Main *main)
                        }
                }
        }
+
+       {
+               if (!DNA_struct_elem_find(fd->filesdna, "View3D", 
"LocalViewAreaData", "localviewd")) {
+                       for (bScreen *screen = main->screen.first; screen; 
screen = screen->id.next) {
+                               for (ScrArea *sa = screen->areabase.first; sa; 
sa = sa->next) {
+                                       for (SpaceLink *sl = 
sa->spacedata.first; sl; sl = sl->next) {
+                                               if (sl->spacetype == 
SPACE_VIEW3D) {
+                                                       
do_version_localview_areadata((View3D *)sl);
+                                                       for (ARegion *ar = 
sa->regionbase.first; ar; ar = ar->next) {
+                                                               if 
(ar->regiontype == RGN_TYPE_WINDOW) {
+                                                                       
do_version_localview_regiondata(ar->regiondata);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
 }

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

Reply via email to