[AE脚本] 删除有错误的表达式 DelErrorExps

删除当前活动合成中的错误表达式。

复制下面代码到文本txt中,更改扩展名为 DelErrorExps.jsx

(function () {
    app.beginUndoGroup("DelErrorExps");

    // 为了确保不会错误地处理项目面板中的一个项目,暂时将查看器设为活动状态。
    app.activeViewer.setActive();

    var mAi = app.project.activeItem;
    var mLyrs = mAi.layers;
    var mAllValProps = [];
    //检查是否隐藏的常规表达式。
    var mRegExpHdn = new RegExp("hidden");
    // 从所有的图层中收集带有"value"属性。
    for (var i = 1; i <= mLyrs.length; i++) {
        mAllValProps = mAllValProps.concat(mGetValProps(mLyrs[i]));
    }
    //将其中具有可应用表达式且错误消息不为空(即存在错误)的表达式设置为""(空字符串)。
    for (var i = 0; i < mAllValProps.length; i++) {
        var mProp = mAllValProps[i];
        if (mProp.canSetExpression && mProp.expressionError !== "" && !(mIsHidden(mProp, mRegExpHdn))) {
            mProp.expression = "";
        }
    }

    app.endUndoGroup();
    //--------------------------------------------------
    //--------------------------------------------------
    // 从图层中收集具有"value"属性的属性。
    function mGetValProps(aLyr) {
        var mRstProps = [];
        mFunc(aLyr);

        function mFunc(aProp) {
            if (aProp.propertyType === PropertyType.PROPERTY) {
                mRstProps.push(aProp);
            } else {
                for (var i = 1; i <= aProp.numProperties; i++) {
                    mFunc(aProp(i));
                }
            }
        }
        return mRstProps;
    }
    //检查属性是否为隐藏状态。请注意关键帧被全部选择的情况。
    function mIsHidden(aProp, aRegExpHdn) {
        try {
            aProp.selected = aProp.selected;
            return false;
        } catch (e) {
            return aRegExpHdn.test(e.message);
        }
    }
})();

用法

当执行这段 JSX 代码时,它将从当前活动合成中提取所有图层的所有属性。然后删除其中存在表达式错误的属性的表达式。

  • 没有用户界面(UI)。
  • 不适用于整个项目。如果要应用于整个项目,这可能会有些麻烦。您需要单击错误消息下方的放大镜图标,在打开的错误合成中逐个执行此 JSX。
  • 如果存在"存在错误但未显示的属性",它们将不会被处理。例如,如果您将图层先设置为3D图层,并对"方向"属性应用表达式,然后出现表达式错误,但将3D开关重新设置为2D,以便消除错误,这种情况将不会被处理。这也可能在图层样式中发生。

解释

目前,您正在从合成中收集所有图层,并使用递归函数收集它们的所有属性。然后,您将对这些属性中的表达式错误不为空的属性(即存在错误的属性)的表达式进行清空处理。第一个空字符串("")用于检查是否存在错误消息,第二个空字符串("")是用于清空表达式的空字符串,请注意它们是不同的。

我也尝试创建了适用于整个项目的版本,但似乎检查表达式错误是否为空字符串(即是否存在错误)的功能在未打开的合成中的行为似乎是不确定的。我认为这与打开的合成中没有在查看器中显示错误警告有关,即使合成中存在具有错误表达式的合成,如果未打开合成,可能不会在查看器中显示错误警告。

另外,关于hidden属性,例如2D图层的"方向"属性或未应用的图层样式等,这些都是"实际上图层已经具有但被隐藏的属性",除非将其显示出来,否则脚本无法处理它们。严格来说,虽然可以处理它们,但无法更改其值等。由于缺乏能够检查hidden属性的方法,您正在使用以下判断函数来处理此类情况。如果出现错误并且错误消息中包含"hidden",则返回true,否则返回false。对于这些函数返回true的属性,您将省略处理。

给TA充电
共{{data.count}}人
人已充电
AEAE开发脚本开发

[AE脚本示例]一个标记管理器

2023-5-30 15:05:03

AEAE开发AE插件/脚本脚本开发

【AE脚本】下拉菜单快速选择图层 | DropTune

2023-6-19 15:47:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索