สคริปต์ Addon ไม่ทำงาน

Oct 30 2020

ฉันเป็นมือใหม่ในการเขียนสคริปต์ Blender แต่ฉันกำลังพยายามสร้าง Addon ที่ง่ายมากด้วยความช่วยเหลือของบทช่วยสอน YT ที่มีลักษณะเช่นนี้ แต่มันทำให้ฉันเกิดข้อผิดพลาดว่ามีบางอย่างผิดปกติไม่มีข้อความแสดงข้อผิดพลาดในหน้าต่างคอนโซล

สคริปต์ควรปรากฏเป็นรายการเมนูภายใน OBJECT -> APPLY และควรใช้ตัวดัดแปลงที่ใช้งานอยู่ทั้งหมดในอ็อบเจ็กต์ที่เลือกทั้งหมด สคริปต์ของ Addon มีลักษณะดังนี้:

bl_info = {
    "name": "Apply Modifiers In Selected",
    "author": "Anonymous",
    "version": (1, 0),
    "blender": (2, 90, 1),
    "location": "View3D > Object > Apply > Modifiers In Selected",
    "description": "Applies all the modifier in selected objects",
    "warning": "",
    "doc_url": "",
    "category": "Object Apply",
}

import bpy
from bpy.types import (
    AddonPreferences,
    Operator,
    Panel,
    PropertyGroup,
)

class OBJECT_OT_applymodifiersinselected(Operator):
    bl_label = "Apply Modifiers In Selected"
    bl_idname = "object.apply.modifiersinselected"
    bl_description = "Applies all the modifier in selected objects"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_options = {'REGISTER', 'UNDO'}
    
    def execute (self, context):

        for ob in bpy.context.selected_objects:
            bpy.context.view_layer.objects.active = ob
            for name in [m.name for m in ob.modifiers]:
                modifier = ob.modifiers[name]
                if modifier.show_viewport:
                    bpy.ops.object.modifier_apply( modifier = name )
        
        return {'FINISHED'}
    
def menu_func (self, context):
    self.layout.operator(OBJECT_OT_applymodifiersinselected.bl_idname)

def register():
    bpy.utils.register_class(OBJECT_OT_applymodifiersinselected)
    bpy.types.VIEW3D_MT_object_apply.append(menu_func)
    
def unregister():
    bpy.utils.unregister_class(OBJECT_OT_applymodifiersinselected)
    bpy.types.VIEW3D_MT_object_apply.remove(menu_func)

if __name__ == "__main__":
    register()

ใครช่วยกรุณาบอกฉันว่ารหัสผิดอะไร?

คำตอบ

2 RobertGützkow Oct 30 2020 at 04:23

bl_idnameไม่อนุญาตให้มีมากกว่าหนึ่งจุด ข้อความแสดงข้อผิดพลาดคือ:

Traceback (most recent call last):
  File "\Text", line 52, in <module>
  File "\Text", line 44, in register
RuntimeError: Error: Registering operator class: 'OBJECT_OT_applymodifiersinselected', invalid bl_idname 'object.apply.modifiersinselected', must contain 1 '.' character

ข้อความนี้สามารถเห็นได้เมื่อเริ่ม Blender จากเทอร์มินัลบน Linux, macOS และ Windows ใน Windows คุณยังสามารถใช้หน้าต่าง> สลับระบบคอนโซล

ในการแก้ไขปัญหานี้ให้เลือกรายการอื่นbl_idnameตัวอย่างเช่น:

 bl_idname = "object.apply_modifiers_in_selected"