[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17968] branches/blender2.5/blender/source /blender/editors/space_view3d: view3d operators ED_VIEW3D_OT_viewhome and ED_VIEW3D_OT_viewcenter for Home , Shift+C and PadPeriod keys.

Campbell Barton ideasman42 at gmail.com
Sat Dec 20 12:33:19 CET 2008


Revision: 17968
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17968
Author:   campbellbarton
Date:     2008-12-20 12:33:16 +0100 (Sat, 20 Dec 2008)

Log Message:
-----------
view3d operators ED_VIEW3D_OT_viewhome and ED_VIEW3D_OT_viewcenter for Home, Shift+C and PadPeriod keys.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c	2008-12-20 10:19:24 UTC (rev 17967)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c	2008-12-20 11:33:16 UTC (rev 17968)
@@ -32,6 +32,7 @@
 #include <float.h>
 
 #include "DNA_action_types.h"
+#include "DNA_armature_types.h"
 #include "DNA_camera_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_object_types.h"
@@ -671,6 +672,228 @@
 	RNA_def_property(ot->srna, "delta", PROP_INT, PROP_NONE);
 }
 
+static int viewhome_exec(bContext *C, wmOperator *op) /* was view3d_home() in 2.4x */
+{
+	ScrArea *sa= CTX_wm_area(C);
+	ARegion *ar= CTX_wm_region(C);
+	View3D *v3d= sa->spacedata.first;
+	Scene *scene= CTX_data_scene(C);
+	Base *base;
+
+	int center= RNA_boolean_get(op->ptr, "center");
+	
+	float size, min[3], max[3], afm[3];
+	int ok= 1, onedone=0;
+
+	if(center) {
+		min[0]= min[1]= min[2]= 0.0f;
+		max[0]= max[1]= max[2]= 0.0f;
+	}
+	else {
+		INIT_MINMAX(min, max);
+	}
+	
+	for(base= scene->base.first; base; base= base->next) {
+		if(base->lay & v3d->lay) {
+			onedone= 1;
+			minmax_object(base->object, min, max);
+		}
+	}
+	if(!onedone) return OPERATOR_FINISHED; /* TODO - should this be cancel? */
+	
+	afm[0]= (max[0]-min[0]);
+	afm[1]= (max[1]-min[1]);
+	afm[2]= (max[2]-min[2]);
+	size= 0.7f*MAX3(afm[0], afm[1], afm[2]);
+	if(size==0.0) ok= 0;
+		
+	if(ok) {
+		float new_dist;
+		float new_ofs[3];
+		
+		new_dist = size;
+		new_ofs[0]= -(min[0]+max[0])/2.0f;
+		new_ofs[1]= -(min[1]+max[1])/2.0f;
+		new_ofs[2]= -(min[2]+max[2])/2.0f;
+		
+		// correction for window aspect ratio
+		if(ar->winy>2 && ar->winx>2) {
+			size= (float)ar->winx/(float)ar->winy;
+			if(size<1.0) size= 1.0f/size;
+			new_dist*= size;
+		}
+		
+		if (v3d->persp==V3D_CAMOB && v3d->camera) {
+			/* switch out of camera view */
+			float orig_lens= v3d->lens;
+			
+			v3d->persp= V3D_PERSP;
+			v3d->dist= 0.0;
+			view_settings_from_ob(v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
+			smooth_view(v3d, new_ofs, NULL, &new_dist, &orig_lens); /* TODO - this dosnt work yet */
+			
+		} else {
+			if(v3d->persp==V3D_CAMOB) v3d->persp= V3D_PERSP;
+			smooth_view(v3d, new_ofs, NULL, &new_dist, NULL); /* TODO - this dosnt work yet */
+		}
+	}
+// XXX	BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
+
+	ED_region_tag_redraw(ar);
+
+	return OPERATOR_FINISHED;
+}
+
+void ED_VIEW3D_OT_viewhome(wmOperatorType *ot)
+{
+
+	/* identifiers */
+	ot->name= "View home";
+	ot->idname= "ED_VIEW3D_OT_viewhome";
+
+	/* api callbacks */
+	ot->exec= viewhome_exec;
+	ot->poll= ED_operator_areaactive;
+
+	RNA_def_property(ot->srna, "center", PROP_BOOLEAN, PROP_NONE);
+}
+
+static int viewcenter_exec(bContext *C, wmOperator *op) /* like a localview without local!, was centerview() in 2.4x */
+{	
+	ScrArea *sa= CTX_wm_area(C);
+	ARegion *ar= CTX_wm_region(C);
+	View3D *v3d= sa->spacedata.first;
+	Scene *scene= CTX_data_scene(C);
+	Object *ob= OBACT;
+	float size, min[3], max[3], afm[3];
+	int ok=0;
+
+	/* SMOOTHVIEW */
+	float new_ofs[3];
+	float new_dist;
+
+	INIT_MINMAX(min, max);
+
+	if (G.f & G_WEIGHTPAINT) {
+		/* hardcoded exception, we look for the one selected armature */
+		/* this is weak code this way, we should make a generic active/selection callback interface once... */
+		Base *base;
+		for(base=scene->base.first; base; base= base->next) {
+			if(TESTBASELIB(v3d, base)) {
+				if(base->object->type==OB_ARMATURE)
+					if(base->object->flag & OB_POSEMODE)
+						break;
+			}
+		}
+		if(base)
+			ob= base->object;
+	}
+
+
+	if(G.obedit) {
+// XXX		ok = minmax_verts(min, max);	/* only selected */
+	}
+	else if(ob && (ob->flag & OB_POSEMODE)) {
+		if(ob->pose) {
+			bArmature *arm= ob->data;
+			bPoseChannel *pchan;
+			float vec[3];
+
+			for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
+				if(pchan->bone->flag & BONE_SELECTED) {
+					if(pchan->bone->layer & arm->layer) {
+						ok= 1;
+						VECCOPY(vec, pchan->pose_head);
+						Mat4MulVecfl(ob->obmat, vec);
+						DO_MINMAX(vec, min, max);
+						VECCOPY(vec, pchan->pose_tail);
+						Mat4MulVecfl(ob->obmat, vec);
+						DO_MINMAX(vec, min, max);
+					}
+				}
+			}
+		}
+	}
+	else if (FACESEL_PAINT_TEST) {
+// XXX		ok= minmax_tface(min, max);
+	}
+	else if (G.f & G_PARTICLEEDIT) {
+// XXX		ok= PE_minmax(min, max);
+	}
+	else {
+		Base *base= FIRSTBASE;
+		while(base) {
+			if TESTBASE(v3d, base)  {
+				minmax_object(base->object, min, max);
+				/* account for duplis */
+				minmax_object_duplis(base->object, min, max);
+
+				ok= 1;
+			}
+			base= base->next;
+		}
+	}
+
+	if(ok==0) return OPERATOR_FINISHED;
+
+	afm[0]= (max[0]-min[0]);
+	afm[1]= (max[1]-min[1]);
+	afm[2]= (max[2]-min[2]);
+	size= 0.7f*MAX3(afm[0], afm[1], afm[2]);
+
+	if(size <= v3d->near*1.5f) size= v3d->near*1.5f;
+
+	new_ofs[0]= -(min[0]+max[0])/2.0f;
+	new_ofs[1]= -(min[1]+max[1])/2.0f;
+	new_ofs[2]= -(min[2]+max[2])/2.0f;
+
+	new_dist = size;
+
+	/* correction for window aspect ratio */
+	if(ar->winy>2 && ar->winx>2) {
+		size= (float)ar->winx/(float)ar->winy;
+		if(size<1.0f) size= 1.0f/size;
+		new_dist*= size;
+	}
+
+	v3d->cursor[0]= -new_ofs[0];
+	v3d->cursor[1]= -new_ofs[1];
+	v3d->cursor[2]= -new_ofs[2];
+
+	if (v3d->persp==V3D_CAMOB && v3d->camera) {
+		float orig_lens= v3d->lens;
+
+		v3d->persp=V3D_PERSP;
+		v3d->dist= 0.0f;
+		view_settings_from_ob(v3d->camera, v3d->ofs, NULL, NULL, &v3d->lens);
+		smooth_view(v3d, new_ofs, NULL, &new_dist, &orig_lens);
+	} else {
+		if(v3d->persp==V3D_CAMOB)
+			v3d->persp= V3D_PERSP;
+
+		smooth_view(v3d, new_ofs, NULL, &new_dist, NULL);
+	}
+
+// XXX	BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
+
+	ED_region_tag_redraw(ar);
+
+	return OPERATOR_FINISHED;
+}
+
+void ED_VIEW3D_OT_viewcenter(wmOperatorType *ot)
+{
+
+	/* identifiers */
+	ot->name= "View center";
+	ot->idname= "ED_VIEW3D_OT_viewcenter";
+
+	/* api callbacks */
+	ot->exec= viewcenter_exec;
+	ot->poll= ED_operator_areaactive;
+}
+
+
 /* ************************* below the line! *********************** */
 
 

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2008-12-20 10:19:24 UTC (rev 17967)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2008-12-20 11:33:16 UTC (rev 17968)
@@ -65,6 +65,8 @@
 void ED_VIEW3D_OT_viewzoom(struct wmOperatorType *ot);
 void ED_VIEW3D_OT_viewmove(struct wmOperatorType *ot);
 void ED_VIEW3D_OT_viewrotate(struct wmOperatorType *ot);
