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"}