[READ-ONLY] Mirror of https://github.com/probablykasper/2dcam. After Effects 2d camera
after-effects camera extendscript script
0

Configure Feed

Select the types of activity you want to include in your feed.

Renamed "name" option to "prefix"

Kasper (Mar 11, 2020, 10:29 PM +0100) 6fe681dc 4297db82

+45 -46
+45 -46
2dcam.jsx
··· 5 5 camera: "\u0089PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00\x1A\x00\x00\x00\x1A\b\x06\x00\x00\x00\u00A9JL\u00CE\x00\x00\x01\u0082iCCPsRGB IEC61966-2.1\x00\x00(\u0091u\u0091\u00CBKBA\x14\u0087?5)\u00CA0(\u00A2E\x0B\tkea\x05Q\x04AJX !f\u00D0k\u00A37\x1F\u0081\u00DA\u00E5^#\u00A4m\u00D0V(\u0088\u00DA\u00F4Z\u00D4_P\u00DB\u00A0u\x10\x14E\x10\u00ADZ\u00B4.jSr;7\x05%\u00F2\fg\u00CE7\u00BF\u0099s\u00989\x03\u00D6HZ\u00C9\u00E8u^\u00C8dsZ8\u00E0s\u00CD\u00CD/\u00B8\u00EA_\u00B0\u00D1@;vF\u00A3\u008A\u00AE\u008E\u0087BAj\u00DA\u00E7=\x163\u00DE\u00F6\u009A\u00B5j\u009F\u00FB\u00D7\u009A\u0096\u00E3\u00BA\x02\u0096\x06\u00E11E\u00D5r\u00C2\u0093\u00C2\u00C1\u00F5\u009Cj\u00F2\u008Ep\u009B\u0092\u008A.\x0B\u009F\t{4\u00B9\u00A0\u00F0\u009D\u00A9\u00C7J\u00FCjr\u00B2\u00C4\u00DF&k\u0091\u00B0\x1F\u00AC-\u00C2\u00AEd\x15\u00C7\u00AAXIi\x19ay9\u00EELzM)\u00DF\u00C7|\u0089#\u009E\u009D\u009D\u0091\u00D8%\u00DE\u0089N\u0098\x00>\\L1\u0081\u009F!\u00FA\x19\u0091y\u0088^\x06\u00E8\u0093\x155\u00F2\u00BD\u00BF\u00F9\u00D3\u00ACJ\u00AE\"\u00B3J\x1E\u008D\x15\u0092\u00A4\u00C8\u00E1\x11uM\u00AA\u00C7%&D\u008F\u00CBH\u00937\u00FB\u00FF\u00B7\u00AFzbp\u00A0T\u00DD\u00E1\x03\u00FB\u00B3a\u00BCwC\u00FD6\x14\x0B\u0086\u00F1ud\x18\u00C5c\u00B0=\u00C1e\u00B6\u0092\u00BFz\b\u00C3\x1F\u00A2\x17*\u009A\u00FB\x00\u009C\u009Bp~U\u00D1b\u00BBp\u00B1\x05\x1D\u008FjT\u008B\u00FEJ6qk\"\x01o\u00A7\u00D0<\x0F\u00AD7\u00D0\u00B8X\u00EAYy\u009F\u0093\x07\u0088l\u00C8W]\u00C3\u00DE>\u00F4\u00C8y\u00E7\u00D2\x0FHkg\u00D8X\u00BD\u00A4\u00BC\x00\x00\x00\tpHYs\x00\x00\x0B\x13\x00\x00\x0B\x13\x01\x00\u009A\u009C\x18\x00\x00\x00\u0081IDATH\u0089\u00ED\u0094;\x12\u00C3 \f\x05\u00F52\u00E3\x1B\u0085>\u0097\u00F2\u00F9 '\u00DB4\u00A10\u00B6\x07\f1i\u00B4\u00A5\x10Z\r\x1F\u00999\u00CE_\x00\x02\u0090\x18#\x01\u00A1&J\u00C0\n,\u009D\u008D.\u00DF\u00FD\u00B1\u0096H\u00AF\u00A4\u0090Q\u00C4^@\u00DA\u0088F$e\u009D,\u00C8gz\u008B\u00E8\u00E8\u00AE\u00CD\u00CC\u0094\x13$\u00E9\x17\u00A2\u00A3\u00B8$=F\u008B\u00B7\u00E2\u00A2\x16\u00DE\u00A7+S\u009F\u00F7\u00AC\x0F;m\x04\x05 ^\x1A\u00A1{\"\u00F0\u00ECi\u00D4q\u00EE\u00E1\x03?\u009D8B\u00C4\u00BC<\u00F7\x00\x00\x00\x00IEND\u00AEB`\u0082", 6 6 } 7 7 8 - Object.prototype.addc = function(name, options) { 8 + Object.prototype.addc = function(type, options) { 9 9 options = options || {}; 10 10 var bounds = options.bounds; 11 11 var properties = options.properties; 12 12 13 13 var noArg2 = false; 14 14 var arg2 = options.text; 15 - if (name == 'dropdownlist' || name == 'listbox' || name == 'treeview') { 15 + if (type == 'dropdownlist' || type == 'listbox' || type == 'treeview') { 16 16 arg2 = options.items; 17 - } else if (name == 'iconbutton' || name == 'image') { 17 + } else if (type == 'iconbutton' || type == 'image') { 18 18 arg2 = options.icon; 19 - } else if (name == 'flashplayer') { 19 + } else if (type == 'flashplayer') { 20 20 arg2 = options.movieToLoad; 21 - } else if (name == 'group') { 21 + } else if (type == 'group') { 22 22 noArg2 = true; 23 23 } 24 24 25 25 if (noArg2) { 26 - newElement = this.add(name, bounds, properties); 27 - } else if (name == 'progressbar' || name == 'scrollbar' || name == 'slider') { 28 - newElement = this.add(name, bounds, options.value, options.minvalue, options.maxvalue, properties); 26 + newElement = this.add(type, bounds, properties); 27 + } else if (type == 'progressbar' || type == 'scrollbar' || type == 'slider') { 28 + newElement = this.add(type, bounds, options.value, options.minvalue, options.maxvalue, properties); 29 29 } else { 30 - newElement = this.add(name, bounds, arg2, properties); 30 + newElement = this.add(type, bounds, arg2, properties); 31 31 } 32 32 33 33 // set options ··· 78 78 helpTip: 'New 2dCam output comp\nAlt+click: Apply 2dCam output to the selected layer', 79 79 }); 80 80 81 - var nameFieldWidthChars = 20; 81 + var prefixFieldChars = 20; 82 82 83 83 function newCamDialog(currentComp, alt, ok) { 84 84 var dialog = new Window("dialog", "New 2dCam", undefined, { resizeable: false }); ··· 89 89 var dialogRootGroup = dialog.addc('group', { 90 90 orientation: 'column', 91 91 }); 92 - var nameGroup = dialogRootGroup.addc('group', { 92 + var prefixGroup = dialogRootGroup.addc('group', { 93 93 orientation: 'row', 94 94 }); 95 - var nameText = nameGroup.addc('statictext', { 96 - text: 'Name:', 95 + var prefixText = prefixGroup.addc('statictext', { 96 + text: 'Prefix:', 97 97 justify: 'right', 98 98 // preferredSize: [40, 20], 99 99 }); 100 - var name = nameGroup.addc('edittext', { 100 + var prefix = prefixGroup.addc('edittext', { 101 101 text: '2dCam', 102 102 active: true, 103 - characters: nameFieldWidthChars, 103 + characters: prefixFieldChars, 104 104 }); 105 105 var panelGroup = dialogRootGroup.addc('panel', { 106 106 // text: 'Options', ··· 156 156 text: 'OK', 157 157 onClick: function() { 158 158 var options = { 159 - name: name.text, 159 + prefix: prefix.text, 160 160 width: evaluateNumberField(width.text, defaultWidth), 161 161 height: evaluateNumberField(height.text, defaultHeight), 162 162 alsoCreateOutputComp: createOutputComp.value, ··· 171 171 dialog.show(); 172 172 } 173 173 174 - function applyOutputToLayer(name, outputLayer) { 175 - var nameLength = name.length; 174 + function applyOutputToLayer(prefix, outputLayer) { 176 175 outputLayer.anchorPoint.expression = [ 177 176 "var x = null;", 178 177 "for (var i = 1; i < source.numLayers + 1; i++) {", 179 178 " var layer = source.layer(i);", 180 - " if (layer.active && layer.name.substring(0, "+name.length+") == '"+name+"') {", 179 + " if (layer.active && layer.name.substring(0, "+prefix.length+") == '"+prefix+"') {", 181 180 " x = layer.toWorld(layer.anchorPoint);", 182 181 " break;", 183 182 " }", ··· 188 187 "var x = null;", 189 188 "for (var i = 1; i < source.numLayers + 1; i++) {", 190 189 " var layer = source.layer(i);", 191 - " if (layer.active && layer.name.substring(0, "+name.length+") == '"+name+"') {", 190 + " if (layer.active && layer.name.substring(0, "+prefix.length+") == '"+prefix+"') {", 192 191 " x = layer.anchorPoint+[layer.width/2, layer.height/2];", 193 192 " break;", 194 193 " }", ··· 199 198 "var x = null;", 200 199 "for (var i = 1; i < source.numLayers + 1; i++) {", 201 200 " var layer = source.layer(i);", 202 - " if (layer.active && layer.name.substring(0, "+name.length+") == '"+name+"') {", 203 - " var camSize = source.layer('"+name+"').content('Rectangle').size;", 201 + " if (layer.active && layer.name.substring(0, "+prefix.length+") == '"+prefix+"') {", 202 + " var camSize = source.layer('"+prefix+"').content('Rectangle').size;", 204 203 " if (camSize[0] != thisComp.width || camSize[1] != thisComp.height) {", 205 - " throw new Error('The composition width/height must be the same as the "+name+" layer')", 204 + " throw new Error('The composition width/height must be the same as the "+prefix+" layer')", 206 205 " }", 207 - " x = thisComp.width/camSize[0]*100/source.layer('"+name+"').scale[0]*100;", 206 + " x = thisComp.width/camSize[0]*100/source.layer('"+prefix+"').scale[0]*100;", 208 207 " }", 209 208 "}", 210 209 "[x,x];", ··· 213 212 "var x = null;", 214 213 "for (var i = 1; i < source.numLayers + 1; i++) {", 215 214 " var layer = source.layer(i);", 216 - " if (layer.active && layer.name.substring(0, "+name.length+") == '"+name+"') {", 215 + " if (layer.active && layer.name.substring(0, "+prefix.length+") == '"+prefix+"') {", 217 216 " x = -layer.rotation;", 218 217 " break;", 219 218 " }", ··· 222 221 ].join('\n'); 223 222 } 224 223 225 - function get2dCamDimensions(comp, name) { 224 + function get2dCamDimensions(comp, prefix) { 226 225 // get width and height from 2dCam (active 2dCam prioritized) 227 226 var dimensions = {width: null, height: null}; 228 227 for (var i = 1; i < comp.layers.length+1; i++) { 229 228 var layer = comp.layer(i); 230 - var nameMatch = layer.name.substring(0, name.length) == name; 231 - if (nameMatch && layer instanceof ShapeLayer) { 229 + var prefixMatch = layer.name.substring(0, prefix.length) == prefix; 230 + if (prefixMatch && layer instanceof ShapeLayer) { 232 231 if (!dimensions.width || !dimensions.height) { 233 232 dimensions.width = layer.width; 234 233 dimensions.height = layer.height; ··· 244 243 return dimensions 245 244 } 246 245 247 - function newOutputComp(name, width, height, sourceComp) { 246 + function newOutputComp(prefix, width, height, sourceComp) { 248 247 249 - var dimensions = get2dCamDimensions(sourceComp, name); 248 + var dimensions = get2dCamDimensions(sourceComp, prefix); 250 249 if (!dimensions.height || !dimensions.width) return null; 251 250 252 251 // create comp 253 252 var outputComp = app.project.items.addComp( 254 - sourceComp.name+' '+name, 253 + sourceComp.name+' '+prefix, 255 254 dimensions.width, 256 255 dimensions.height, 257 256 sourceComp.pixelAspect, ··· 262 261 263 262 // create output layer 264 263 var outputLayer = outputComp.layers.add(sourceComp); 265 - applyOutputToLayer(name, outputLayer); 264 + applyOutputToLayer(prefix, outputLayer); 266 265 outputComp.openInViewer(); 267 266 return outputComp; 268 267 } ··· 272 271 var currentComp = app.project.activeItem; 273 272 if (!currentComp) return alert('Please select a comp'); 274 273 275 - // ask for name, width, height then apply preset. 274 + // ask for prefix, width, height then apply preset. 276 275 var alsoNewOutputComp = ScriptUI.environment.keyboardState.altKey; 277 276 newCamDialog(currentComp, alsoNewOutputComp, function(options) { 278 277 var camWidth = options.width; ··· 282 281 app.beginUndoGroup('New 2dCam and Output Comp'); 283 282 284 283 var shapeLayer = app.project.activeItem.layers.addShape(); 285 - shapeLayer.name = options.name; 284 + shapeLayer.name = options.prefix; 286 285 shapeLayer.guideLayer = true; 287 286 shapeLayer.blendingMode = BlendingMode.DIFFERENCE; 288 287 ··· 306 305 'createPath(points = [[-w,-h], [w,-h], [w,h], [-w,h]])'; 307 306 308 307 if (options.alsoCreateOutputComp) { 309 - newOutputComp(options.name, options.width, options.height, currentComp); 308 + newOutputComp(options.prefix, options.width, options.height, currentComp); 310 309 } 311 310 312 311 app.endUndoGroup(); ··· 319 318 var dialogRootGroup = dialog.addc('group', { 320 319 orientation: 'column', 321 320 }); 322 - var nameGroup = dialogRootGroup.addc('group', { 321 + var prefixGroup = dialogRootGroup.addc('group', { 323 322 orientation: 'row', 324 323 }); 325 - var nameText = nameGroup.addc('statictext', { 326 - text: 'Name:', 324 + var prefixText = prefixGroup.addc('statictext', { 325 + text: 'Prefix:', 327 326 justify: 'right', 328 327 preferredSize: [40, 20], 329 328 }); 330 - var name = nameGroup.addc('edittext', { 329 + var prefix = prefixGroup.addc('edittext', { 331 330 text: '2dCam', 332 331 active: true, 333 - characters: nameFieldWidthChars, 332 + characters: prefixFieldChars, 334 333 }); 335 334 var note = dialogRootGroup.addc('statictext', { 336 335 text: ' ', ··· 354 353 var okButton = buttonsGroup.addc('button', { 355 354 text: 'OK', 356 355 onClick: function() { 357 - var finalName = name.text; 356 + var finalPrefix = prefix.text; 358 357 dialog.close(); 359 - ok(finalName); 358 + ok(finalPrefix); 360 359 } 361 360 }); 362 361 ··· 372 371 373 372 var currentComp = app.project.activeItem; 374 373 if (!currentComp) return alert('Please select a comp'); 375 - newOutputDialog('New 2dCam Output', false, function(name) { 374 + newOutputDialog('New 2dCam Output', false, function(prefix) { 376 375 app.beginUndoGroup('New 2dCam Output Comp'); 377 - var outputComp = newOutputComp(name, null, null, currentComp); 376 + var outputComp = newOutputComp(prefix, null, null, currentComp); 378 377 app.endUndoGroup(); 379 378 if (!outputComp) { 380 379 alert('No 2dCam found'); ··· 408 407 return alert('Please select one or more comp layers'); 409 408 } 410 409 411 - newOutputDialog('Apply 2dCam Output', nonCompLayersSelected, function(name) { 410 + newOutputDialog('Apply 2dCam Output', nonCompLayersSelected, function(prefix) { 412 411 app.beginUndoGroup('Apply 2dCam Output'); 413 412 for (var i = 0; i < outputLayers.length; i++) { 414 - applyOutputToLayer(name, outputLayers[i]); 413 + applyOutputToLayer(prefix, outputLayers[i]); 415 414 } 416 415 app.endUndoGroup(); 417 416 });