Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-08-13 08:35:14 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-08-13 08:35:14 +0400
commit730b9c283e2631bd10cfaab331ac6758790c17b8 (patch)
treea3d287c65ebbd9077489c1d8029b3c9b0b16e7ef /source/blender
parentd23b383af0e2d1ff7416e6b889a9ef36851eed63 (diff)
change VIEW3D_OT_camera_to_view_selected poll function so it can be called from a script (without a view3d).
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/camera.c4
-rw-r--r--source/blender/blenkernel/intern/object.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c39
3 files changed, 20 insertions, 25 deletions
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index e86561d687d..f9444ca2cf9 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -462,7 +462,7 @@ typedef struct CameraViewFrameData {
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 @@ int BKE_camera_view_frame_fit_to_scene(Scene *scene, struct View3D *v3d, Object
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;
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 150c20d047d..962209bef87 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2543,7 +2543,7 @@ void BKE_scene_foreach_display_point(
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) {
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 4a14aa79e41..44c338d22b9 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -444,14 +444,27 @@ void VIEW3D_OT_camera_to_view(wmOperatorType *ot)
/* 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_exec(bContext *C, wmOperator *UNUSED(o
}
}
-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 @@ void VIEW3D_OT_camera_to_view_selected(wmOperatorType *ot)
/* 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;