作者:Houdini的一千个技巧 我用什么留住你,我给你贫穷的街道,绝望的日落,破败郊区的月亮。我给你一个久久的望着孤月的人的悲凉 博尔赫斯 查看houdini的python版本 在houdini环境文件中写入python版本 下载安装对应版本的pyside 安装pyside,然后找到pyside文件夹,复制 创建一个文件夹,拷贝pyside文件夹到这里 查找homeHoudiniDirectory目录,查看houdini模块的安装路径 你可以导入自己定义的py文件(模块)到这个目录 比如,导入shaderman模块 结果 比如,在pythonlibs中创建一个message模块 这个模块的唯一功能是显示一句话 然后再houdini的script文件夹创建一个123文件,每次你运行houdini,这个文件都会运行 123.py内,将pythonlibs文件夹(pyside所在的文件夹)append到系统路径 然后再houdini的python shell中就能导入这个message模块了 reload(message)函数也可以导入 查看pyside的版本 使用charm创建打开message模块 再创建一个pytest 然后再houdini的python shell中reload这个模块 自定义工具架,调用这个模块 结果 houdini用pyqt写的GUI案例 将案例的代码复制到shell,然后将from PyQt修改成from PySide 保存为pyside_houdini.py,保存到pythonlibs文件夹 创建一个pysidelabel.py模块,导入上面创建的pyside_houdini.py,然后实现一个功能,打印一句“hello world again” 新建工具,导入pysidelabel模块 结果 角色控制,创建CharPickerTutorial.py文件,复制上面的代码到这个py文件中 新的工具,导入CharPickerTutorial模块 创建一个button,用QPushButton函数,将按钮返回到select_btn 结果 归类图片 自定义selecthead函数,将按钮select_btn和这个selecthead函数进行关联,当按下按钮的时候打印出来/obj/toonsimple1这个节点 点击一下,就进行打印 那么,如何点击按钮的时候,选择绑定文件的呢?我们看一下toonsimple这个节点内部 绑定文件的控制器是由null节点,我们要选择这个null节点 首先我们将一个子节点ctrl_head选中 结果,点击一下按钮,打印一次ctrl_head 然后用setSlected函数,将该节点选中,结果,点击一下按钮,就只选中了ctrl_head控制器 导入图片,显示图片用QPixmap函数和setPixmap函数 结果 将界面置顶 打开qt designer,设置3个label,每个label设置几个按钮,然后为每个label添加背景图 创建一个基本的界面,保存为ui文件 路径 导入ui文件 显示出来 点击工具架,出现了2个界面 不需要先show,QDialog的显示有两个函数show()和exec() 结果 加载背景图 导入另外3个图,分别设置为character face hand的背景图 头部的buttom按钮名字叫ctrl_head 获取这个按钮 链接起来 点击按钮,选中头部 另外三个按钮,关联到selectctrl 定义一个char selectctrl 选中了,这样点击右边的按钮,就选中了左边的null约束节点 buttom funcbuttons 关联 测试 定义funcButtons,如果传入的是channel editor,那么就打开channel editor面板,先查看curdesktop() 可以看到当前的desktop是varomix_01 然后在当前的desktop上,创建createfloatingpanel()浮动的面板,面板的类型是channeleditor houdini中打开channel editor面板的表达式如下,Qt中sender()函数,你在一个槽里面,调用这个函数,返回的就是你信号来源的对象 点击channel editor就打开channel editor 设置ui 下面定义select all按钮,当点击select all按钮,就选中所有子节点,如果传入的sendBtn是select all,那么,选中char的所有子节点,因为只有控制节点是绿色的,所以,如果节点的颜色是绿色,就选中该节点,即选中了所有的控制节点 选中所有 下面定义key all和zero all按钮,首先获取参数面板 定义getkeyableparms()函数,获取spin参数面板的参数 打印出来 完善,用description()函数,将spline,arms,legs标签下,内容标签为“eyes lookat custom space”等参数,放到keyableparms列表里 然后自定义zreoall函数,如果参数在keyableparms列表里,那么将这个参数的值设为0,hou.node(‘/obj/toonchar1’).parm(‘rotatex’)和char.parm.name()是一样的 补充funcButtons函数,如果传入的是zero all(即按了zero all按钮),那么就调用zeroall()函数,将参数设置为0 然后定义keyframeall函数,将当前的参数栏的值设置关键帧 然后在funcButtons函数里面调用keyframeall函数 结果,key all就将所有参数打关键帧了 此时,当我们undo的时候,并不是一次性的取消keyall,而已一行一行的undo 打开undo目录,我们的每一步记录,都会被放到这个目录里面 我们在选中节点之前,先将“select all controls”放到undos类的组中 结果,点击一次select all按钮,undos面板就出现一次select all controls 然后我们点击一次,select all controls就消失了,也就undo所有操作了 同样的,我们需要在zeroall和keyframeall函数里面加上“reset all controls”和“keyframe all controls” 这样再次点击keyframeall,就可以在undo面板看到keyframeall出现了 ctrl+z就取消了 然后在select all controls下面,加一句setselected(false),这样当选中节点的时候,取消选择char 接着,完善ui,为所有关节添加按钮 然后创建2个radio按钮,用来控制别的按钮的显示和隐藏 然后将原点按钮和别的方块按钮关联起来 这个原点按钮IK的togglee()开关,关联到方块按钮的hide()隐藏 对比,右边的原点按钮FK,就是关联到方块按钮的show() 结果,隐藏了 显示了 接下来就是繁琐的步骤了,关联所有 接下来就是获取这些按钮 ctrl双选多选设置,通过keyboardmodifiers函数导入键盘输入,赋值给modifiers,如果输入的是shift键就多选 创建setcharacter函数,如果没有选中一个绑定文件,就点击工具架,那么弹出一个警告 结果 接下来就是head和hand的按钮 创建一个slider,范围为-180到180,用于控制眼睛的旋转 导入slider按钮 然后自定义eyelidsliderctrl眼皮旋转滑竿函数,用滑竿的数值sldrSnd.value()去控制‘eyerightlidrotate’参数的值 结果 同样,为手部创建滑竿 sliderctrl函数 传入IK switch按钮 自定义IKFKswitch函数 设置background-color 修改按钮滑竿等颜色 最终效果 ------------------------------------------------------------------------- 我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。 ------------------------------------------------------------------------- |