0
$\begingroup$

This function is supposedly the one for fitting the camera to 3D view with python(with mouse cursor hovering over the 3d view):

import bpy
for area in bpy.context.screen.areas:
    if area.type == 'VIEW_3D':
        if bpy.ops.view3d.view_center_camera.poll()
            bpy.ops.view3d.view_center_camera()

Hitting home keyboard-button activates view_center_camera function and does what it is supposed to, so the function seems correct and working.

It just doesn't work when I call the function from Python(like mentioned above). What is the correct way?

$\endgroup$
  • $\begingroup$ How do you call the function from Python? What is your actual code? Please edit your first post and add this piece. $\endgroup$ – Tiles Dec 4 '17 at 7:15
  • $\begingroup$ And error message.. Educated guess: You need to be in 3d view context $\endgroup$ – batFINGER Dec 4 '17 at 11:47
  • $\begingroup$ You're not calling the function at all. A call needs parentheses, so bpy.ops.view3d.view_center_camera(). $\endgroup$ – dr. Sybren Dec 4 '17 at 16:24
  • $\begingroup$ Thank you very much for the help. I can't seem to get my head around a solution doing it this way, however I found a solution for what I want to do here: blender.stackexchange.com/questions/16493/… $\endgroup$ – tintwotin Dec 4 '17 at 23:00
0
$\begingroup$

This code works in 2.80:

import bpy

def find_3d_area():
    for area in bpy.context.window.screen.areas:
        if area.type == 'VIEW_3D':
            return area

area = find_3d_area()
if area:
    override = {
        'area': area,
        'region': area.regions[0],
    }
    if bpy.ops.view3d.view_center_camera.poll(override)
        bpy.ops.view3d.view_center_camera(override)

Blender operators have optional parameter "context". In almost all cases, you don't need to override it, but this case is somewhat special.

In this case, you have to override area and region. I'm not able to explain into the deep why exactly these two keys are needed. It's only the result of my debugging inside C code of Blender, and trial/error in Python.

$\endgroup$
  • $\begingroup$ Hello and welcome. Thanks for the answer. Could you add a small description to your answer explaining what the code does or how it works? $\endgroup$ – Duarte Farrajota Ramos Apr 30 at 12:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.