Копирование маркеров со слоя в маркеры композиции

mike

New Member
Есть скрипт rd_CopyMarkers.jsx
http://www.redefinery.com/ae/view.php?item=rd_CopyMarkers
Он копирует маркеры между слоями.
Какая команда будет для замены "создания маркера слоя" на "создание маркера композиции" с теми же параметрами?

кажется вот эти строчки

var comp = app.project.activeItem;
var layer = comp.selectedLayers[0];
var markers = layer.property("marker");
comp.selectedLayers[1].property("marker").setValueAtTime(markers.keyTime(i), markers.keyValue(i));
Может кто подскажет?
Например в Add Edit Markers.jsxbin
http://aescripts.com/add-edit-markers/
скрипт создает такие маркеры, но я не знаю как залезть внутрь jsxbin )
 

Rey

New Member
Нет такой команды, маркера композиции не доступны из под скрипта.
Можно создать только маркер пустышку. Для этого надо убрать выделения со всех слоев и выполнить команду меню "Add Marker"
 

mike

New Member
но скрипт то создает как то - Add Edit Markers
как же он это делает, если нельзя?
 

Rey

New Member
Я же написал как это сделать во втором и третьем предложении. C помощью "костыля" вызова команды меню.

app.executeCommand(app.findMenuCommandId("Add Marker"));
 

mike

New Member
но если я снимаю выделение со слоев
тогда переменные selectedLayers[*] перестают работать
как же быть?
 

Rey

New Member
Скопировать в массив можно
или можно сначала создать массив маркеров (достаточно только времени),
а потом снять выделения со всех слоёв,
прыгать по времени из массива и
добавлять маркер в композицию.
 

monter

Человечище
Add Edit Markers.jsx
Код:
var aes_aem_data;


