Skip to main content
March 18, 2010
Answered

Accepts Lights+Shadows via expression or Script

  • March 18, 2010
  • 2 replies
  • 4138 views

Hi

does anybody know an expression/script to turn on/off the above mentioned properties.That would be quite useful.

cheers

This topic has been closed for replies.
Correct answer Dan Ebberts

Something like this should get you headed in the right direction:

{

  function shadowsOn(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsShadows.setValue(true);
    }
  }

  function shadowsOff(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsShadows.setValue(false);
    }
  }

  function lightsOn(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsLights.setValue(true);
    }
  }

  function lightsOff(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsLights.setValue(false);
    }

  }

  function createUI(thisObj) {
    var myPanel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "My Tools", [100, 100, 300, 300]);
    myPanel.shadowsOnBtn = myPanel.add("button", [10, 10, 150, 30], "Accept Shadows on");
    myPanel.shadowsOffBtn = myPanel.add("button", [10, 50, 150, 70], "Accept Shadows off");
    myPanel.lightsOnBtn = myPanel.add("button", [10, 90, 150, 110], "Accept Lights on");
    myPanel.lightsOffBtn = myPanel.add("button", [10, 130, 150, 150], "Accept Lights off");
    myPanel.shadowsOnBtn.onClick = shadowsOn;
    myPanel.shadowsOffBtn.onClick = shadowsOff;
    myPanel.lightsOnBtn.onClick = lightsOn;
    myPanel.lightsOffBtn.onClick = lightsOff;
    return myPanel;
  }

  var myToolsPanel = createUI(this);
  myToolsPanel.show();

}

Dan

2 replies

Inspiring
March 25, 2010

When you guys are done with this, please post it on AE Enhancers or AE Scripts!

Participating Frequently
February 21, 2023

Don't work in AE 2023 

or am I doing something wrong? create notepad file .jsx

 

function LightsOn(){

    var myLayers = app.project.activeItem.selectedLayers;

    for (var i = 0; i < myLayers.length; i++){

      if (myLayers instanceof AVLayer && myLayers.threeDLayer)

      myLayers.acceptsLights.setValue(true);

    }

  }

 

 

 

  function lightsOff(){

     var myLayers = app.project.activeItem.selectedLayers;

    for (var i = 0; i < myLayers.length; i++){

      if (myLayers instanceof AVLayer && myLayers.threeDLayer)

      myLayers.acceptsLights.setValue(false);

    }

  }

Dan Ebberts
Community Expert
Community Expert
February 21, 2023

They just need a little tidying up:

function lightsOn(){
  var myLayers = app.project.activeItem.selectedLayers;
  for (var i = 0; i < myLayers.length; i++){
    if (myLayers[i] instanceof AVLayer && myLayers[i].threeDLayer){
      myLayers[i].acceptsLights.setValue(true);
    }
  }
}

function lightsOff(){
  var myLayers = app.project.activeItem.selectedLayers;
  for (var i = 0; i < myLayers.length; i++){
    if (myLayers[i] instanceof AVLayer && myLayers[i].threeDLayer){
      myLayers[i].acceptsLights.setValue(false);
    }
  }
}
Dan Ebberts
Community Expert
Community Expert
March 18, 2010

This simple example script turns off accept lights and shadows for selected layers (it assumes those properties haven't been keyframed):

{
  var myLayers = app.project.activeItem.selectedLayers;
  for (var i = 0; i < myLayers.length; i++){
    myLayers.acceptsShadows.setValue(false);
    myLayers.acceptsLights.setValue(false);
  }
}

Dan

March 19, 2010

Hi Dan

thx for that.

i'm trying to create a dockable panel for this script.

basically i'd like only 2 buttons=> accept shadows >option with on or off

                                                 accept lights>option with on or off

//that's what i have so far

function createUI(thisObj) {

var myPanel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "My Tools",

[100, 100, 300, 300]);

myPanel.add("button", [10, 10, 150, 30], "Accept Shadows on");

return myPanel; }

var myToolsPanel = createUI(this);

How can i add more buttons to this?

How can i make the buttons run the script?

cheers

Dan Ebberts
Community Expert
Dan EbbertsCommunity ExpertCorrect answer
Community Expert
March 19, 2010

Something like this should get you headed in the right direction:

{

  function shadowsOn(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsShadows.setValue(true);
    }
  }

  function shadowsOff(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsShadows.setValue(false);
    }
  }

  function lightsOn(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsLights.setValue(true);
    }
  }

  function lightsOff(){
    var myLayers = app.project.activeItem.selectedLayers;
    for (var i = 0; i < myLayers.length; i++){
      myLayers.acceptsLights.setValue(false);
    }

  }

  function createUI(thisObj) {
    var myPanel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "My Tools", [100, 100, 300, 300]);
    myPanel.shadowsOnBtn = myPanel.add("button", [10, 10, 150, 30], "Accept Shadows on");
    myPanel.shadowsOffBtn = myPanel.add("button", [10, 50, 150, 70], "Accept Shadows off");
    myPanel.lightsOnBtn = myPanel.add("button", [10, 90, 150, 110], "Accept Lights on");
    myPanel.lightsOffBtn = myPanel.add("button", [10, 130, 150, 150], "Accept Lights off");
    myPanel.shadowsOnBtn.onClick = shadowsOn;
    myPanel.shadowsOffBtn.onClick = shadowsOff;
    myPanel.lightsOnBtn.onClick = lightsOn;
    myPanel.lightsOffBtn.onClick = lightsOff;
    return myPanel;
  }

  var myToolsPanel = createUI(this);
  myToolsPanel.show();

}

Dan