• 在Houdini中创建自定义的Python函数


      从Houdini 9 开始,sidefx给Houdini增加了对Python语言的支持,在未来Hscript也将被Python所代替;Houdini在9.0的时候加入了对Python的支持,成为替代HScript的脚本,为了保持文件在各版本间自上而下的兼容,HScript现在还是保留的,但推荐使用Python;

      你可以用python建立一个自定的节点,和VEX的节点有所不同,Python SOP可以允许建立或删除几何体,当然它的速度是没有VEX节点快的的。VEX的底层实现是C语言,Python与houdini的接口是C++实现的;

    自定义函数的结构如下:

    [返回值] 函数名([[参数类型1] 参数1 [, [参数类型2] 参数2] ...])
    {
      函数体
    }
    返回值的类型包括float(浮点小数), String(字符串), Vector(向量), Matrix(矩阵)。

     

    特别注意:

      如果没有明确列出返回类型或参数类型,Houdini将假定它是一个float型,会默认将其他数据类型改变成浮点型。如果你忘记指定一个参数是一个字符串,Houdini都将把它转换为浮点类型,可能会导致难以发现的Bug,所以最好指定函数类型,float型的性能比较低,尽量避免;

      函数定义的主体,可以使用额外的语法,如赋值(=,+=, - =),if,while等使用return 获取返回值。

      使用#开头的行是注释,Houdini将忽略执行。

    创建自定义函数过程:

      打开函数编辑器

    选择Edit > Aliases and Variables 打开 Aliases(别名)和Variables(变量)编辑器:

    1. 点击 Expressions 选项:

      有朋友可能会觉得为何这个Python函数的语法不一样,因为Sidefx把Python修改过,编译了一个新的Hython,不过这个区别在于括号和部分标点;其他改动不大。

    创建新的自定义函数:

    1. 直接清除原函数,输入新自定义函数;

    2. 点击Apply Changes之后,新函数名就会进入左侧列表,就可以使用了。 我们定义的函数将会在左边的函数列表中出现。

    从外部文件中加载:

    • 右下角的自定义函数编辑器中单击加号图标,并选择要加载的文件。

    • 也可以使用 exread 命令。

    在外部编辑器中编辑函数源码:

    1. 在右下角的自定义函数编辑器,点击“Edit”按钮。

    2. 在外部编辑器中编辑函数源码,然后保存关闭返回给Houdini。

    3. 也可以使用 exread 命令。

    测试新的函数:

    • 首先需要把Houdini切换到Technical模式;Windows——Desktop——Technical

    • 在底部的Textport窗口中输入自定义的函数名,例如测试min函数就写:echo `min(12, 15)`,打印结果返回12,函数创建成功~

    下面是Python自定义函数实例:

      Houdini中写Python函数和在Eclipse中不同,函数后面用大括号作为方法体而不是冒号,写冒号会报错;

    # 比较两个数的大小,没有定义返回值类型,默认返回浮点类型。
    min(v1, v2) {
        if (v1 < v2) {
            return v1;
        } else {
            return v2;
        }
    }

    # 返回字符串
    string strreverse(string in) {
        float len = strlen(in);
        string result = "";
        for (src = len-1; src >= 0; src--) {
            result += in[src]; return result;
        }
    }
    # 返回最小的向量
    float vecmin(vector vec) {
        min = vec[0]
        for (i = 1; i < vsize(vec); i++) {
            if (vec[i] < min)  
           min = vec[i] } return min; }
  • 相关阅读:
    c++新特性之std::atomic
    PyQt 演示Demo1
    RxCPP(二)关键元素
    c++11 random_device 真随机数最简单应用
    PyQT5 安装与入门
    RxCPP(一)编程模型入门 调度
    RxCpp(四)Qt/GUI编程
    RxCPP(一)编程模型入门
    Flask 学习80.FlaskRESTX使用reqparse 解析器trim=True去掉字符两边空格 上海
    Flask 学习81.FlaskRESTX使用reqparse 解析器去掉值为None的参数 上海
  • 原文地址:https://www.cnblogs.com/jackchiang/p/4599215.html
Copyright © 2020-2023  润新知