Оператор View3d недоступен, если не выбран ни один объект. Почему? - PullRequest
0 голосов
/ 23 февраля 2020

Я хотел бы создать всплывающее окно с несколькими кнопками. Вот код:

import bpy

class MaxFloater(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "view3d.max_floater"
    bl_label = "MAX Floater"

    @classmethod
    def poll(cls, context):
        return context.active_object is not None

    def execute(self, context):
        return {'FINISHED'}

    def invoke(self, context, event):
        return context.window_manager.invoke_props_dialog(self, width = 400)

    def draw(self, context):        
        row = self.layout.row()
        row.operator("mesh.primitive_cube_add")
        row.operator("object.modifier_add", text="MIRROR").type='MIRROR'

def register():
    bpy.utils.register_class(MaxFloater)

def unregister():
    bpy.utils.unregister_class(MaxFloater)

if __name__ == "__main__":
    register()

Все в порядке, за исключением того, что он ожидает, что какой-то объект будет выбран или последний выбранный объект будет существовать. Если этот объект удален, оператор не работает. (и не появляется в окне поиска оператора). Я не могу понять, почему это так? Это оператор view3d, а не оператор объекта, не так ли?

1 Ответ

0 голосов
/ 24 февраля 2020

Я думаю, что нашел подходящее решение. Эта строка должна быть в функции опроса:

return bpy.context.area.type == 'VIEW_3D'

Проверяет, является ли текущий активный вид трехмерным, а если нет - оператор не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...