+void ED_VIEW3D_OT_viewhome(struct wmOperatorType *ot);
+void ED_VIEW3D_OT_viewcenter(struct wmOperatorType *ot);
 
 /* drawobject.c */
 void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag);
@@ -118,7 +120,6 @@
 void endlocalview(Scene *scene, ScrArea *sa);
 
 void centerview(ARegion *ar, View3D *v3d);
-void view3d_home(View3D *v3d, ARegion *ar, int center);
 
 void view3d_align_axis_to_vector(View3D *v3d, int axisidx, float vec[3]);
 

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2008-12-20 10:19:24 UTC (rev 17967)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2008-12-20 11:33:16 UTC (rev 17968)
@@ -64,6 +64,8 @@
 	WM_operatortype_append(ED_VIEW3D_OT_viewrotate);
 	WM_operatortype_append(ED_VIEW3D_OT_viewmove);
 	WM_operatortype_append(ED_VIEW3D_OT_viewzoom);
+	WM_operatortype_append(ED_VIEW3D_OT_viewhome);
+	WM_operatortype_append(ED_VIEW3D_OT_viewcenter);
 }
 
 void view3d_keymap(wmWindowManager *wm)
@@ -73,11 +75,16 @@
 	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewrotate", MIDDLEMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewmove", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewzoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0);
