基于Python的Houdini插件开发

Houdini是基于QT进行的开发,支持 Python、HScript二种脚本进行插件开发。

本文以Python开发为例来进行说明,环境说明:

(1) Python 3.x(我用的版本是 3.9 版本)

(2)IDE开具 PyCharm(我用的版本是 PyCharm Community Edition 2021.3.2)

(3)Houdini,我安装的版本是 Houdini 19.0.455

Python相关环境所在的位置(Shell、Source Editor、Panel Editor)

Shell 就简单介绍一下。当执行 python 代码时,如果没有打开 Python Shell,相应的打印会出现在 Houdini Console(桌面右下角)

基于Python的Houdini插件开发_第1张图片

如果打开了,则打印信息会出现在 shell 窗口

基于Python的Houdini插件开发_第2张图片

Python Panel Editor,可以创建界面(New Interface),供panel的tab页签调用,以及下拉菜单使用

基于Python的Houdini插件开发_第3张图片

也可以通过先打开 Python Panel 后,通过右上角的功能按钮打开 Python Panel Editor

基于Python的Houdini插件开发_第4张图片

创建的界面(Interfaces),通过设置便可以在其它tab页签中直接调用打开了(按 Apply确认,或者 Accept 确认并关闭窗口)

基于Python的Houdini插件开发_第5张图片

我们更多需求是在菜单栏上面,自定义很多菜单功能按钮。比如下面这样:

(1)创建一个菜单页签选项卡(New Shelf)

基于Python的Houdini插件开发_第6张图片

(2)往选项卡里添加功能按钮(New Tool)

基于Python的Houdini插件开发_第7张图片

基于Python的Houdini插件开发_第8张图片

按钮被点击时所执行的脚本,在 Script 中进行编写,常用的还有选项(Options)以及Hotkeys(热键)

(3)我们通过在 Scripts 中重新载入代码来执行 python 文件

一种通过切换 python工程目录,os.chdir;另外一种方法是通过 sys.path.append追加路径

import os
import sys
from imp import reload

houdini_tool_path = 'python文件存放的路径'

if houdini_tool_path not in sys.path:
    sys.path.append(houdini_tool_path)
else:
    print(houdini_tool_path + " 存在")

import python文件名
reload(python文件名)

// todo...(比如执行python文件名指定的 run 函数等)

为了工具更便捷的开发,界面我们采用了 PySide2 进行搭建。

# 升级系统的pip
> python –m pip install –upgrade pip

# 安装 PySide2
>  pip install pyside2

注意创建的是 Widget,以及控件的名称( Python 代码通过名称获得该控件的引用)

基于Python的Houdini插件开发_第9张图片

如果想为 Houdini 安装外部的 python库,比如pandas,需要用到 get-pip.py文件

基于Python的Houdini插件开发_第10张图片

弄完UI,我们来看看IDE编码环境如何搭建。本文用的是PyCharm编辑器,首先需要设置解释器路径为 Houdini 的 Python37目录

基于Python的Houdini插件开发_第11张图片

并向解释器路径添加以下三个目录

基于Python的Houdini插件开发_第12张图片

安装 Houdini Python Support 插件

基于Python的Houdini插件开发_第13张图片

将新建的 Python 文件保存至指定目录,以便菜单栏上的按钮 Script 能加载并执行。

剩下主要任务就是编码,首先找到 ui 界面存放路径,然后加载界面,绑定界面事件

# coding=utf-8 #
import hou
import os
from PySide2 import QtCore, QtUiTools, QtWidgets

class CreateNodeDemo(QtWidgets.QWidget):

    def __init__(self):
        super(CreateNodeDemo, self).__init__()

        # 创建界面
        ui_file_path = 'UI界面存放的路径'
        self.ui = QtUiTools.QUiLoader().load(ui_file_path, parentWidget=self)
        self.setParent(hou.ui.mainQtWindow(), QtCore.Qt.Window)

        # 绑定界面事件
        self.ui.btn_create.clicked.connect(self.btn_click_handler)
        print('11111111111111111111')   # 打印日志

    def btn_click_handler(self):
        node_name = self.ui.txt_node.text()
        self.create_node(node_name)

    def create_node(self, node_name):
        hou.node('/obj/').createNode('geo', node_name)


def run():
    win = CreateNodeDemo()
    win.show()

你可能感兴趣的:(python,houdini,pycharm,开发语言,数据分析)