[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