[PYTHON] So erstellen Sie ein Untermenü mit dem Plug-In [Blender]

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.

Normales Menü

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)

Untermenü (im Baum)

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)

Kommentar

Untermenü Klasse

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

Hauptmenüklasse

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"

Anmeldung

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)

Beispiel-Plug-In

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

So führen Sie das Beispiel-Plug-In aus

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

  1. Wählen Sie Datei-Benutzereinstellungen
  2. Wählen Sie die Registerkarte Addons
  3. Klicken Sie auf die Schaltfläche "Aus Datei installieren ..."
  4. Wählen Sie das Plug-In aus, das Sie installieren möchten
  5. Aktivieren Sie das Kontrollkästchen neben dem installierten Plug-In
  6. Drücken Sie "U" im "Bearbeitungsmodus"
  7. Vergewissern Sie sich, dass "Hoge-Menü" ein baumartiges Menü ist.
  8. Klicken Sie auf "Hoge-Menü" - "Sub-Hoge-Menü", um den Vorgang auszuführen ("Sub-Hoge-Menü" wird im Protokoll angezeigt).

Ausführungsergebnis

Baumförmige Menüanzeige

20141118230248.jpg

Ausführungsergebnis von "Sub Hoge Menu"

20141118230358.jpg

Verweise

Recommended Posts

So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
[Blender] So erstellen Sie ein Blender-Plug-In
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
So erstellen Sie ein Conda-Paket
So erstellen Sie eine virtuelle Brücke
Wie erstelle ich eine Docker-Datei?
So erstellen Sie eine Konfigurationsdatei
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
So erstellen Sie mit snappyHexMesh ein Flussnetz um einen Zylinder
Eine Geschichte über den Umgang mit dem CORS-Problem
[Blender] So legen Sie shape_key mit dem Skript fest
So erstellen Sie einen Klon aus Github
So erstellen Sie einen Git-Klonordner
So fügen Sie ein Paket mit PyCharm hinzu
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
So erstellen Sie eine Bezeichnung (Maske) für die Segmentierung mit labelme (semantische Segmentierungsmaske)
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
So erstellen Sie ein Repository aus Medien
So schreiben Sie eine Dokumentzeichenfolge, um ein benanntes Tupeldokument mit Sphinx zu erstellen
Erstellen Sie ein teuflisches Bild mit Blenders Skript
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
Wie man die anfängliche Population mit einem genetischen Algorithmus unter Verwendung von DEAP fixiert
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
[Entwicklungsumgebung] So erstellen Sie einen Datensatz in der Nähe der Produktionsdatenbank
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko
Erstellen von CSV-Beispieldaten mit Hypothese
Lesen einer CSV-Datei mit Python 2/3
So senden Sie eine Nachricht mit Curl an LINE
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie eine JSON-Datei in Python
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
So erstellen Sie ein QGIS-Plug-In (Paketerzeugung)
Schritte zum Erstellen eines Twitter-Bots mit Python
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Speichern Sie das Objekt in einer Datei mit pickle
[Hinweis] So erstellen Sie eine Ruby-Entwicklungsumgebung
So erstellen Sie ein 1-zeiliges Kivy-Eingabefeld
So erstellen Sie eine Rest-API in Django
Wie man Kaldi mit JUST Corpus trainiert
Erstellen Sie einen Befehl, um das Arbeitsprotokoll abzurufen
Erstellen Sie ein Übersetzungswerkzeug mit dem Translate Toolkit
[Hinweis] So erstellen Sie eine Mac-Entwicklungsumgebung
Wie man Zufallszahlen mit dem Zufallsmodul von NumPy macht