+	WM_keymap_verify_item(keymap, "ED_VIEW3D_OT_viewcenter", PADPERIOD, KM_PRESS, 0, 0);
 	
 	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", PADPLUSKEY, KM_PRESS, 0, 0)->ptr, "delta", 1);
 	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", PADMINUS, KM_PRESS, 0, 0)->ptr, "delta", -1);
 	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", WHEELUPMOUSE, KM_ANY, 0, 0)->ptr, "delta", 1);
 	RNA_int_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewzoom", WHEELDOWNMOUSE, KM_ANY, 0, 0)->ptr, "delta", -1);
 
+	RNA_boolean_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewhome", HOMEKEY, KM_PRESS, 0, 0)->ptr, "center", 0);
+	RNA_boolean_set(WM_keymap_add_item(keymap, "ED_VIEW3D_OT_viewhome", CKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "center", 1);
+
+
 }
 

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c	2008-12-20 10:19:24 UTC (rev 17967)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c	2008-12-20 11:33:16 UTC (rev 17968)
@@ -986,123 +986,6 @@
 // XXX	BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT);
 }
 
-void centerview(ARegion *ar, View3D *v3d)	/* like a localview without local! */
-{
-	Object *ob= OBACT;
-	float size, min[3], max[3], afm[3];
-	int ok=0;
-	
-	/* SMOOTHVIEW */
-	float new_ofs[3];
-	float new_dist;
-	
-	INIT_MINMAX(min, max);
-
-	if (G.f & G_WEIGHTPAINT) {
-		/* hardcoded exception, we look for the one selected armature */
-		/* this is weak code this way, we should make a generic active/selection callback interface once... */
-		Base *base;
-		for(base=FIRSTBASE; base; base= base->next) {
-			if(TESTBASELIB(v3d, base)) {
-				if(base->object->type==OB_ARMATURE)
-					if(base->object->flag & OB_POSEMODE)
-						break;
-			}
-		}
-		if(base)
-			ob= base->object;
-	}
-	
-	
-	if(G.obedit) {
-// XXX		ok = minmax_verts(min, max);	/* only selected */
-	}
-	else if(ob && (ob->flag & OB_POSEMODE)) {
-		if(ob->pose) {
-			bArmature *arm= ob->data;
-			bPoseChannel *pchan;
-			float vec[3];
-			
-			for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list