[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32937] trunk/blender/source/blender: fix for glitches with quad-split view.

Campbell Barton ideasman42 at gmail.com
Mon Nov 8 04:44:57 CET 2010


Revision: 32937
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32937
Author:   campbellbarton
Date:     2010-11-08 04:44:52 +0100 (Mon, 08 Nov 2010)

Log Message:
-----------
fix for glitches with quad-split view.
- Home or Numpad Period with smoothview disabled were not syncing up the other views.
- Disabling clip only disabled clip syncing but left clip enabled for all views.
- Clip was being calculated for every update even when not enabled.
- The perspective view was being used to copy settings from when changing box & clip settings, resetting the distance each time. Now use one of the aligned views instead.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_view3d.h
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/source/blender/editors/include/ED_view3d.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_view3d.h	2010-11-08 02:30:46 UTC (rev 32936)
+++ trunk/blender/source/blender/editors/include/ED_view3d.h	2010-11-08 03:44:52 UTC (rev 32937)
@@ -167,7 +167,7 @@
 
 
 Base *ED_view3d_give_base_under_cursor(struct bContext *C, short *mval);
-void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar);
+void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar, short do_clip);
 
 #endif /* ED_VIEW3D_H */
 

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2010-11-08 02:30:46 UTC (rev 32936)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2010-11-08 03:44:52 UTC (rev 32937)
@@ -159,6 +159,7 @@
 {
 	ARegion *artest;
 	RegionView3D *rv3d= ar->regiondata;
+	short clip= 0;
 
 	for(artest= sa->regionbase.first; artest; artest= artest->next) {
 		if(artest!=ar && artest->regiontype==RGN_TYPE_WINDOW) {
@@ -186,11 +187,16 @@
 						rv3dtest->ofs[2]= rv3d->ofs[2];
 				}
 
+				clip |= rv3dtest->viewlock & RV3D_BOXCLIP;
+
 				ED_region_tag_redraw(artest);
 			}
 		}
 	}
-	view3d_boxview_clip(sa);
+
+	if(clip) {
+		view3d_boxview_clip(sa);
+	}
 }
 
 /* for home, center etc */
@@ -198,6 +204,7 @@
 {
 	ARegion *artest;
 	RegionView3D *rv3d= ar->regiondata;
+	short clip= 0;
 
 	for(artest= sa->regionbase.first; artest; artest= artest->next) {
 		if(artest!=ar && artest->regiontype==RGN_TYPE_WINDOW) {
@@ -207,17 +214,23 @@
 				rv3dtest->dist= rv3d->dist;
 				copy_v3_v3(rv3dtest->ofs, rv3d->ofs);
 				ED_region_tag_redraw(artest);
+
+				clip |= rv3dtest->viewlock & RV3D_BOXCLIP;
 			}
 		}
 	}
-	view3d_boxview_clip(sa);
+
+	if(clip) {
+		view3d_boxview_clip(sa);
+	}
 }
 
-void ED_view3d_quadview_update(ScrArea *sa, ARegion *ar)
+/* 'clip' is used to know if our clip setting has changed */
+void ED_view3d_quadview_update(ScrArea *sa, ARegion *ar, short do_clip)
 {
+	ARegion *arsync= NULL;
 	RegionView3D *rv3d= ar->regiondata;
 	short viewlock;
-
 	/* this function copies flags from the first of the 3 other quadview
 	   regions to the 2 other, so it assumes this is the region whose
 	   properties are always being edited, weak */
@@ -225,18 +238,30 @@
 
 	if((viewlock & RV3D_LOCKED)==0)
 		viewlock= 0;
-	else if((viewlock & RV3D_BOXVIEW)==0)
+	else if((viewlock & RV3D_BOXVIEW)==0) {
 		viewlock &= ~RV3D_BOXCLIP;
+		do_clip= TRUE;
+	}
 
 	for(; ar; ar= ar->prev) {
 		if(ar->alignment==RGN_ALIGN_QSPLIT) {
 			rv3d= ar->regiondata;
 			rv3d->viewlock= viewlock;
+
+			if(do_clip && (viewlock & RV3D_BOXCLIP)==0) {
+				rv3d->rflag &= ~RV3D_BOXCLIP;
+			}
+
+			/* use arsync so we sync with one of the aligned views below
+			 * else the view jumps on changing view settings like 'clip'
+			 * since it copies from the perspective view */
+			arsync= ar;
 		}
 	}
 
-	if(rv3d->viewlock & RV3D_BOXVIEW)
-		view3d_boxview_copy(sa, sa->regionbase.last);
+	if(rv3d->viewlock & RV3D_BOXVIEW) {
+		view3d_boxview_copy(sa, arsync ? arsync : sa->regionbase.last);
+	}
 
 	ED_area_tag_redraw(sa);
 }

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-11-08 02:30:46 UTC (rev 32936)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2010-11-08 03:44:52 UTC (rev 32937)
@@ -180,6 +180,7 @@
 	View3D *v3d = CTX_wm_view3d(C);
 	RegionView3D *rv3d= CTX_wm_region_view3d(C);
 	struct SmoothViewStore sms= {0};
