Script addon non funzionante

Oct 30 2020

Sono un principiante dello scripting di Blender, ma sto cercando di creare un componente aggiuntivo molto semplice con l'aiuto del tutorial di YT che assomiglia a questo, ma mi dà l'errore che qualcosa non va, anche se non ci sono messaggi di errore nella finestra della console.

Lo script dovrebbe apparire come una voce di menu all'interno di OBJECT -> APPLY, e dovrebbe solo applicare tutti i modificatori attivi in ​​tutti gli oggetti selezionati. lo script del componente aggiuntivo ha questo aspetto:

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()

Qualcuno può, per favore, dirmi cosa c'è che non va nel codice?

Risposte

2 RobertGützkow Oct 30 2020 at 04:23

Non bl_idnameè consentito contenere più di un punto. Il messaggio di errore è:

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

Questo messaggio può essere visualizzato all'avvio di Blender dal terminale su Linux, macOS e Windows. Su Windows puoi anche usare Finestra> Attiva / disattiva console di sistema .

Per risolvere questo problema, scegli un altro bl_idname, ad esempio:

 bl_idname = "object.apply_modifiers_in_selected"