3

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?

tintwotin
  • 2,296
  • 10
  • 24
  • How do you call the function from Python? What is your actual code? Please edit your first post and add this piece. – Tiles Dec 04 '17 at 07:15
  • And error message.. Educated guess: You need to be in 3d view context – batFINGER Dec 04 '17 at 11:47
  • You're not calling the function at all. A call needs parentheses, so bpy.ops.view3d.view_center_camera(). – dr. Sybren Dec 04 '17 at 16:24
  • 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: https://blender.stackexchange.com/questions/16493/is-there-a-way-to-fit-the-viewport-to-the-current-field-of-view/16494#16494 – tintwotin Dec 04 '17 at 23:00

1 Answers1

3

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.

rooobertek
  • 211
  • 1
  • 4