ExtendScript: Bekerja dengan Lapisan

<= Artikel sebelumnya ExtendScript + Expression





Jadi, kami memiliki tata letak untuk judul yang siap. Kami bergerak menuju peregangan rumah. Kami hanya perlu menambahkan skrip, melengkapinya dengan metode menyalin model ke tempat kejadian. 





Kami masuk ke metode createTitres dan segera setelah menambahkan adegan, kami memulai siklus, melintasi array dengan data judul.





function createTitres(data) {
   var scenesData = getScenesData();

   for(var i = 0; i < scenesData.length; i++) {
       var scene = getScene(scenesData[i]);

       for (var j = 0; j < data.length; j++) {
           var titreName = 'titre-' + j + '-' + scenesData[i].type;
           var layer = scene.layers.byName(titreName);
       }
   }
}
      
      



Dalam perulangan, pertama-tama kami mencoba menemukan judul di atas panggung. Untuk melakukan ini, kami merujuk ke properti lapisan komposisi dan metode byName -nya . Mengapa kita melakukan ini, kita akan membahasnya nanti. Untuk saat ini, mari kita lihat situasi di mana metode mengembalikan null kepada kita , yang berarti tidak ada lapisan dengan nama tersebut.





if (!layer) {
      var modelName = 'ModelTitre_' + data[j].type + '_' + scenesData[i].type;
      var item = getTitreComp(modelName);
   }

//………………………………………………………………………………………//

function getTitreComp(modelName) {
   var item = getItem(modelName, CompItem);

   if (!item) {
       alert('  ' + modelName);
       return null;
   }

   return item.duplicate();
}
      
      



Dalam metode getTitreComp, kita menemukan model judul dan, jika kita belum menemukannya, kembalikan null . Jika model ditemukan, kami mengembalikan duplikatnya. Selanjutnya, kami mengganti nama duplikat dan menambahkannya ke adegan menggunakan metode layers.add , yang mengembalikan kami layer dengan duplikat.





if (item) {
   item.name = titreName;
   layer = scene.layers.add(item);
}
      
      



. editLayer, , ( ) ModelScene,





, startTime ,





var scene = getScene(scenesData[i]);
var startTime = 0;
      
      



editLayer





, getScenesData , layers, .





data.push({
   type: item.name.split('_')[1],
   width: item.width,
   height: item.height,
   frameRate: item.frameRate,
   duration: item.duration,
   layers: item.layers
});
      
      



createTitres . editLayer





if (item) {
   item.name = titreName;
   layer = scene.layers.add(item);
   var modelLayer = scenesData[i].layers.byName(modelName);
   startTime = editLayer(layer, startTime, modelLayer);
}
      
      



editLayer





function editLayer(layer, startTime, modelLayer) {
   if (modelLayer) {
       //   -
   } else {
      //   
   }
}
      
      



, - , . , .





layer.startTime = startTime;
layer.outPoint = startTime + 5;
      
      



, .





,





layer.label = modelLayer.label;
layer.startTime = startTime;
var layerDuration = modelLayer.outPoint - modelLayer.startTime;
layer.outPoint = startTime + layerDuration;
      
      



, . , . , , . startTime, layer.outPoint, . 









function editLayer(layer, startTime, modelLayer) {
   layer.startTime = startTime;

   if (modelLayer) {
       layer.label = modelLayer.label;
       var layerDuration = modelLayer.outPoint - modelLayer.startTime;
       layer.outPoint = startTime + layerDuration;
   } else {
       layer.outPoint = startTime + 5;
   }

   return layer.outPoint;
}
      
      



createTitres. Expressions . , ModelScene_1x1. scene-1x1





startTime = editLayer(layer, startTime, modelLayer);
changeExpression(
   item,
   'ModelScene_' + scenesData[i].type,
   'scene-' + scenesData[i].type
);

//................................................................

function changeExpression(comp, search, replacement) {
   for (var i = 1; i <= comp.numLayers; i++) {
       var layer = comp.layer(i);
       var propGroup = layer.property('ADBE Transform Group');

       for (var j = 1; j <= propGroup.numProperties; j++) {
           var prop = propGroup.property(j);
           if (prop.expression) {
               prop.expression = prop.expression.replace(
                   new RegExp(search, 'g'),
                   replacement
               )
           }
       }
   }
}
      
      



changeExpression , . . numLayers. . ADBE Transform Group ( After Effects   ).  , numProperties. , ModelScene_1x1 titre-1x1.





. , , .





changeExpression(
   item,
   'ModelScene_' + scenesData[i].type,
   'scene-' + scenesData[i].type
);
setText(item.layers.byName('reference_text'), data[j].text)

//................................................................

function setText(layer, text) {
   if (layer) {
      var property = layer.text.property("Source Text");
      var value = property.value;
      value.text = text;
      property.setValue(value);
   }
}
      
      



setText reference_text, , .





setText SourceText, text, , , .





. , .





for (var j = 0; j < data.length; j++) {
   var titreName = 'titre-' + j + '-' + scenesData[i].type;
   var layer = scene.layers.byName(titreName);

   if (!layer) {
       var modelName = //....
       //....
   } else {
       setText(
           layer.source.layers.byName('reference_text'),
           data[j].text
       );
   }
}
      
      



. source, , .





. .





#simple   
   simple

#simple  simple      

#double   
   double
      
      



.





, . 





.





, refernce_text.





, , , . , . , . . , .









Dokumentasi tentang bekerja dengan lapisan di ExtendScript di sini .





Terima kasih atas perhatiannya. Jika pelajaran ini terbukti bermanfaat bagi seseorang, alangkah baiknya mempelajari proyek di mana pembaca menerapkan keterampilan ini.





<= Artikel sebelumnya ExtendScript + Expression








All Articles