Ruler Tool end points script access

Discussion of Photoshop Scripting, Photoshop Actions and Photoshop Automation in General

Moderators: Tom, Kukurykus

david

Ruler Tool end points script access

Post by david »

The straighten tool in CS5 uses a script, so I just extracted the relevant parts to get the end points of the Ruler Tool.


Code: Select allvar g_StackScriptFolderPath = app.path + "/"+ localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts") + "/"
                              + localize("$$$/Private/Exposuremerge/StackScriptOnly=Stack Scripts Only/");

$.evalFile( g_StackScriptFolderPath + "Geometry.jsx");

$.evalFile(g_StackScriptFolderPath + "Terminology.jsx");



function getRulerEndpoints()
{
   var desc1 = new ActionDescriptor();
   var ref1 = new ActionReference();
   ref1.putProperty( classProperty, krulerPointsStr );
   ref1.putEnumerated( classDocument, typeOrdinal, enumTarget );
   desc1.putReference( typeNULL, ref1 );

   var result = executeAction( eventGet, desc1, DialogModes.NO );

   if  (result.hasKey( kpointsStr ))
   {
      var i, ptList = result.getList( kpointsStr );
      // The middle item in the list is an unused "midpoint" (currently == p0)
      var p0 = getUnitPoint( ptList.getObjectValue(0) );
      var p1 = getUnitPoint( ptList.getObjectValue(2) );
      if (p0.fX < p1.fX)
         return [p0, p1];
      else
         return [p1, p0];
   }
   else
      return [];
}

function getUnitPoint(desc)
{
   var x = desc.getUnitDoubleValue( kxStr );
   var y = desc.getUnitDoubleValue( kyStr );
   return new TPoint( x, y );
}

Professional AI Audio Generation within Adobe Premiere Pro - Download Free Plugin here

Mike Hale

Ruler Tool end points script access

Post by Mike Hale »

Nice, I removed the need the evalFile calls

Code: Select allfunction getRulerEndpoints(){
   var desc = new ActionDescriptor();
   var ref = new ActionReference();
   ref.putProperty( charIDToTypeID('Prpr'),charIDToTypeID('RrPt') );
   ref.putEnumerated( charIDToTypeID('Dcmn'), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );
   desc.putReference( charIDToTypeID('null'), ref );
   var result = executeAction( charIDToTypeID('getd'), desc, DialogModes.NO );
   if  (result.hasKey( charIDToTypeID('Pts ') )){
      var i, ptList = result.getList( charIDToTypeID('Pts ') );
      // The middle item in the list is an unused "midpoint" (currently == p0)
      var p0 = getUnitPoint( ptList.getObjectValue(0) );
      var p1 = getUnitPoint( ptList.getObjectValue(2) );
      if (p0.fX < p1.fX)
         return [p0, p1];
      else
         return [p1, p0];
   }
   else
      return [];
};
function getUnitPoint(desc){
   var x = desc.getUnitDoubleValue( charIDToTypeID('X   ') );
   var y = desc.getUnitDoubleValue( charIDToTypeID('Y   ') );
   function TPoint( x, y ){
      this.fX = x;
      this.fY = y;
   }
   return new TPoint( x, y );
};