• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Read Scripting Parameters within a Filter

Participant ,
Apr 22, 2013 Apr 22, 2013

Copy link to clipboard

Copied

Hello,

I'd like to have a Plug In which can read Scripting Parameters and run accordignly.

One of the code samples in the SDK is called "PoorMansTypeTool".
In its documentation it is said to be able to "Read scripting parameters".

I look into its code yet I couldn't figure how it does it.

Let's say I have a script with a variable 'a'.
The script launches a filter from the filter lists and want to pass the valu of the parameter 'a' to the filter.

How could that be done?

Are there any constraints on the parameter type, size, etc?

Has anyone tried it before?

If someone could guide me through the plug in code I'd be happy.

Thank You.

TOPICS
SDK

Views

1.5K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

May 10, 2013 May 10, 2013

// make this a function so we can hide these from harness script

main();

function main() {

// Save the current preferences

var startRulerUnits = preferences.rulerUnits;

var startTypeUnits = preferences.typeUnits;

var startDisplayDialogs = displayDialogs;

// Set Photoshop to use pixels and display no dialogs

preferences.rulerUnits = Units.PIXELS;

preferences.typeUnits = TypeUnits.PIXELS;

displayDialogs = DialogModes.NO;

// make this stuff controlled by the harness

var maxTime = 1 * 60;

var iterations = 5;

var

...

Votes

Translate

Translate
Adobe
Apr 23, 2013 Apr 23, 2013

Copy link to clipboard

Copied

Use the Dissolve filter example to see how to correctly read and write scripting parameters.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
Apr 23, 2013 Apr 23, 2013

Copy link to clipboard

Copied

Hi,

I will give it a try.

I'd be happy if you could throw some tips on the subject.

If I get it correctly, I can build a GUI based on Extended Script and pass parameters to a filter (Which has no UI).

This is great!!!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Participant ,
May 10, 2013 May 10, 2013

Copy link to clipboard

Copied

Tom,

Could you, please, shem more information about the process of moving parameters from a Script to a Plug In?

Dissolve have a UI, I want to transfer parameters a plug in with no UI.

Please, I'd really appericiate the assitance.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
May 10, 2013 May 10, 2013

Copy link to clipboard

Copied

LATEST

// make this a function so we can hide these from harness script

main();

function main() {

// Save the current preferences

var startRulerUnits = preferences.rulerUnits;

var startTypeUnits = preferences.typeUnits;

var startDisplayDialogs = displayDialogs;

// Set Photoshop to use pixels and display no dialogs

preferences.rulerUnits = Units.PIXELS;

preferences.typeUnits = TypeUnits.PIXELS;

displayDialogs = DialogModes.NO;

// make this stuff controlled by the harness

var maxTime = 1 * 60;

var iterations = 5;

var percIncrease = 20;

var timeIt = new Timer();

var tests = 0;

var errors = 0;

var eArray = new Array();

var dissolveLog = new File( "~/Desktop/Dissolve.log" );

dissolveLog.open( "w", "TEXT", "????" );

dissolveLog.writeln( "width,\theight,\tdepth,\tpercent,\tdoc create time,\tdissolve time" );

var maxWidth = 30000;

var minWidth = 256;

var incWidth = parseInt( (maxWidth - minWidth) / iterations );

if ( incWidth == 0 )

          incWidth = 1;

var maxHeight = 30000;

var minHeight = 256;

var incHeight = parseInt( (maxHeight - minHeight) / iterations );

if ( incHeight == 0 )

          incHeight = 1;

// start clean

while (documents.length) {

    activeDocument.close(SaveOptions.DONOTSAVECHANGES);

}

var d = BitsPerChannelType.EIGHT;

for ( var w = minWidth; w < maxWidth; w += incWidth ) {

          for ( var h = minHeight; h < maxHeight; h += incHeight ) {

 

                    try {

 

                              var timeImport = new Timer();

 

                              if ( d == BitsPerChannelType.EIGHT )

                                        d = BitsPerChannelType.SIXTEEN;

                              else

                                        d = BitsPerChannelType.EIGHT;

 

                              app.documents.add(UnitValue(w, "px"), UnitValue(h,"px"), undefined, "Dissolve Test", undefined, undefined, undefined, d);

 

             timeImport.stop();

 

                              if ( activeDocument.width != w )

                error++; // alert( activeDocument.width + ", " + w );

                              if ( activeDocument.height != h )

                error++; // alert( activeDocument.height + ", " + h );

                              if ( d == 16 && activeDocument.bitsPerChannel != BitsPerChannelType.SIXTEEN )

                error++; // alert( activeDocument.bitsPerChannel + ", " + d );

                              if ( d == 8 && activeDocument.bitsPerChannel != BitsPerChannelType.EIGHT )

                error++; // alert( activeDocument.bitsPerChannel + ", " + d );

                              if ( activeDocument.bitsPerChannel == BitsPerChannelType.ONE )

                error++; // alert( activeDocument.bitsPerChannel + ", " + d );

 

             FitOnScreen(); // this makes everything really slow

           

                              var historyState = activeDocument.activeHistoryState;

 

                              for ( var dPerc = 0; dPerc <= 100; dPerc += percIncrease ) {

                                        tests++;

                                        var timeDissolve = new Timer();

                                        Dissolve(dPerc);

                                        timeDissolve.stop();

                                        // WaitForRedraw(); // guess what this does to our slowness ness er

                                        dissolveLog.write(w + ",\t" + h + ",\t" + d + ", " + dPerc );

                                        dissolveLog.writeln(",\t" + timeImport.getTime() + ", " + timeDissolve.getTime() );

                 WaitForRedraw();

                                        activeDocument.activeHistoryState = historyState;

               

                if ( timeIt.getElapsed() > maxTime ) {

                    w = maxWidth + 1;

                    h = maxHeight + 1;

                    dPerc = 101;

                }

                              }

 

                    }

                    catch(e) {

                        alert(e + ":" + e.line);

                              if ( e.message.search(/cancel/i) != -1 ) {

                                        w = maxWidth + 1;

                                        h = maxHeight + 1;

                              }

                              eArray[eArray.length] = e;

                              errors++;

                              // debugger;

                    } // end catch

          } // end for height

} // end for width

dissolveLog.writeln( errors + " errors. " + tests + " tests in " + timeIt.getElapsed() + " seconds. " + tests/timeIt.getElapsed() + " tests/sec.");

dissolveLog.close();

dissolveLog.execute();

// end clean

while (documents.length) {

    activeDocument.close(SaveOptions.DONOTSAVECHANGES);

}

// Reset the application preferences

preferences.rulerUnits = startRulerUnits;

preferences.typeUnits = startTypeUnits;

displayDialogs = startDisplayDialogs;

//     1) " FAIL" for failures

//     2) " PASS" for test results OK

//     3) "  BUG" for known bugs, have the file name give the bug number

//     4) "ERROR" this comes from the harness if the script barfed/exception,

return errors == 0 ? ' PASS' : ' FAIL';

} // end function main

//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////

/****************************

  Function WaitForRedraw

  Usage: Use it to force Photoshop to redraw the screen before continuing

  Example:

       WaitForRedraw();

****************************/

function WaitForRedraw() {

          var keyID = charIDToTypeID( "Stte" );

          var desc = new ActionDescriptor();

          desc.putEnumerated( keyID, keyID, charIDToTypeID( "RdCm" ) );

          executeAction( charIDToTypeID( "Wait" ), desc, DialogModes.NO );

}

//////////////////////////////////////////////////////////////////////////////

// WaitNSeconds, slow the script down so you can watch and figure out issues

//////////////////////////////////////////////////////////////////////////////

function WaitNSeconds(seconds) {

   startDate = new Date();

   endDate = new Date();

   while ((endDate.getTime() - startDate.getTime()) < (1000 * seconds))

                    endDate = new Date();

}

//////////////////////////////////////////////////////////////////////////////

// FitOnScreen, fits the document and redraws the screen

//////////////////////////////////////////////////////////////////////////////

function FitOnScreen() {

          var id45 = charIDToTypeID( "slct" );

    var desc7 = new ActionDescriptor();

    var id46 = charIDToTypeID( "null" );

          var ref1 = new ActionReference();

          var id47 = charIDToTypeID( "Mn  " );

          var id48 = charIDToTypeID( "MnIt" );

          var id49 = charIDToTypeID( "FtOn" );

          ref1.putEnumerated( id47, id48, id49 );

          desc7.putReference( id46, ref1 );

          executeAction( id45, desc7, DialogModes.NO );

}

//////////////////////////////////////////////////////////////////////////////

// Dissolve, given a percentage

//////////////////////////////////////////////////////////////////////////////

function Dissolve( dPercent ) {

          var id18 = stringIDToTypeID( "d9543b0c-3c91-11d4-97bc-00b0d0204936" );

    var desc3 = new ActionDescriptor();

    var id19 = charIDToTypeID( "Amnt" );

    var id20 = charIDToTypeID( "#Prc" );

    desc3.putUnitDouble( id19, id20, dPercent );

    var id21 = charIDToTypeID( "disP" );

    var id22 = charIDToTypeID( "mooD" );

    var id23 = charIDToTypeID( "moD1" );

    desc3.putEnumerated( id21, id22, id23 );

          executeAction( id18, desc3, DialogModes.NO );

}

//////////////////////////////////////////////////////////////////////////////

// DissolveOld, our old scripting params was this

// an interesting test would be to see the old plug-in vs the current one

//////////////////////////////////////////////////////////////////////////////

function DissolveOld( dPercent ) {

    var id12 = charIDToTypeID( "disS" );

    var desc3 = new ActionDescriptor();

    var id13 = charIDToTypeID( "Amnt" );

    var id14 = charIDToTypeID( "#Prc" );

    desc3.putUnitDouble( id13, id14, dPercent );

    var id15 = charIDToTypeID( "disP" );

    var id16 = charIDToTypeID( "mooD" );

    var id17 = charIDToTypeID( "moD1" );

    desc3.putEnumerated( id15, id16, id17 );

    executeAction( id12, desc3, DialogModes.NO );

}

//////////////////////////////////////////////////////////////////////////////

// Library for timing things in JavaScript

//////////////////////////////////////////////////////////////////////////////

function Timer() {

          // member variables

          this.startTime = new Date();

          this.endTime = new Date();

 

          // member functions

 

          // reset the start time to now

          this.start = function () { this.startTime = new Date(); }

 

          // reset the end time to now

          this.stop = function () { this.endTime = new Date(); }

 

          // get the difference in milliseconds between start and stop

          this.getTime = function () { return (this.endTime.getTime() - this.startTime.getTime()) / 1000; }

 

          // get the current elapsed time from start to now, this sets the endTime

          this.getElapsed = function () { this.endTime = new Date(); return this.getTime(); }

}

// end Dissolve.jsx

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines