Skip to main content
Gibson Editions
Inspiring
July 28, 2023
Answered

Check empty curves function broken photoshop 24.7.0

  • July 28, 2023
  • 1 reply
  • 1575 views

I have this function as part of a script for finalising photoshop files. It checks for any points on the curve

 

this.checkCurve = function(index){
    
 //if(app.activeDocument.activeLayer.kind !=  LayerKind.CURVES ) return;
var ref = new ActionReference();
 ref.putIndex(s2t("layer"), index)
var rawDesc = executeActionGet( ref ).getList( s2t( 'adjustment' ) ).getObjectValue( 0 ).getData( s2t( 'legacyContentData' ) );
var pointer = 2;                                            // used to read rawData similar to reading a file
var flag = rawDesc.charCodeAt( pointer );       // char at offset 2 always == 1 so use to validate data
if( flag != 1 ) forceError;                             // unknown problem with rawData
   pointer = 6;// update pointer to BCD byte
   var bcd = rawDesc.charCodeAt( pointer );
   if( bcd < 0 || bcd > 15 ) forceError;// check for valid value
   if( bcd == 0 ) return false;// an empty adjustment - no curves to process
   return true;
 }

. The current version of photoshop doesnt seem to allow you to get the rawData. Anybody got some sort of work around or way of determining if a curve has no points on any of composite and component curves? 

This topic has been closed for replies.
Correct answer c.pfaffenbichler

Does this help? 

// check if curves layer has been changed at all;
// based on code by michael l hale;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") ); 
var layerDesc = executeActionGet(ref);
try {
var aList = layerDesc.getList(stringIDToTypeID("adjustment"));
var listStuff = evaluateList (aList);
var listStuff2 = evaluateList (listStuff[0].getList(stringIDToTypeID("adjustment")))
var aaa = evaluateList(listStuff2[0].getList(stringIDToTypeID("curve")));
} catch (e) {
	alert ("either not a curves adjustment layer or at unedited default settings")
}
};
////////////////////////////////////
////// get list values //////
function evaluateList (aList) {
var listStuff = new Array;
for (var x = 0; x < aList.count; x++) {
var theType = aList.getType(x);
switch (theType) {
case DescValueType.ALIASTYPE:
listStuff.push( aList.getPath(x));
break;
case DescValueType.BOOLEANTYPE:
listStuff.push( aList.getBoolean(x));
break;
case DescValueType.CLASSTYPE:
listStuff.push( aList.getClass(x));
break;
case DescValueType.DOUBLETYPE:
listStuff.push( aList.getDouble(x));
break;
case DescValueType.ENUMERATEDTYPE:
listStuff.push( aList.getEnumerationValue(x));
break;
case DescValueType.INTEGERTYPE:
listStuff.push( aList.getInteger(x));
break;
case DescValueType.LISTTYPE:
listStuff.push( aList.getList(x));
break;
case DescValueType.OBJECTTYPE:
listStuff.push( (aList.getObjectValue(x)));
break;
case DescValueType.RAWTYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.REFERENCETYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.STRINGTYPE:
listStuff.push( aList.getString(x));
break;
case DescValueType.UNITDOUBLE:
listStuff.push( aList.getUnitDoubleValue(x));
break;
default: 
break;
};
};
return listStuff
};

1 reply

c.pfaffenbichler
Community Expert
c.pfaffenbichlerCommunity ExpertCorrect answer
Community Expert
August 21, 2023

Does this help? 

// check if curves layer has been changed at all;
// based on code by michael l hale;
// 2023, use it at your own risk;
if (app.documents.length > 0) {
var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") ); 
var layerDesc = executeActionGet(ref);
try {
var aList = layerDesc.getList(stringIDToTypeID("adjustment"));
var listStuff = evaluateList (aList);
var listStuff2 = evaluateList (listStuff[0].getList(stringIDToTypeID("adjustment")))
var aaa = evaluateList(listStuff2[0].getList(stringIDToTypeID("curve")));
} catch (e) {
	alert ("either not a curves adjustment layer or at unedited default settings")
}
};
////////////////////////////////////
////// get list values //////
function evaluateList (aList) {
var listStuff = new Array;
for (var x = 0; x < aList.count; x++) {
var theType = aList.getType(x);
switch (theType) {
case DescValueType.ALIASTYPE:
listStuff.push( aList.getPath(x));
break;
case DescValueType.BOOLEANTYPE:
listStuff.push( aList.getBoolean(x));
break;
case DescValueType.CLASSTYPE:
listStuff.push( aList.getClass(x));
break;
case DescValueType.DOUBLETYPE:
listStuff.push( aList.getDouble(x));
break;
case DescValueType.ENUMERATEDTYPE:
listStuff.push( aList.getEnumerationValue(x));
break;
case DescValueType.INTEGERTYPE:
listStuff.push( aList.getInteger(x));
break;
case DescValueType.LISTTYPE:
listStuff.push( aList.getList(x));
break;
case DescValueType.OBJECTTYPE:
listStuff.push( (aList.getObjectValue(x)));
break;
case DescValueType.RAWTYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.REFERENCETYPE:
listStuff.push( aList.getReference(x));
break;
case DescValueType.STRINGTYPE:
listStuff.push( aList.getString(x));
break;
case DescValueType.UNITDOUBLE:
listStuff.push( aList.getUnitDoubleValue(x));
break;
default: 
break;
};
};
return listStuff
};
Participating Frequently
August 22, 2023

thank you ! but for me only the alert is shown 

Participating Frequently
September 10, 2023

Mind you, that’s just for the composite channel. 

If you edited individal channels you need to amend the code further. 


works fine for me ! thanks