-
[AE脚本示例] 遍历效果并创建文件夹
今天我想做做内置效果笔记, 于是想先遍历所有效果, 并创建对应的.md文件 用到的脚本方法与关键点 effects fsName (文件的特定平台的完整路径名) 源码 var effects = app.effects; var effects_store = {}; // 引入File类 var File = File || $.global.File; // 获取当前脚本文件所在的文件夹路径 var scriptFile = File($.fileName); var scriptFolder = scriptFile.parent.fsName; // 遍历所有效果 for (var i = 0; i < effects.length; i++) { var effect = effects[i]; var cat = effect.category; // 将效果添加到字典中 if (!effects_store.hasOwnProperty(cat)) { effects_store[cat] = []; } effects_store[cat].push(effect.displayName); } // 遍历储存的效果字典 for (var category in effects_store) { if (effects_store.hasOwnProperty(category)) { var effs = effects_store[category]; // 有的效果没有分类, 所以分类名为空, // 如果你也想获取这些效果, 请在else里处理 if (category) { // 创建文件夹,文件夹名字为 category // 保存在脚本目录下的cache目录里 var folderPath = scriptFolder + "/cache/" + category; var folder = new Folder(folderPath); if (!folder.exists) { folder.create(); } // 遍历effs,并创建文件 for (var i = 0; i < effs.length; i++) { var fileName = effs[i] + ".md"; // 文件名为效果名称 var filePath = folderPath + "/" + fileName; // 打印下文件路径吧 $.writeln(filePath); var file = new File(filePath); if (!file.exists) { file.open("w"); file.close(); } } } } }- 0
- 0
- 249
-
[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的属性,您将省略处理。- 0
- 0
- 314
-
[AE脚本开发]合并多条路径为一条
使用方法 选择要合并的路径, 运行脚本即可 脚本源码 'use strict'; var comp = app.project.activeItem; if (comp && comp instanceof CompItem) { var selectedShapes = comp.selectedProperties; var extend = function extend(array1, array2) { var newArray = []; for (var index = 0; index < array1.length; index++) { newArray.push(array1[index]); } for (var index = 0; index < array2.length; index++) { newArray.push(array2[index]); } return newArray; }; var selectedShapes = comp.selectedProperties; var propertyArrays = { featherInterps: [], featherRadii: [], featherRelCornerAngles: [], featherRelSegLocs: [], featherSegLocs: [], featherTensions: [], featherTypes: [], inTangents: [], outTangents: [], vertices: [], closed: false, }; for (var i = 0; i < selectedShapes.length; i++) { var prop = selectedShapes[i]; if (prop.matchName === 'ADBE Vector Shape') { var propV = prop.value; for (var key in propertyArrays) { if (key == 'closed') { propertyArrays[key] = propV[key]; continue; } if (propertyArrays.hasOwnProperty(key)) { propertyArrays[key] = extend(propertyArrays[key], propV[key]); } } } } var myShape = new Shape(); for (var key in propertyArrays) { if (propertyArrays.hasOwnProperty(key) && (propertyArrays[key].length > 0 || key == 'closed')) { myShape[key] = propertyArrays[key]; } } var newShapeLayer = comp.layers.addShape(); newShapeLayer.name = 'Merged Shapes'; var shapeGroup = newShapeLayer.property('ADBE Root Vectors Group'); var pGroup = shapeGroup.addProperty('ADBE Vector Shape - Group'); pGroup.property('ADBE Vector Shape').setValue(myShape); } else { alert('请在合成中选择路径!'); }…- 0
- 0
- 174