[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18575] branches/blender2.5/blender/source : 2.5
Ton Roosendaal
ton at blender.org
Mon Jan 19 17:54:41 CET 2009
Revision: 18575
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18575
Author: ton
Date: 2009-01-19 17:54:41 +0100 (Mon, 19 Jan 2009)
Log Message:
-----------
2.5
View3D has been split now in a local part (RegionView3D) and a
per-area part (old View3D). Currently local is:
- view transform
- camera zoom/offset
- gpencil (todo)
- custom clipping planes
Rest is in Area still, like active camera, draw type, layers,
localview, custom centers, around-settings, transform widget,
gridlines, and so on (mostly stuff as available in header).
To see it work; also added new feature for region split,
press SHIFT+ALT+CTRL+S for four-split.
The idea is to make a preset 4-split, configured to stick
to top/right/front views for three views.
Another cool idea to explore is to then box-clip all drawing
based on these 3 views.
Note about the code:
- currently view3d still stores some depricated settings, to
convert from older files. Not all settings are copied over
though, like custom clip planes or the 'lock view to object'.
- since some view3d ops are now on area level, the operators
for it should keep track of that.
Bugfix in transform: quat initialize in operator-invoke missed
one zero.
Als brought back GE to compile for missing Ipos and channels.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
branches/blender2.5/blender/source/blender/editors/armature/editarmature.c
branches/blender2.5/blender/source/blender/editors/curve/editcurve.c
branches/blender2.5/blender/source/blender/editors/gpencil/gpencil.c
branches/blender2.5/blender/source/blender/editors/include/ED_object.h
branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
branches/blender2.5/blender/source/blender/editors/mesh/editface.c
branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
branches/blender2.5/blender/source/blender/editors/mesh/meshtools.c
branches/blender2.5/blender/source/blender/editors/object/object_edit.c
branches/blender2.5/blender/source/blender/editors/screen/area.c
branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
branches/blender2.5/blender/source/blender/editors/sculpt/sculpt.c
branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c
branches/blender2.5/blender/source/blender/editors/space_view3d/drawarmature.c
branches/blender2.5/blender/source/blender/editors/space_view3d/drawmesh.c
branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c
branches/blender2.5/blender/source/blender/editors/transform/transform.c
branches/blender2.5/blender/source/blender/editors/transform/transform.h
branches/blender2.5/blender/source/blender/editors/transform/transform_constraints.c
branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c
branches/blender2.5/blender/source/blender/editors/transform/transform_generics.c
branches/blender2.5/blender/source/blender/editors/transform/transform_manipulator.c
branches/blender2.5/blender/source/blender/editors/transform/transform_ops.c
branches/blender2.5/blender/source/blender/editors/transform/transform_orientations.c
branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c
branches/blender2.5/blender/source/blender/gpu/GPU_draw.h
branches/blender2.5/blender/source/blender/gpu/intern/gpu_draw.c
branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h
branches/blender2.5/blender/source/blender/makesdna/DNA_screen_types.h
branches/blender2.5/blender/source/blender/makesdna/DNA_view3d_types.h
branches/blender2.5/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
branches/blender2.5/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
branches/blender2.5/blender/source/gameengine/Converter/BL_ShapeDeformer.cpp
branches/blender2.5/blender/source/gameengine/Converter/KX_BlenderScalarInterpolator.cpp
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-01-19 16:46:41 UTC (rev 18574)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h 2009-01-19 16:54:41 UTC (rev 18575)
@@ -45,6 +45,8 @@
struct Scene;
struct ScrArea;
struct SpaceLink;
+struct View3D;
+struct RegionView3D;
struct StructRNA;
struct ToolSettings;
struct Image;
@@ -96,6 +98,7 @@
struct ScrArea *CTX_wm_area(const bContext *C);
struct SpaceLink *CTX_wm_space_data(const bContext *C);
struct View3D *CTX_wm_view3d(const bContext *C);
+struct RegionView3D *CTX_wm_region_view3d(const bContext *C);
struct ARegion *CTX_wm_region(const bContext *C);
void *CTX_wm_region_data(const bContext *C);
struct uiBlock *CTX_wm_ui_block(const bContext *C);
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-01-19 16:46:41 UTC (rev 18574)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_screen.h 2009-01-19 16:54:41 UTC (rev 18575)
@@ -105,6 +105,10 @@
void (*free)(struct ARegion *);
+ /* split region, copy data optionally */
+ void *(*duplicate)(void *);
+
+
/* register operator types on startup */
void (*operatortypes)(void);
/* add own items to keymap */
@@ -127,6 +131,7 @@
/* spacetypes */
struct SpaceType *BKE_spacetype_from_id(int spaceid);
+struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
const struct ListBase *BKE_spacetypes_list(void);
void BKE_spacetype_register(struct SpaceType *st);
void BKE_spacetypes_free(void); /* only for quitting blender */
@@ -136,8 +141,8 @@
void BKE_spacedata_copylist(ListBase *lb1, ListBase *lb2);
/* area/regions */
-struct ARegion *BKE_area_region_copy(struct ARegion *ar);
-void BKE_area_region_free(struct ARegion *ar);
+struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
+void BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
void BKE_screen_area_free(struct ScrArea *sa);
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-01-19 16:46:41 UTC (rev 18574)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c 2009-01-19 16:54:41 UTC (rev 18575)
@@ -171,6 +171,13 @@
return NULL;
}
+RegionView3D *CTX_wm_region_view3d(const bContext *C)
+{
+ if(C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D)
+ if(C->wm.region)
+ return C->wm.region->regiondata;
+ return NULL;
+}
ARegion *CTX_wm_region(const bContext *C)
{
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/object.c 2009-01-19 16:46:41 UTC (rev 18574)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/object.c 2009-01-19 16:54:41 UTC (rev 18575)
@@ -546,11 +546,11 @@
if(v3d->camera==ob) {
v3d->camera= NULL;
- if(v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP;
+ // XXX if(v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP;
}
if(v3d->localvd && v3d->localvd->camera==ob ) {
v3d->localvd->camera= NULL;
- if(v3d->localvd->persp==V3D_CAMOB) v3d->localvd->persp= V3D_PERSP;
+ // XXX if(v3d->localvd->persp==V3D_CAMOB) v3d->localvd->persp= V3D_PERSP;
}
}
else if(sl->spacetype==SPACE_OOPS) {
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c 2009-01-19 16:46:41 UTC (rev 18574)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/screen.c 2009-01-19 16:54:41 UTC (rev 18575)
@@ -82,6 +82,19 @@
return NULL;
}
+ARegionType *BKE_regiontype_from_id(SpaceType *st, int regionid)
+{
+ ARegionType *art;
+
+ for(art= st->regiontypes.first; art; art= art->next)
+ if(art->regionid==regionid)
+ return art;
+
+ printf("Error, region type missing in %s\n", st->name);
+ return st->regiontypes.first;
+}
+
+
const ListBase *BKE_spacetypes_list()
{
return &spacetypes;
@@ -113,9 +126,9 @@
SpaceType *st= BKE_spacetype_from_id(sl->spacetype);
/* free regions for pushed spaces */
- for(ar=sl->regionbase.first; ar; ar=ar->next) {
- BKE_area_region_free(ar);
- }
+ for(ar=sl->regionbase.first; ar; ar=ar->next)
+ BKE_area_region_free(st, ar);
+
BLI_freelistN(&sl->regionbase);
if(st && st->free)
@@ -125,19 +138,26 @@
BLI_freelistN(lb);
}
-ARegion *BKE_area_region_copy(ARegion *ar)
+ARegion *BKE_area_region_copy(SpaceType *st, ARegion *ar)
{
ARegion *newar= MEM_dupallocN(ar);
Panel *pa, *newpa, *patab;
+ newar->prev= newar->next= NULL;
newar->handlers.first= newar->handlers.last= NULL;
newar->uiblocks.first= newar->uiblocks.last= NULL;
newar->swinid= 0;
- /* XXX regiondata callback */
- if(ar->regiondata)
- newar->regiondata= MEM_dupallocN(ar->regiondata);
+ /* use optional regiondata callback */
+ if(ar->regiondata) {
+ ARegionType *art= BKE_regiontype_from_id(st, ar->regiontype);
+ if(art && art->duplicate)
+ newar->regiondata= art->duplicate(ar->regiondata);
+ else
+ newar->regiondata= MEM_dupallocN(ar->regiondata);
+ }
+
newar->panels.first= newar->panels.last= NULL;
BLI_duplicatelist(&newar->panels, &ar->panels);
@@ -160,7 +180,7 @@
/* from lb2 to lb1, lb1 is supposed to be free'd */
-static void region_copylist(ListBase *lb1, ListBase *lb2)
+static void region_copylist(SpaceType *st, ListBase *lb1, ListBase *lb2)
{
ARegion *ar;
@@ -168,7 +188,7 @@
lb1->first= lb1->last= NULL;
for(ar= lb2->first; ar; ar= ar->next) {
- ARegion *arnew= BKE_area_region_copy(ar);
+ ARegion *arnew= BKE_area_region_copy(st, ar);
BLI_addtail(lb1, arnew);
}
}
@@ -189,18 +209,21 @@
BLI_addtail(lb1, slnew);
- region_copylist(&slnew->regionbase, &sl->regionbase);
+ region_copylist(st, &slnew->regionbase, &sl->regionbase);
}
}
}
/* not region itself */
-void BKE_area_region_free(ARegion *ar)
+void BKE_area_region_free(SpaceType *st, ARegion *ar)
{
+ if(st) {
+ ARegionType *art= BKE_regiontype_from_id(st, ar->regiontype);
+
+ if(art && art->free)
+ art->free(ar);
+ }
if(ar) {
- if(ar->type && ar->type->free)
- ar->type->free(ar);
-
BLI_freelistN(&ar->panels);
}
}
@@ -208,16 +231,16 @@
/* not area itself */
void BKE_screen_area_free(ScrArea *sa)
{
- ARegion *ar, *arn;
+ SpaceType *st= BKE_spacetype_from_id(sa->spacetype);
+ ARegion *ar;
- for(ar=sa->regionbase.first; ar; ar=arn) {
- arn= ar->next;
- BKE_area_region_free(ar);
- }
+ for(ar=sa->regionbase.first; ar; ar=ar->next)
+ BKE_area_region_free(st, ar);
+ BLI_freelistN(&sa->regionbase);
+
BKE_spacedata_freelist(&sa->spacedata);
- BLI_freelistN(&sa->regionbase);
BLI_freelistN(&sa->actionzones);
#ifndef DISABLE_PYTHON
@@ -229,12 +252,11 @@
void free_screen(bScreen *sc)
{
ScrArea *sa, *san;
- ARegion *ar, *arn;
+ ARegion *ar;
- for(ar=sc->regionbase.first; ar; ar=arn) {
- arn= ar->next;
- BKE_area_region_free(ar);
- }
+ for(ar=sc->regionbase.first; ar; ar=ar->next)
+ BKE_area_region_free(NULL, ar);
+
BLI_freelistN(&sc->regionbase);
for(sa= sc->areabase.first; sa; sa= san) {
Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-01-19 16:46:41 UTC (rev 18574)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c 2009-01-19 16:54:41 UTC (rev 18575)
@@ -4101,8 +4101,6 @@
if(v3d->localvd) {
v3d->localvd->camera= newlibadr(fd, sc->id.lib, v3d->localvd->camera);
}
- v3d->depths= NULL;
- v3d->ri= NULL;
}
else if(sl->spacetype==SPACE_IPO) {
SpaceIpo *sipo= (SpaceIpo *)sl;
@@ -4409,7 +4407,7 @@
}
}
-static void direct_link_region(FileData *fd, ARegion *ar)
+static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
{
Panel *pa;
@@ -4421,15 +4419,51 @@
pa->sortcounter= 0;
pa->activedata= NULL;
}
-
+
+ ar->regiondata= newdataadr(fd, ar->regiondata);
+ if(ar->regiondata) {
+ if(spacetype==SPACE_VIEW3D) {
+ RegionView3D *rv3d= ar->regiondata;
+
+ rv3d->localvd= newdataadr(fd, rv3d->localvd);
+ rv3d->clipbb= newdataadr(fd, rv3d->clipbb);
+
+ rv3d->depths= NULL;
+ rv3d->retopo_view_data= NULL;
+ rv3d->ri= NULL;
+ rv3d->sms= NULL;
+ rv3d->smooth_timer= NULL;
+ }
+ }
+
ar->handlers.first= ar->handlers.last= NULL;
ar->uiblocks.first= ar->uiblocks.last= NULL;
ar->headerstr= NULL;
- ar->regiondata= NULL;
ar->swinid= 0;
ar->type= NULL;
}
+/* for the saved 2.50 files without regiondata */
+/* and as patch for 2.48 and older */
+static void view3d_split_250(View3D *v3d, ListBase *regions)
+{
+ ARegion *ar;
+
+ for(ar= regions->first; ar; ar= ar->next) {
+ if(ar->regiontype==RGN_TYPE_WINDOW && ar->regiondata==NULL) {
+ RegionView3D *rv3d;
+
+ rv3d= ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region v3d");
+ rv3d->persp= v3d->persp;
+ rv3d->view= v3d->view;
+ rv3d->dist= v3d->dist;
+ VECCOPY(rv3d->ofs, v3d->ofs);
+ QUATCOPY(rv3d->viewquat, v3d->viewquat);
+ Mat4One(rv3d->twmat);
+ }
+ }
+}
+
static void direct_link_screen(FileData *fd, bScreen *sc)
{
ScrArea *sa;
@@ -4482,6 +4516,9 @@
sa->handlers.first= sa->handlers.last= NULL;
sa->type= NULL; /* spacetype callbacks */
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ direct_link_region(fd, ar, sa->spacetype);
+
/* accident can happen when read/save new file with older version */
/* 2.50: we now always add spacedata for info */
if(sa->spacedata.first==NULL) {
@@ -4489,12 +4526,15 @@
sa->spacetype= SPACE_INFO;
BLI_addtail(&sa->spacedata, sinfo);
}
+ /* add local view3d too */
+ else if(sa->spacetype==SPACE_VIEW3D)
+ view3d_split_250(sa->spacedata.first, &sa->regionbase);
for (sl= sa->spacedata.first; sl; sl= sl->next) {
link_list(fd, &(sl->regionbase));
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list