返回介绍

SeExpr 表达式参考

发布于 2024-06-23 21:36:12 字数 5554 浏览 0 评论 0 收藏 0

本页面列出了所有在 Krita 中可用的 SeExpr 变量、函数和运算符,并介绍它们的功能和用法。所有内容均基于 SeExpr 官方用户文档 修改而来,为了方便 Krita 用户的使用进行了一些语句上的调整。(译者注:为了照顾脚本编程的实际需要,本页的某些部分采用中英对照翻译。)

参见

参见

Variables (变量)

External variables (外部变量)

这些变量由宿主程序 (Krita) 提供。它们被注册到 SeExpr 模块的自动完成提示信息中,可以通过 Ctrl+Space 快捷键访问。

$u, $v

局部变量可以在表达式的开头处定义:

$a = noise($P);
$b = noise($a * 1);
pow($a, 0.5) + $b

外部变量也可以被局部赋值所改写。例如对噪声频率进行缩放:

$P = $P * 10; # 提高噪声频率
fbm(vnoise($P) + $P/4)

你也可以定义命名空间变量,例如:

$A::a = $u * 10;

Control Structures (控制结构)

SeExpr 提供了常见的 if 条件结构:

if ($ u > 0.5) {
    $color = [0, 0, 1];
}
else {
    $color = [1, 0, 0];
}

$color

它也提供了 ternary operator (三元运算符):

$u = $i < .5 ? 0.0 : 10.0

你可以任意嵌套三元运算符,例如:

$color = $u < .5 ? ($v < 0.5 ? [0, 0, 1] : [1, 0, 0]) : [0, 1, 0];
$color

你也可以通过 if 结构来实现三元运算符的嵌套:

if ($ u > 0.5) {
    if ($v < 0.5) {
        $color = [0, 0, 1];
    }
    else {
        $color = [1, 0, 0];
    }
}
else {
    $color = [1, 0, 0];
}

$color

Operators (运算符/按递减顺序排列)

[a,b,c]

你可以使用基本赋值语句,例如:

$foo = $bar

你也可以在赋值语句中使用运算符:

$foo += $bar;

上面的语句相当于:

$foo = $foo + $bar;

可以使用的赋值运算符如下:

  • +=

  • -=

  • /=

  • %=

  • *=

  • ^=

Comments (代码注释)

你可以用 # 字符给对脚本进行代码注释。SeExpr 不会对一行代码里位于 # 号后面的内容进行渲染,但这不意味着它们被完全忽略——代码注释可以用来声明整数、浮点和矢量变量的有效范围,你可以使用 SeExpr 对话框的图形控件在此范围内拖动数值。

提示

$var0 作为整数变量,范围在 0 - 10 (含):

$var0 = 0; # 0, 10

$var1 作为浮点变量,范围和前者一样:

$var1 = 0; # 0.000, 10.000

$var2 作为矢量变量,范围和前者一样:

$var2 = [0, 0, 0] # 0.000, 10.000

最后一个例子尤其有用。SeExpr 会将范围为 [0, 1] 的矢量视作颜色信息:

# 输出颜色为暗红色
$color = [0.5, 0, 0] # 0.000, 1.000

不管是哪种数值类型,如果没有指定范围,那么 SeExpr 对话框控件将默认范围为 0 - 1 (含)。

多行表达式的每一行都可以有自己的代码注释。

Logging Functions (日志函数)

float printf ( string format, [param0, param1, …] )
float bias ( float x, float b)
float cellnoise ( vector v )
float choose ( float index, float choice1, float choice2, […] )
float PI
float acos ( float x )
float angle ( vector a, vector b )

** Vectors (矢量)** 包括矢量点、颜色矢量和三维矢量,有时也和 scalars (标量) (simple floating point values / 简单浮点数值) 混用。如果在矢量语境里面使用标量,它将会被复制到矢量的三个分量上,例如 0.5 将被转换为 [0.5, 0.5, 0.5]

矢量在标量语境中使用时,只有它的第一分量才会被使用。这种做法的好处是所有给标量准备的函数也可以自动支持矢量。例如 pickchoosecyclespline 等均可使用矢量。

算数运算符,如 +* 等,还有标量函数会按照分量应用到矢量。例如将 gamma 函数应用到一个 mao (映射) 时将调整全部三个颜色通道的 gamma 值。

Curve Functions (曲线函数)

将参数数值按照下列函数指定的控制点进行插值。

color ccurve ( float param, float pos0, color val0, int interp0, float pos1, color val1, int interp1, […] )

自定义函数可用 C++ 编写后作为动态插件加载。详情请参照 SeExpr 的 Writing Custom Expression Plugins / 编写自定义表达式插件 文章。

警告

Krita 不支持此功能。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文