【Blender开发】示例:操作项示例 bpy.ops

OPS运行概况

示例:可以检测运行在哪,左键右键都会


import bpy
bl_info = {
    "name" : "test",
    "author" : "yl",
    "description" : "",
    "blender" : (3, 0, 0),
    "version" : (0, 0, 1),
    "location" : "",
    "warning" : "",
    "category" : "Yuelili",
    "doc_url":"https://yuelili.com"
}

# 自定义类
class myClass(bpy.types.Operator):
    bl_idname="yll.first_tool"  # ID,必须。命名必须要带,以小写字母,下划线 数字(my_operator.my_class_name)
    bl_label = "TestNode" # 标签,显示名称
    bl_description = "Description that shows in blender tooltips"
    bl_options = {'REGISTER'}

    # 区域检测用poll
    @classmethod
    def poll(cls,context):
        if context.area.ui_type== "VIEW_3D":
            print("目前正在3D视图")
            # 比如在控制台输入 bpy.ops.yll.first_tool 就会报错

    # 执行函数
    def excute(self,context):
        print("X")
        # self.report({"ERROR"},"X SUCCESS")

        return {"FINSHED"}

    # 定义自定义数据类型
    mInt:bpy.props.IntProperty(name = "int",default=99)

    # Event : 对按键进行识别
    # https://docs.blender.org/api/current/bpy.types.Event.html?highlight=event
    def invoke(self,context,event):
        if event.type == "RIGHTMOUSE":
            bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))

            print("RMB IS CLICKED")

        if event.type == "LEFTMOUSE":
            bpy.ops.mesh.primitive_cube_add(size=1, enter_editmode=False, align='WORLD', location=(0, 0, 0), scale=(1, 1, 1))

            print("RLB IS CLICKED")

        # 对变量进行更改
        self.mInt = 150

        # 必须用4大返回值 {'RUNNING_MODAL', 'CANCELLED', 'FINISHED', 'PASS_THROUGH'}
        return {"FINISHED"}

        # 此时,也可以跳入其他函数执行
        # return self.excute(context)

def register():
    print("塔塔开")

    # 注册
    bpy.utils.register_class(A)
    ...

def unregister():
    print("已经不用再战斗了")
    #注销
    bpy.utils.unregister_class(A)
    ...

RUNNING_MODAL 模式

具体看MODAL相关示例

相当于一般UI的调用自身,这样就不会停止了。

# RUNNING_MODAL 模式 需要invoke 使用modal_handler_add

def invoke(self, context, event):
    context.window_manager.modal_handler_add(self)
    return {"RUNNING_MODAL"}

def modal(self, context, event):

    if event.type == "LEFTMOUSE":
        return {"FINISHED"}

    if event.type in {"RIGHTMOUSE", "ESC"}:
        return {"CANCELLED"}

    return {"RUNNING_MODAL"}

给TA充电
共{{data.count}}人
人已充电
BlenderBlender开发

【Blender开发】UI示例:面板与属性示例

2022-1-12 10:42:47

BlenderBlender开发

【Blender开发】官方完整案例:菜单、面板、属性 | 推荐

2022-1-12 13:42:13

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索