-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvieraLibrary.jsx
274 lines (214 loc) · 6.88 KB
/
vieraLibrary.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
/*
---------------------------------------------------------------------------
Various functions use throughout these PS scripts.
Evan Viera -- [email protected]
---------------------------------------------------------------------------
*/
/*
-------------------------------------------------------------
Layer is the kind of layer you paint on
-------------------------------------------------------------
*/
function validateLayer( __layer )
{
if ( ( __layer.kind == LayerKind.NORMAL ) &&
( __layer.typename == "ArtLayer" ) &&
( __layer.visible == true) ) {
return true;
}
return false;
}
/*
-------------------------------------------------------------
Returns index of layer
-------------------------------------------------------------
*/
function getIndex( __selectedLayer )
{
var index = 0;
while ( __selectedLayer.parent.layers[ index ] != __selectedLayer )
{
index++;
}
return index;
}
/*
------------------------------------------------
Recursively collects nested layers into an array.
------------------------------------------------
*/
function collectLayersBelow( __index, __parent )
{
var _collectedLayers = [ ];
for ( var i = __index; i < __parent.layers.length; i++ )
{
var currentLayer = __parent.layers[ i ];
var isvalid = validateLayer( currentLayer );
if ( currentLayer.typename == "LayerSet" )
{
collectLayersBelow( 0, currentLayer );
} else if ( isvalid == true )
{
_collectedLayers.push( currentLayer );
currentLayer.allLocked = false;
}
}
return _collectedLayers;
}
/*
------------------------------------------------
Collects clipping layers into an array If it
finds an layerset, then CollectLayersBelow.
------------------------------------------------
*/
function collectClippingLayers( __index, __parent )
{
var _collectedLayers = [ ];
var currentLayer = __parent.layers[ __index ];
while ( currentLayer.grouped == true )
{
// If current layer is a folder (LayerSet) then collectLayersBelow
if ( currentLayer.typename == "LayerSet" )
{
var layersFromSet = collectLayersBelow( 0, currentLayer );
_collectedLayers.push( layersFromSet );
}
else if ( currentLayer.typename == "ArtLayer" )
{
_collectedLayers.push( currentLayer );
}
currentLayer = layerParent.layers[ ++__index ];
}
return _collectedLayers;
}
// ---------------------------------------------------------------------------
//
// Executes actions for all layers in array
//
// ---------------------------------------------------------------------------
function copyAndMergeSelectedLayer( __selectedLayer, __collectedLayers )
{
for ( var i = 0; i < __collectedLayers.length; i++ )
{
var duplicatedLayer = __selectedLayer.duplicate( __collectedLayers[ i ],
ElementPlacement.PLACEBEFORE );
duplicatedLayer.grouped = true;
duplicatedLayer.merge( );
}
}
/*
---------------------------------------------------------------------------
Proof - Copy and Paste
---------------------------------------------------------------------------
*/
function proofCopy( )
{
doc.selection.selectAll( );
doc.selection.copy( true );
}
function proofPaste( )
{
var proof = doc.paste( true );
proof.name = "PROOF";
proof.move( doc.layers[ 0 ], ElementPlacement.PLACEBEFORE );
proof.visible = false;
}
/*
------------------------------------------------
Converts RGB to Mask
This was generated using the script listener,
it will convert the RGB channels into a matte.
------------------------------------------------
*/
function convertRGBToMask( )
{
var doc = activeDocument;
// Load Red channel to selection
doc.selection.load( doc.channels.getByName( 'Red' ), SelectionType.REPLACE );
doc.selection.load( doc.channels.getByName( 'Green' ), SelectionType.EXTEND );
doc.selection.load( doc.channels.getByName( 'Blue' ), SelectionType.EXTEND );
// Create mask from selection
var idMk = charIDToTypeID( "Mk " );
var desc156 = new ActionDescriptor();
var idNw = charIDToTypeID( "Nw " );
var idChnl = charIDToTypeID( "Chnl" );
desc156.putClass( idNw, idChnl );
var idAt = charIDToTypeID( "At " );
var ref77 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idChnl = charIDToTypeID( "Chnl" );
var idMsk = charIDToTypeID( "Msk " );
ref77.putEnumerated( idChnl, idChnl, idMsk );
desc156.putReference( idAt, ref77 );
var idUsng = charIDToTypeID( "Usng" );
var idUsrM = charIDToTypeID( "UsrM" );
var idRvlS = charIDToTypeID( "RvlS" );
desc156.putEnumerated( idUsng, idUsrM, idRvlS );
executeAction( idMk, desc156, DialogModes.NO );
}
/*
------------------------------------------------
Checks to see if active layer has a layer mask
------------------------------------------------
*/
function hasLayerMask( )
{
var ref = new ActionReference( );
ref.putEnumerated( stringIDToTypeID( "layer" ),
charIDToTypeID( "Ordn" ), charIDToTypeID( "Trgt" ) );
var Mask = executeActionGet( ref );
return Mask.hasKey( charIDToTypeID( 'Usrs' ) );
}
/*
------------------------------------------------
Loads the Layer Mask of the current layer
------------------------------------------------
*/
function layerMaskToSelection( )
{
var idsetd = charIDToTypeID( "setd" );
var desc14 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref8 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idfsel = charIDToTypeID( "fsel" );
ref8.putProperty( idChnl, idfsel );
desc14.putReference( idnull, ref8 );
var idT = charIDToTypeID( "T " );
var ref9 = new ActionReference();
var idChnl = charIDToTypeID( "Chnl" );
var idChnl = charIDToTypeID( "Chnl" );
var idMsk = charIDToTypeID( "Msk " );
ref9.putEnumerated( idChnl, idChnl, idMsk );
desc14.putReference( idT, ref9 );
executeAction( idsetd, desc14, DialogModes.NO );
}
/*
------------------------------------------------
Sets the layer label color for SELECTED
Options are: "Rd ", "Orng", "Ylw ", "Grn ",
"Bl ", "Vlt ", "Gry ", "None"
------------------------------------------------
*/
function setLabelColor( setTo )
{
var idsetd = charIDToTypeID( "setd" );
var desc85 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref33 = new ActionReference();
var idLyr = charIDToTypeID( "Lyr " );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref33.putEnumerated( idLyr, idOrdn, idTrgt );
desc85.putReference( idnull, ref33 );
var idT = charIDToTypeID( "T " );
var desc86 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var idClr = charIDToTypeID( "Clr " );
var idRd = charIDToTypeID( setTo );
desc86.putEnumerated( idClr, idClr, idRd );
var idLyr = charIDToTypeID( "Lyr " );
desc85.putObject( idT, idLyr, desc86 );
executeAction( idsetd, desc85, DialogModes.NO );
return;
}