function CreateEditMarkers(thisObj) {
   var myPalette;


   function buildUI1(thisObj) {
      var res, myPal;
      if (thisObj instanceof Panel) {
         myPal = thisObj;
      }
      else {
         myPal = new Window("palette", aes_aem_data.scriptName + " v" + aes_aem_data.scriptVersion, undefined, {
            resizeable: false
         });
      }
      if (myPal != null) {
         res = "group { \
            alignment: ['left','top'], \
            alignChildren: ['left','top'], \
            orientation: 'column', \
            layerGrp: Group {\
            alignment: ['fill','fill'], \
            alignChildren: ['left','top'], \
            spacing: 0 \
            orientation: 'row', \
            addLayer: Checkbox {text:'Add layer markers', preferredSize: [125,30]}, \
            inOut: DropDownList {properties:{items:['in & out','in','out']}, preferredSize: [90,20]}, \
            }\
            compGrp: Group {\
            alignment: ['fill','fill'], \
            alignChildren: ['left','top'], \
            spacing: 0 \
            orientation: 'row', \
            addComp: Checkbox {text:'Add comp markers', preferredSize: [125,30]}, \
            inOut: DropDownList {properties:{items:['in & out','in','out']}, preferredSize: [90,20]}, \
            }\
            btnsGrp: Group {\
            alignment: ['fill','fill'], \
            alignChildren: ['fill','top'], \
            orientation: 'row', \
            help: Button {text: '?', alignment: ['left','top'],preferredSize: [30,30]} , \
            doIt: Button {text: 'Do It!', alignment: ['right','top']} , \
            }\
            }";
         myPal.grp = myPal.add(res);
         myPal.layout.layout(true);
         myPal.layout.resize();
         myPal.onResizing = myPal.onResize = function () {
            this.layout.resize();
         };
         myPal.grp.layerGrp.inOut.selection = myPal.grp.compGrp.inOut.selection = 0;
         if (app.settings.haveSetting("aescripts", "AddEditMarkers_LayerInOut")) myPal.grp.layerGrp.inOut.selection = app.settings.getSetting("aescripts", "AddEditMarkers_LayerInOut");
         if (app.settings.haveSetting("aescripts", "AddEditMarkers_CompInOut")) myPal.grp.compGrp.inOut.selection = app.settings.getSetting("aescripts", "AddEditMarkers_CompInOut");
         if (app.settings.haveSetting("aescripts", "AddEditMarkers_LayerMarker")) myPal.grp.layerGrp.addLayer.value = !(app.settings.getSetting("aescripts", "AddEditMarkers_LayerMarker") == "false");
         else myPal.grp.layerGrp.addLayer.value = false;
         if (app.settings.haveSetting("aescripts", "AddEditMarkers_CompMarker")) myPal.grp.compGrp.addComp.value = !(app.settings.getSetting("aescripts", "AddEditMarkers_CompMarker") == "false");
         else myPal.grp.compGrp.addComp.value = false;
         myPal.grp.btnsGrp.doIt.onClick = function () {
            saveSettings(myPal);
            doIt(myPal);
         };
         myPal.onClose = function () {
            saveSettings(myPal);
         };
         myPal.grp.btnsGrp.help.onClick = function () {
            alert(aes_aem_data.scriptName + " v" + aes_aem_data.scriptVersion + "\n\xa92013 Lloyd Alvarez http://aescripts.com\n\n" + "Will place markers at the in and out points of the selected layers or all layers in the comp if no layers are selected. The markers will be placed on the layers or the comp depending on the user preference");
         };
      }
      return myPal;
   }


   function saveSettings(thePal) {
      var layerInOut, compInOut, markLayer, markComp;
      markLayer = thePal.grp.layerGrp.addLayer.value;
      layerInOut = thePal.grp.layerGrp.inOut.selection.index;
      markComp = thePal.grp.compGrp.addComp.value;
      compInOut = thePal.grp.compGrp.inOut.selection.index;
      app.settings.saveSetting("aescripts", "AddEditMarkers_LayerMarker", markLayer);
      app.settings.saveSetting("aescripts", "AddEditMarkers_LayerInOut", layerInOut);
      app.settings.saveSetting("aescripts", "AddEditMarkers_CompMarker", markComp);
      app.settings.saveSetting("aescripts", "AddEditMarkers_CompInOut", compInOut);
   }


   function doIt(thePal) {
      var myLayer, i, layerInOut, compInOut, myComp, markLayer, markComp, isSelLayers, selLayers, counter, saveCompTime, myIn, myOut, myMarker, numLayers;
      markLayer = thePal.grp.layerGrp.addLayer.value;
      layerInOut = thePal.grp.layerGrp.inOut.selection;
      markComp = thePal.grp.compGrp.addComp.value;
      compInOut = thePal.grp.compGrp.inOut.selection;
      app.beginUndoGroup(aes_aem_data.scriptName);
      myComp = app.project.activeItem;
      if (!markLayer && !markComp) {
         alert("Please select at least one option");
         return;
      }
      if ((myComp == null) || !(myComp instanceof CompItem)) {
         alert("Please select a comp");
         return;
      }
      isSelLayers = myComp.selectedLayers.length > 0;
      numLayers = isSelLayers ? (myComp.selectedLayers.length - 1) : myComp.numLayers;
      i = isSelLayers ? 0 : 1;
      selLayers = new Array();
      counter = 0;
      for (i; i <= numLayers; i++) {
         selLayers[counter] = isSelLayers ? myComp.selectedLayers[i] : myComp.layer(i);
         counter++;
      }
      for (i = 0; i < selLayers.length; i = i + 1) {
         selLayers[i].selected = false;
      }
      saveCompTime = myComp.time;
      for (i = 0; i < selLayers.length; i = i + 1) {
         myLayer = selLayers[i];
         myIn = myLayer.inPoint;
         myOut = myLayer.outPoint;
         myMarker = new MarkerValue("");
         if (markLayer) {
            if (layerInOut < 2) myLayer.property("Marker").setValueAtTime(myIn, myMarker);
            if ((layerInOut == 0) || (layerInOut == 2)) myLayer.property("Marker").setValueAtTime(myOut, myMarker);
         }
         if (markComp) {
            if (compInOut < 2) {
               myComp.time = myIn;
               app.executeCommand(2157);
            }
            if ((compInOut == 0) || (compInOut == 2)) {
               myComp.time = myOut;
               app.executeCommand(2157);
            }
         }
      }
      if (isSelLayers) {
         for (i = 0; i < selLayers.length; i = i + 1) {
            selLayers[i].selected = true;
         }
      }
      myComp.time = saveCompTime;
      app.endUndoGroup;
   }
   myPalette = buildUI1(thisObj);
   if ((myPalette != null) && (myPalette instanceof Window)) {
      myPalette.show();
   }
}
aes_aem_data = {
   scriptName: "Add Edit Markers",
   scriptVersion: "1.0"
};
CreateEditMarkers(this);
 

mike

New Member
Код:
var myComp = app.project.activeItem;
var myLayer = myComp.selectedLayers[0];
app.beginUndoGroup("Copy Markers");
saveCompTime = myComp.time;
var MarkersArr = [];
for (var i = 1; i <= myLayer.property("Marker").numKeys; i++)
	{
		MarkersArr[MarkersArr.length] = myLayer.property("Marker").keyTime(i);
	}
myLayer.selected = false;
for (var i = 0; i < myLayer.property("Marker").numKeys; i++)
	{
		myComp.time = MarkersArr[i];
		app.executeCommand(app.findMenuCommandId("Add Marker"));
	}
myComp.time = saveCompTime;
myLayer.selected = true;
app.endUndoGroup();
 
Верх