Dieser Artikel ist der Artikel zum 25. Tag von Houdini Adventskalender 2019. Letzter Tag! !!
Zeigen Sie Ihr eigenes Menü mit Umschalt + Tab (änderbar) im Netzwerkeditor an. Charakterbilder sind nur ein Hobby. Sie müssen es nicht löschen.
Houdini selbst hat viele HDAs, Regale, Voreinstellungen und nützliche Tools, so dass ich solche Änderungen nicht wirklich vornehmen muss, aber für diejenigen, die Änderungen vornehmen möchten, ist Houdini eine unterhaltsame und unordentliche Software. Ich werde.
Wenn Sie die Punkte erwähnen möchten, für die Sie sich gut fühlen
Nun, die im Regal registrierten Werkzeuge können auch im normalen TAB-Menü angezeigt werden ... Der Nachteil ist, dass es schwierig zu erstellen ist. Wenn der Code einen Tippfehler enthält, gibt Houdini weiterhin endlos Fehlermeldungen aus.
Wenn Sie denken, dass es Spaß macht, tun Sie es bitte. Ich werde die Erstellungsmethode unten schreiben. Der von mir verwendete Houdini ist 18.0.287, eine Windows-Umgebung.
Die offizielle Dokumentation ist hier.
Das eigentliche Skript für den funktionierenden Netzwerkeditor befindet sich in (Houdini-Installationsziel) / houdini / python2.7libs / nodegraph.py
. Wenn Sie also eines haben, wird empfohlen, darauf zu verweisen.
Fügen Sie zunächst eine Skriptdatei hinzu. Für das Dokument
$HOUDINI_USER_PREF_DIR/python2.7libs/nodegraphhooks.py
Beispiel: C: \ Users \ (Benutzername) \ Documents \ houdini18.0 \ python2.7libs \ nodegraphhooks.py
Ist geschrieben, um hinzuzufügen.
Persönlich habe ich ein anderes Verzeichnis erstellt, um die Verwaltung des Skripts zu vereinfachen, und den Pfad in pythonrc.py angegeben.
pythonrc.py
import sys
sys.path.insert(0,'Skriptspeicherpfad')
Ich denke, es ist okay, wenn Sie eines von beiden mögen. Der Operationsprüfcode von nodegraphhooks.py lautet wie folgt.
nodegraphhooks.py
#coding:utf-8
from canvaseventtypes import *
def createEventHandler(uievent, pending_actions):
"""Hook-Ereignisse aus dem Netzwerkeditor"""
if isinstance(uievent, KeyboardEvent):
if uievent.eventtype == 'keyhit' and uievent.key=='Shift+Tab':
uievent.editor.flashMessage(None, 'nodegraphhook!!', 2.0)
return None, False
Jetzt zeigt Umschalt + Tab die Nachricht im Netzwerkeditor an. Suchen Sie einfach die nicht verwendeten Hotkeys und schreiben Sie den entsprechenden Code, um den Editor zu erweitern. Wenn Sie häufig die Skriptverarbeitung verwendet haben, kann es hilfreich sein, diese hier hinzuzufügen.
Hier wird hou.qt.Menu verwendet, um das Kontextmenü anzuzeigen. Um einen Prozess zu schreiben, der eine Weile andauert, scheint es eine gute Idee zu sein, eine Klasse zu erstellen, die nodegraphbase.EventHandler erbt, und sie mit einer Funktion namens handleEvent zu verarbeiten.
Das ursprüngliche QMenu von hou.qt.Menu wird häufig mit einer Funktion namens exec_ angezeigt. Wenn Sie diese Funktion jedoch verwenden, wird möglicherweise eine Warnung angezeigt. Zeigen Sie sie daher mit show an.
Hinzufügen der Datei custom_tabmenu_handler.py. Platzieren Sie es an einem Ort, der sich in Ihrem Python-Pfad befindet. Wenn Sie sich nicht sicher sind, können Sie dasselbe Verzeichnis wie nodegraphhooks.py verwenden.
nodegraphhooks.py
#coding:utf-8
from canvaseventtypes import *
from custom_tabmenu_handler import CustomTabMenuHandler
def createEventHandler(uievent, pending_actions):
"""Hook-Ereignisse aus dem Netzwerkeditor"""
if isinstance(uievent, KeyboardEvent):
if uievent.eventtype == 'keyhit' and uievent.key=='Shift+Tab':
#Gibt einen Ereignishandler für ein benutzerdefiniertes Registerkartenmenü zurück
return CustomTabMenuHandler(uievent), True
return None, False
custom_tabmenu_handler.py
#coding:utf-8
import hou
import nodegraphbase as base
from hutil.Qt import QtGui
from hutil.Qt import QtWidgets
class CustomTabMenuHandler(base.EventHandler):
""" Shift+Benutzerdefinierte Tab-Menüverarbeitung, die von Tab geöffnet wird"""
def __init__(self, uievent):
"""Initialisierungsprozess"""
base.EventHandler.__init__(self, uievent)
#Menü erstellen
self.menu = hou.qt.Menu()
#Aktionsregistrierung
self.addAction(self.menu, 'test', self.testFunc1)
self.addAction(self.menu, 'test2', self.testFunc2)
self.menu.addSeparator()
self.addAction(self.menu, 'test3', self.testFunc3)
#Anzeige des Menüs
cursor_pos = QtGui.QCursor.pos()
self.menu.move(cursor_pos)
self.menu.show()
def handleEvent(self, uievent, pending_actions):
"""Ereignisverarbeitung"""
#Gibt einen Ereignishandler zurück, um die Ereignisverarbeitung fortzusetzen
if self.menu.isVisible():
return self
#Die Ereignisverarbeitung endet, wenn das Menü verschwindet
return None
def addAction(self, menu, name, func):
"""Hilfsfunktion für die Aktionsregistrierung"""
act = QtWidgets.QAction(name, menu)
act.triggered.connect(func)
menu.addAction(act)
def testFunc1(self):
"""Nachricht im Netzwerkeditor anzeigen"""
#Das in der Initialisierung übergebene Ereignis ist self.start_Kann mit uievent erhalten werden
self.start_uievent.editor.flashMessage(None, 'test1', 2.0)
def testFunc2(self):
self.start_uievent.editor.flashMessage(None, 'test2', 2.0)
def testFunc3(self):
self.start_uievent.editor.flashMessage(None, 'test3', 2.0)
Um eine Aktion hinzuzufügen, fügen Sie eine Mitgliedsfunktion hinzu und ordnen Sie sie addAction zu.
Ich habe gerade ein Widget erstellt, das nur das Bild anzeigt, und es mit hou.qt.Menu angezeigt. Ich benutze so ein Widget.
class PopupImage(QtWidgets.QWidget):
"""Existenz, die nur Bilder für Lebendigkeit anzeigt"""
image = None
def __init__(self, parent=None):
super(PopupImage, self).__init__(parent)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.NoDropShadowWindowHint)
self.setAttribute(QtCore.Qt.WA_NoSystemBackground)
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
if PopupImage.image is None:
#Bitte stellen Sie den Bildpfad auf ein gutes Gefühl ein.
imagepath = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'images', 'popup_image.png'))
PopupImage.image = QtGui.QImage()
PopupImage.image.load(imagepath)
def paintEvent(self, e):
#Zeichenereignis
painter = QtGui.QPainter(self)
painter.drawImage(self.rect(), PopupImage.image, PopupImage.image.rect())
Der Code ist auf GitHub aufgeführt. Weitere Informationen finden Sie hier. https://github.com/towazumi/HouNetworkEditorExtendSample
Die ursprüngliche Geschichte ist Python beginnend mit Houdini. Ursprünglich haben wir den Namen und die Farbe des ausgewählten Knotens geändert, aber hier werden wir direkt Nullknoten hinzufügen. Beachten Sie, dass sich der Netzwerkeditor auf SOP-Ebene befindet und ob er im Menü angezeigt wird.
Die ursprüngliche Geschichte ist __2: Methode unter Verwendung des Strings von Read Wavefront.mtl-Datei per Rückruf. Nehmen Sie diese Einstellung in Python vor.
Die ursprüngliche Geschichte ist [Houdini-Snippet] Knoten als Python-Code speichern. Ich mache es möglich, diese Informationen zu verwenden, wenn dem von asCode generierten Skript eine Verarbeitung hinzugefügt und wiederhergestellt wird.
Es mag eine gefährliche Zeit sein, aus dem Weg zu gehen, da auch Python3 auftaucht, aber es macht Spaß, es nach Ihren Wünschen zu ändern. Ich hoffe, dass dieser Artikel für diejenigen nützlich ist, die auch interessiert sind. Bis zum Ende Danke fürs Lesen.
Recommended Posts