+	short ok= FALSE;
 	
 	/* initialize sms */
 	copy_v3_v3(sms.new_ofs, rv3d->ofs);
@@ -269,18 +270,26 @@
 			/* TIMER1 is hardcoded in keymap */
 			rv3d->smooth_timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER1, 1.0/100.0);	/* max 30 frs/sec */
 			
-			return;
+			ok= TRUE;
 		}
 	}
 	
 	/* if we get here nothing happens */
-	if(sms.to_camera==0) {
-		copy_v3_v3(rv3d->ofs, sms.new_ofs);
-		copy_qt_qt(rv3d->viewquat, sms.new_quat);
-		rv3d->dist = sms.new_dist;
-		v3d->lens = sms.new_lens;
+	if(ok == FALSE) {
+		ARegion *ar= CTX_wm_region(C);
+
+		if(sms.to_camera==0) {
+			copy_v3_v3(rv3d->ofs, sms.new_ofs);
+			copy_qt_qt(rv3d->viewquat, sms.new_quat);
+			rv3d->dist = sms.new_dist;
+			v3d->lens = sms.new_lens;
+		}
+
+		if(rv3d->viewlock & RV3D_BOXVIEW)
+			view3d_boxview_copy(CTX_wm_area(C), ar);
+
+		ED_region_tag_redraw(ar);
 	}
-	ED_region_tag_redraw(CTX_wm_region(C));
 }
 
 /* only meant for timer usage */

Modified: trunk/blender/source/blender/makesrna/intern/rna_space.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_space.c	2010-11-08 02:30:46 UTC (rev 32936)
+++ trunk/blender/source/blender/makesrna/intern/rna_space.c	2010-11-08 03:44:52 UTC (rev 32937)
@@ -348,9 +348,20 @@
 
 	rna_area_region_from_regiondata(ptr, &sa, &ar);
 	if(sa && ar && ar->alignment==RGN_ALIGN_QSPLIT)
-		ED_view3d_quadview_update(sa, ar);
+		ED_view3d_quadview_update(sa, ar, FALSE);
 }
 
+/* same as above but call clip==TRUE */
+static void rna_RegionView3D_quadview_clip_update(Main *main, Scene *scene, PointerRNA *ptr)
+{
+	ScrArea *sa;
+	ARegion *ar;
+
+	rna_area_region_from_regiondata(ptr, &sa, &ar);
+	if(sa && ar && ar->alignment==RGN_ALIGN_QSPLIT)
+		ED_view3d_quadview_update(sa, ar, TRUE);
+}
+
 static void rna_RegionView3D_view_location_get(PointerRNA *ptr, float *values)
 {
 	RegionView3D *rv3d= (RegionView3D *)(ptr->data);
@@ -1246,7 +1257,7 @@
 	prop= RNA_def_property(srna, "use_box_clip", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "viewlock", RV3D_BOXCLIP);
 	RNA_def_property_ui_text(prop, "Clip", "Clip objects based on what's visible in other side views");
-	RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_update");
+	RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, "rna_RegionView3D_quadview_clip_update");
 	
 	prop= RNA_def_property(srna, "perspective_matrix", PROP_FLOAT, PROP_MATRIX);
 	RNA_def_property_float_sdna(prop, NULL, "persmat");





More information about the Bf-blender-cvs mailing list