[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59098] trunk/blender/source/blender: change VIEW3D_OT_camera_to_view_selected poll function so it can be called from a script (without a view3d).

Campbell Barton ideasman42 at gmail.com
Tue Aug 13 06:35:14 CEST 2013


Revision: 59098
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59098
Author:   campbellbarton
Date:     2013-08-13 04:35:14 +0000 (Tue, 13 Aug 2013)
Log Message:
-----------
change VIEW3D_OT_camera_to_view_selected poll function so it can be called from a script (without a view3d).

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/camera.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/source/blender/blenkernel/intern/camera.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/camera.c	2013-08-13 03:09:58 UTC (rev 59097)
+++ trunk/blender/source/blender/blenkernel/intern/camera.c	2013-08-13 04:35:14 UTC (rev 59098)
@@ -462,7 +462,7 @@
 	unsigned int tot;
 } CameraViewFrameData;
 
-static void BKE_camera_to_frame_view_cb(const float co[3], void *user_data)
+static void camera_to_frame_view_cb(const float co[3], void *user_data)
 {
 	CameraViewFrameData *data = (CameraViewFrameData *)user_data;
 	unsigned int i;
@@ -526,7 +526,7 @@
 	data_cb.tot = 0;
 	/* run callback on all visible points */
 	BKE_scene_foreach_display_point(scene, v3d, BA_SELECT,
-	                                BKE_camera_to_frame_view_cb, &data_cb);
+	                                camera_to_frame_view_cb, &data_cb);
 
 	if (data_cb.tot <= 1) {
 		return FALSE;

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2013-08-13 03:09:58 UTC (rev 59097)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2013-08-13 04:35:14 UTC (rev 59098)
@@ -2543,7 +2543,7 @@
 	Object *ob;
 
 	for (base = FIRSTBASE; base; base = base->next) {
-		if (BASE_VISIBLE(v3d, base) && (base->flag & flag) == flag) {
+		if (BASE_VISIBLE_BGMODE(v3d, scene, base) && (base->flag & flag) == flag) {
 			ob = base->object;
 
 			if ((ob->transflag & OB_DUPLI) == 0) {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2013-08-13 03:09:58 UTC (rev 59097)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2013-08-13 04:35:14 UTC (rev 59098)
@@ -444,14 +444,27 @@
 
 /* unlike VIEW3D_OT_view_selected this is for framing a render and not
  * meant to take into account vertex/bone selection for eg. */
-static int view3d_camera_to_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
+static int view3d_camera_to_view_selected_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene = CTX_data_scene(C);
-	View3D *v3d = CTX_wm_view3d(C);
-	Object *camera_ob = v3d->camera;
+	View3D *v3d = CTX_wm_view3d(C);  /* can be NULL */
+	Object *camera_ob = v3d ? v3d->camera : scene->camera;
 
 	float r_co[3]; /* the new location to apply */
 
+	if (camera_ob == NULL) {
+		BKE_report(op->reports, RPT_ERROR, "No active camera");
+		return OPERATOR_CANCELLED;
+	}
+	else if (camera_ob->type != OB_CAMERA) {
+		BKE_report(op->reports, RPT_ERROR, "Object not a camera");
+		return OPERATOR_CANCELLED;
+	}
+	else if (((Camera *)camera_ob->data)->type == R_ORTHO) {
+		BKE_report(op->reports, RPT_ERROR, "Orthographic cameras not supported");
+		return OPERATOR_CANCELLED;
+	}
+
 	/* this function does all the important stuff */
 	if (BKE_camera_view_frame_fit_to_scene(scene, v3d, camera_ob, r_co)) {
 
@@ -476,24 +489,6 @@
 	}
 }
 
-static int view3d_camera_to_view_selected_poll(bContext *C)
-{
-	View3D *v3d = CTX_wm_view3d(C);
-	if (v3d && v3d->camera && v3d->camera->id.lib == NULL) {
-		RegionView3D *rv3d = CTX_wm_region_view3d(C);
-		if (rv3d) {
-			if (rv3d->is_persp == false) {
-				CTX_wm_operator_poll_msg_set(C, "Only valid for a perspective camera view");
-			}
-			else if (!rv3d->viewlock) {
-				return 1;
-			}
-		}
-	}
-
-	return 0;
-}
-
 void VIEW3D_OT_camera_to_view_selected(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -503,7 +498,7 @@
 
 	/* api callbacks */
 	ot->exec = view3d_camera_to_view_selected_exec;
-	ot->poll = view3d_camera_to_view_selected_poll;
+	ot->poll = ED_operator_scene_editable;
 
 	/* flags */
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;




More information about the Bf-blender-cvs mailing list