Skip to main content
Participant
September 7, 2015
Answered

Retrieve Artboard reference of active nested layer

  • September 7, 2015
  • 1 reply
  • 767 views

Hi,

I am looking for a way to get the artboard reference of a currently active layer nested into it. I was browsing around, but I am still quite confused about how to proceed.

Any help very appreciated!

Thank you

This topic has been closed for replies.
Correct answer uberplugins

I'm not sure, but maybe it will help you...

var doc = activeDocument,
	currentArtboard = getActiveArtboard();

/* ======================== */
alert(currentArtboard);
/* ======================== */

function getActiveArtboard() {
	while(true) {
		if (isArtboardLayer()) {
			return doc.activeLayer
		}
		selectForwardLayer();
	}
}

function isArtboardLayer() {
	var ref = new ActionReference();
	ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
	var isArtboardLayer = executeActionGet(ref).getBoolean(stringIDToTypeID("artboardEnabled"));
	return isArtboardLayer
}

function selectForwardLayer() {
	var desc = new ActionDescriptor();
	var ref = new ActionReference();
	ref.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Frwr'));
	desc.putReference(charIDToTypeID('null'), ref);
	desc.putBoolean(charIDToTypeID('MkVs'), false);
	executeAction(charIDToTypeID('slct'), desc, DialogModes.NO);
}

1 reply

uberplugins
uberpluginsCorrect answer
Inspiring
September 7, 2015

I'm not sure, but maybe it will help you...

var doc = activeDocument,
	currentArtboard = getActiveArtboard();

/* ======================== */
alert(currentArtboard);
/* ======================== */

function getActiveArtboard() {
	while(true) {
		if (isArtboardLayer()) {
			return doc.activeLayer
		}
		selectForwardLayer();
	}
}

function isArtboardLayer() {
	var ref = new ActionReference();
	ref.putEnumerated(charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
	var isArtboardLayer = executeActionGet(ref).getBoolean(stringIDToTypeID("artboardEnabled"));
	return isArtboardLayer
}

function selectForwardLayer() {
	var desc = new ActionDescriptor();
	var ref = new ActionReference();
	ref.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Frwr'));
	desc.putReference(charIDToTypeID('null'), ref);
	desc.putBoolean(charIDToTypeID('MkVs'), false);
	executeAction(charIDToTypeID('slct'), desc, DialogModes.NO);
}
Participant
September 8, 2015

Exactly what I was looking for. Thank you nvkzNemo‌ !

uberplugins
Inspiring
September 8, 2015

Or this... better a little

var doc = activeDocument,
	l = doc.activeLayer,
	p = l.parent,
	key = false,
	currentArtboard = getActiveArtboard();

/* ========================= */
alert(currentArtboard);
doc.activeLayer = l;
/* ========================= */

function getActiveArtboard() {
	try{
    	while(!key) {
			doc.activeLayer = p;
			var ref = new ActionReference();
			ref.putEnumerated(charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt'));
			key = executeActionGet(ref).getBoolean(stringIDToTypeID("artboardEnabled"));

			if (key) {
				return p
			}

			p = p.parent;
    	}
	}catch (e) {
		alert('That layer without artboard');
		return undefined
	}
}