Im vorherigen Beitrag habe ich erklärt, wie ein Blender-Plug-In mit einem einfachen Beispielcode erstellt wird. Dieses Mal werde ich erklären, wie man ein Untermenü (im Baum) erstellt. Es kann einige Fehler geben, da nur wenige Informationen zum Erstellen eines Untermenüs vorhanden sind und dies das Ergebnis von Versuch und Irrtum ist.
Aus dem vorherigen Beitrag wird nur der Teil extrahiert, der das Menü erstellt.
menu_1.py
#Speisekarte
class CHoge(bpy.types.Operator):
bl_idname = "uv.hoge" #ID-Name
bl_label = "Hoge Menu" #Im Menü angezeigte Zeichenkette
bl_description = "Hoge Piyo" #Beschreibung wird im Menü angezeigt
bl_options = {'REGISTER', 'UNDO'}
#Der Prozess, den das Plug-In tatsächlich ausführt
def execute(self, context):
return {'FINISHED'} #Gibt bei Erfolg FINISHED zurück
#Funktion zum Registrieren eines Menüs
def menu_func(self, context):
self.layout.operator("uv.hoge") #"Bl" der Klasse, die Sie registrieren möchten_Geben Sie "idname" an.
#Was passiert, wenn Sie das Plug-In installieren?
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
Hier ist ein einfacher Beispielcode zum Erstellen eines Untermenüs. Die Struktur des angezeigten Menüs ist "Hoge-Menü" - "Hoge-Untermenü".
submenu_1.py
#Untermenü
class SubMenu(bpy.types.Operator):
bl_idname = "uv.hoge_sub"
bl_label = "Sub Hoge Menu"
out_text = bpy.props.StringProperty()
def execute(self, context):
self.report({'INFO'}, self.out_text)
return {'FINISHED'}
#Hauptmenü
class Menu(bpy.types.Menu):
bl_idname = "uv.hoge"
bl_label = "Hoge Menu"
bl_description = "Hoge Piyo"
def draw(self, context):
layout = self.layout
#Registrierung des Untermenüs + Registrierung der Ausgabezeichenfolge
layout.operator(SubMenu.bl_idname).out_text = "Sub Hoge Menu"
#Registrieren Sie sich im angezeigten Menü, wenn Sie im Bearbeitungsmodus (bpy) "U" drücken..types.VIEW3D_MT_uv_map.append(menu_func)Angerufen von)
def menu_func(self, context):
self.layout.separator() #Trennzeichen im Menü registrieren
self.layout.menu(Menu.bl_idname)
#Anmeldung
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
Die Untermenüklasse ist im Grunde dieselbe wie die Klasse, die zum Erstellen eines normalen Menüs verwendet wird, und erbt die Klasse bpy.types.Operator. Als Bestätigung fügen wir dem Untermenü eine Variable namens out_text hinzu, damit out_text ausgegeben wird, wenn das Menü ausgeführt wird.
submenu_2.py
#Untermenü
class SubMenu(bpy.types.Operator):
bl_idname = "uv.hoge_sub"
bl_label = "Sub Hoge Menu"
out_text = bpy.props.StringProperty()
def execute(self, context):
self.report({'INFO'}, self.out_text)
return {'FINISHED'}
Da das Hauptmenü ein Menü im Baum erstellen muss, erbt es von der Klasse bpy.types.Menu. Darüber hinaus muss das Hauptmenü nicht darüber nachdenken, was passiert, wenn es ausgewählt wird, und die Ausführungsmethode ist nicht erforderlich. Stattdessen müssen Sie eine Zeichenmethode hinzufügen, um das Menü anzuzeigen. Innerhalb der Zeichenmethode wird ein Untermenü registriert, indem das Argument von layout.operator durch bl_idname der Unterklasse von bpy.types.Operator ersetzt wird, und der Mitgliedsvariablen out_text des registrierten Untermenüs wird eine Zeichenfolge zugewiesen. Ich bin.
submenu_3.py
#Hauptmenü
class Menu(bpy.types.Menu):
bl_idname = "uv.hoge"
bl_label = "Hoge Menu"
bl_description = "Hoge Piyo"
def draw(self, context):
layout = self.layout
#Registrierung des Untermenüs + Registrierung der Ausgabezeichenfolge
layout.operator(SubMenu.bl_idname).out_text = "Sub Hoge Menu"
Der Registrierungsteil ist fast derselbe wie der normale Teil, aber der über die im Argument von bpy.types.VIEW3D_MT_uv_map.append angegebene Funktion aufgerufene menu_func wurde geändert. Es hat nichts mit dem Erstellen eines Untermenüs zu tun, aber Sie können ein separates Menü einfügen, indem Sie die Funktion self.layout.separator ausführen. Dies macht es klar von anderen Menüs unterscheidbar und erleichtert das Verständnis der durch die Installation des Plug-Ins hinzugefügten Menüs. Sie können das Menü im Baum registrieren, indem Sie den bl_idname der abgeleiteten Klasse von bpy.types.Menu als Argument der Funktion self.layout.menu übergeben.
submenu_4.py
#Registrieren Sie sich im angezeigten Menü, wenn Sie im Bearbeitungsmodus (bpy) "U" drücken..types.VIEW3D_MT_uv_map.append(menu_func)Angerufen von)
def menu_func(self, context):
self.layout.separator() #Trennzeichen im Menü registrieren
self.layout.menu(Menu.bl_idname)
#Anmeldung
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
Hier ist der Code des Beispiel-Plug-Ins, der tatsächlich funktioniert, und fasst den obigen Inhalt zusammen.
submenu.py
#Erforderlich, um auf die Datenstruktur in Blender zuzugreifen
import bpy
#Informationen zum Plug-In
bl_info = {
"name" : "Hoge Plugin", #Name des Plugins
"author" : "Piyo", #Autor
"version" : (0,1), #Plugin-Version
"blender" : (2, 6, 5), #Mixer-Version, bei der der Stecker funktioniert
"location" : "UV Mapping > Hoge", #Positionierung der Plug-Ins im Mixer
"description" : "Hoge Fuga Piyo", #Plugin Beschreibung
"warning" : "",
"wiki_url" : "", #URL der Wiki-Seite, auf der sich die Plugin-Beschreibung befindet
"tracker_url" : "", #URL des Blender Developer Org-Threads
"category" : "UV" #Name der Plugin-Kategorie
}
#Untermenü
class SubMenu(bpy.types.Operator):
bl_idname = "uv.hoge_sub"
bl_label = "Sub Hoge Menu"
out_text = bpy.props.StringProperty()
def execute(self, context):
self.report({'INFO'}, self.out_text)
return {'FINISHED'}
#Hauptmenü
class Menu(bpy.types.Menu):
bl_idname = "uv.hoge"
bl_label = "Hoge Menu"
bl_description = "Hoge Piyo"
def draw(self, context):
layout = self.layout
#Registrierung des Untermenüs + Registrierung der Ausgabezeichenfolge
layout.operator(SubMenu.bl_idname).out_text = "Sub Hoge Menu"
#Registrieren Sie sich im angezeigten Menü, wenn Sie im Bearbeitungsmodus (bpy) "U" drücken..types.VIEW3D_MT_uv_map.append(menu_func)Angerufen von)
def menu_func(self, context):
self.layout.separator() #Trennzeichen im Menü registrieren
self.layout.menu(Menu.bl_idname)
#Anmeldung
def register():
bpy.utils.register_module(__name__)
bpy.types.VIEW3D_MT_uv_map.append(menu_func)
#Was passiert, wenn Sie das Plug-In deinstallieren?
def unregister():
bpy.utils.unregister_module(__name__)
bpy.types.VIEW3D_MT_uv_map.remove(menu_func)
#Hauptfunktion
if __name__ == "__main__":
register()
Lassen Sie uns das obige Beispiel-Plug-In tatsächlich bedienen. Führen Sie die folgenden Schritte aus, um das Plug-In zu installieren. Der Installationsvorgang wird auch auf der Blender-Wiki-Seite beschrieben. http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Extensions/Python/Add-Ons
Recommended Posts