基于Python的Houdini插件开发

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

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
本文以Python开发为例来进行说明,环境说明:
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(1) Python 3.x(我用的版本是 3.9 版本)
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(2)IDE开具 PyCharm(我用的版本是 PyCharm Community Edition 2021.3.2)
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(3)Houdini,我安装的版本是 Houdini 19.0.455
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
Python相关环境所在的位置(Shell、Source Editor、Panel Editor)
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发
如果打开了,则打印信息会出现在 shell 窗口
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发
也可以通过先打开 Python Panel 后,通过右上角的功能按钮打开 Python Panel Editor
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
我们需要菜单栏上的更多,自定义许多菜单功能按钮。例如:
[En]

We need more on the menu bar, customizing a lot of menu function buttons. Such as the following:

基于Python的Houdini插件开发

基于Python的Houdini插件开发
(1)创建一个菜单页签选项卡(New Shelf)
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(2)往选项卡里添加功能按钮(New Tool)
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
(3)我们通过在 Scripts 中重新载入代码来执行 python 文件
基于Python的Houdini插件开发

基于Python的Houdini插件开发
一种通过切换 python工程目录,os.chdir;另外一种方法是通过 sys.path.append追加路径
基于Python的Houdini插件开发

基于Python的Houdini插件开发
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
import os
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
import sys
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
from imp import reload
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
houdini_tool_path = 'python文件存放的路径'
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
if houdini_tool_path not in sys.path:
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    sys.path.append(houdini_tool_path)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
else:
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    print(houdini_tool_path + " 存在")
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
import python文件名
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
reload(python文件名)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
// todo...(比如执行python文件名指定的 run 函数等)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
为了工具更便捷的开发,界面我们采用了 PySide2 进行搭建。
基于Python的Houdini插件开发

基于Python的Houdini插件开发
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
# 升级系统的pip
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
> python –m pip install –upgrade pip
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
# 安装 PySide2
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
>  pip install pyside2
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
并向解释器路径添加以下三个目录
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
安装 Houdini Python Support 插件
基于Python的Houdini插件开发

基于Python的Houdini插件开发
基于Python的Houdini插件开发
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

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

基于Python的Houdini插件开发
剩下主要任务就是编码,首先找到 ui 界面存放路径,然后加载界面,绑定界面事件
基于Python的Houdini插件开发

基于Python的Houdini插件开发
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
# coding=utf-8 #
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
import hou
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
import os
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
from PySide2 import QtCore, QtUiTools, QtWidgets
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
class CreateNodeDemo(QtWidgets.QWidget):
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    def __init__(self):
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        super(CreateNodeDemo, self).__init__()
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        # 创建界面
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        ui_file_path = 'UI界面存放的路径'
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        self.ui = QtUiTools.QUiLoader().load(ui_file_path, parentWidget=self)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        self.setParent(hou.ui.mainQtWindow(), QtCore.Qt.Window)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        # 绑定界面事件
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        self.ui.btn_create.clicked.connect(self.btn_click_handler)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        print('11111111111111111111')   # 打印日志
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    def btn_click_handler(self):
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        node_name = self.ui.txt_node.text()
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        self.create_node(node_name)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    def create_node(self, node_name):
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
        hou.node('/obj/').createNode('geo', node_name)
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
def run():
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    win = CreateNodeDemo()
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)
    win.show()
![基于Python的Houdini插件开发](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20220813/47448-20220222143249788-282963517.png)

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
// 以上代码参考至B站的《Houdini18 Python入门教学》,视频链接:https://www.bilibili.com/video/BV18V411a75k?p=5
基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发

基于Python的Houdini插件开发
本文参考链接:
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(1)Houdini18 python入门教学
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(2)Houdini (四) 脚本基础Python
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(3)Writing custom viewer states in Python
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(4)PyCharm配置houdini
基于Python的Houdini插件开发

基于Python的Houdini插件开发
(5)使用PySide2开发GUI

Original: https://www.cnblogs.com/meteoric_cry/p/15923024.html
Author: meteoric_cry
Title: 基于Python的Houdini插件开发

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/9900/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部