Copiar link para a área de transferência
Copiado
Try this script:
#target photoshop
var oldPrefs = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.POINTS
var doc = activeDocument;
var curLay = doc.activeLayer;
var curLayName = curLay.name
var res = doc.resolution;
var len54 = 54*(72/res);
var path1 = doc.pathItems.getByName(curLay.name + ' Shape Path');
var p1 = path1.subPathItems[0]
var pt1 = p1.pathPoints[0].anchor
var pt2 = p1.pathPoints[1].anchor
var totalPath = new Array();
var newPath = new Array();
newPath[0] = new Pat
...
Copiar link para a área de transferência
Copiado
If you create a line shape layer that has a that has stroked line paths. With that layer active a script could most like get line paths info and add vertical 54px vertically down lines to the line end control points.
Copiar link para a área de transferência
Copiado
Hi Thanks for answer ! Did you know how I can made this script, I'm noob in javascript.....
Thx again !
Copiar link para a área de transferência
Copiado
If you are new to scripting you need the read the Adobe three scripting doc PDF download and install the scriptlistener Plugin and look ate the sample scripts source code and the script the Adobe has provided in Photoshop Presets\Scripts folder. You have a lot to learn. It will take some time. I just hack at Scripting.
Copiar link para a área de transferência
Copiado
Try this script:
#target photoshop
var oldPrefs = app.preferences.rulerUnits
app.preferences.rulerUnits = Units.POINTS
var doc = activeDocument;
var curLay = doc.activeLayer;
var curLayName = curLay.name
var res = doc.resolution;
var len54 = 54*(72/res);
var path1 = doc.pathItems.getByName(curLay.name + ' Shape Path');
var p1 = path1.subPathItems[0]
var pt1 = p1.pathPoints[0].anchor
var pt2 = p1.pathPoints[1].anchor
var totalPath = new Array();
var newPath = new Array();
newPath[0] = new PathPointInfo
newPath[0].kind = PointKind.CORNERPOINT;
newPath[0].anchor = Array(pt1[0],pt1[1]+len54);
newPath[0].rightDirection = Array(pt1[0],pt1[1]+len54);
newPath[0].leftDirection = Array(pt1[0],pt1[1]+len54);
newPath[1] = new PathPointInfo
newPath[1].kind = PointKind.CORNERPOINT;
newPath[1].anchor = Array(pt1[0],pt1[1]);
newPath[1].rightDirection = Array(pt1[0],pt1[1]);
newPath[1].leftDirection = Array(pt1[0],pt1[1]);
newPath[2] = new PathPointInfo
newPath[2].kind = PointKind.CORNERPOINT;
newPath[2].anchor = Array(pt2[0],pt2[1]);
newPath[2].rightDirection = Array(pt2[0],pt2[1]);
newPath[2].leftDirection = Array(pt2[0],pt2[1]);
newPath[3] = new PathPointInfo
newPath[3].kind = PointKind.CORNERPOINT;
newPath[3].anchor = Array(pt2[0],pt2[1]+len54);
newPath[3].rightDirection = Array(pt2[0],pt2[1]+len54);
newPath[3].leftDirection = Array(pt2[0],pt2[1]+len54);
totalPath[0]= new SubPathInfo();
totalPath[0].closed = false;
totalPath[0].operation = ShapeOperation.SHAPEADD
totalPath[0].entireSubPath = newPath;
var thePath = doc.pathItems.add('My Path ',totalPath);
convertPathtoShape();
setStroke ();
doc.activeLayer.name = curLayName;
curLay.remove();
thePath.remove();
app.preferences.rulerUnits = oldPrefs
function convertPathtoShape() {
var d = new ActionDescriptor();
var d2 = new ActionDescriptor();
var d3 = new ActionDescriptor();
var d4 = new ActionDescriptor();
var r = new ActionReference();
r.putClass( stringIDToTypeID( "contentLayer" ));
d.putReference( charIDToTypeID( "null" ), r );
d4.putDouble( charIDToTypeID( "Rd " ), 255);
d4.putDouble( charIDToTypeID( "Grn " ), 255);
d4.putDouble( charIDToTypeID( "Bl " ), 255);
d3.putObject( charIDToTypeID( "Clr " ), charIDToTypeID( "RGBC" ), d4 );
d2.putObject( charIDToTypeID( "Type" ), stringIDToTypeID( "solidColorLayer" ), d3 );
d.putObject( charIDToTypeID( "Usng" ), stringIDToTypeID( "contentLayer" ), d2 );
executeAction( charIDToTypeID( "Mk " ), d, DialogModes.NO );
}
function setStroke(){
var idsetd = charIDToTypeID( "setd" );
var desc3 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref1 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref1.putEnumerated( idcontentLayer, idOrdn, idTrgt );
desc3.putReference( idnull, ref1 );
var idT = charIDToTypeID( "T " );
var desc4 = new ActionDescriptor();
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc5 = new ActionDescriptor();
var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );
var desc6 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc7 = new ActionDescriptor();
var idCyn = charIDToTypeID( "Cyn " );
desc7.putDouble( idCyn, 74.970000 );
var idMgnt = charIDToTypeID( "Mgnt" );
desc7.putDouble( idMgnt, 67.920000 );
var idYlw = charIDToTypeID( "Ylw " );
desc7.putDouble( idYlw, 67.050000 );
var idBlck = charIDToTypeID( "Blck" );
desc7.putDouble( idBlck, 90.150000 );
var idCMYC = charIDToTypeID( "CMYC" );
desc6.putObject( idClr, idCMYC, desc7 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc5.putObject( idstrokeStyleContent, idsolidColorLayer, desc6 );
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc5.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc5.putBoolean( idstrokeEnabled, true );
var idfillEnabled = stringIDToTypeID( "fillEnabled" );
desc5.putBoolean( idfillEnabled, false );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc4.putObject( idstrokeStyle, idstrokeStyle, desc5 );
var idshapeStyle = stringIDToTypeID( "shapeStyle" );
desc3.putObject( idT, idshapeStyle, desc4 );
executeAction( idsetd, desc3, DialogModes.NO );
var idsetd = charIDToTypeID( "setd" );
var desc9 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref2 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref2.putEnumerated( idcontentLayer, idOrdn, idTrgt );
desc9.putReference( idnull, ref2 );
var idT = charIDToTypeID( "T " );
var desc10 = new ActionDescriptor();
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc11 = new ActionDescriptor();
var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );
var idPxl = charIDToTypeID( "#Pxl" );
desc11.putUnitDouble( idstrokeStyleLineWidth, idPxl, 7.000000 );
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc11.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc11.putBoolean( idstrokeEnabled, true );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc10.putObject( idstrokeStyle, idstrokeStyle, desc11 );
var idshapeStyle = stringIDToTypeID( "shapeStyle" );
desc9.putObject( idT, idshapeStyle, desc10 );
executeAction( idsetd, desc9, DialogModes.NO );
}
Copiar link para a área de transferência
Copiado
Your script works but changes the stroke color to black and the stroke weight to 7px.
Copiar link para a área de transferência
Copiado
That's what the OP wanted, a 7px stroke. The screen shot that was posted shows a black stroke, so that's what I went with. The script actually deletes the original layer, as you can't just edit a path or shape, you have to redraw it.
Copiar link para a área de transferência
Copiado
Thanks for you script, thanks you foryour help, I test it ans see how it works, it's a great job !
Best Regards,
Christian
Copiar link para a área de transferência
Copiado
Hi Chuck,
I apologize but can you tell me how the script works ? I try to use it but have error line 11 ,
Have to draw a line or to made a path ? When I try both, have same error.... ,
Thanks again,
Christian
Copiar link para a área de transferência
Copiado
Use the pen tool to draw a line: just set two points.
Copiar link para a área de transferência
Copiado
Hi Chuck,
I try it, but it's not working.....
Copiar link para a área de transferência
Copiado
The Current targeted layer need to be your Shape layer that your two point line shape layer you created with the Line Shape tool. When you run the script. Your document does not have a shape layer.
Copiar link para a área de transferência
Copiado
As r-bin pointed out, I didn't think about your computer not using English. The line that fails assumes that it's English and any shape layer's path would have the layer name appended with "Shape Path." So the script either needs to be localized, which substitutes the correct language, or the words " Shape Path" needs to be replace with whatever Photoshop generates in your language.
Copiar link para a área de transferência
Copiado
Didn't delve into the script, but try to replace the line
var path1 = doc.pathItems.getByName(curLay.name + ' Shape Path');
with line
var path1 = doc.pathItems.getByName(curLay.name + " " + localize("$$$/MaskPanel/MaskSelection/ShapePath"));
Copiar link para a área de transferência
Copiado
Thanks, yea, I didn't think about needing localization.
Copiar link para a área de transferência
Copiado
it works ! I've found what's wrong, thanks JJMack to give a way to find it : it's about effectively English vs French : I'v made this and it' works :
var path1 = doc.pathItems.getByName('Tracé de la forme ' + curLay.name);
Thanks for all
Copiar link para a área de transferência
Copiado
One more and last thing, is it possible to have this option for have a nice angle, and it will be perfect. Is it strokeStyle ?
Copiar link para a área de transferência
Copiado
You Stroke option has the Inside checked. There no in side the a line path. Prior Version of Photoshop Supported four point line shape layers where the inside path width was line weight. Adobe removed that feature. Also this script would not work with a four point line shape layer.
Copiar link para a área de transferência
Copiado
To have it use the center stroke, add this code to the very end of the script, before the last brace "}" in the function setStoke().
var idsetd = charIDToTypeID( "setd" );
var desc36 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref14 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
var idOrdn = charIDToTypeID( "Ordn" );
var idTrgt = charIDToTypeID( "Trgt" );
ref14.putEnumerated( idcontentLayer, idOrdn, idTrgt );
desc36.putReference( idnull, ref14 );
var idT = charIDToTypeID( "T " );
var desc37 = new ActionDescriptor();
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc38 = new ActionDescriptor();
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleAlignCenter = stringIDToTypeID( "strokeStyleAlignCenter" );
desc38.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignCenter );
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc38.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc38.putBoolean( idstrokeEnabled, true );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc37.putObject( idstrokeStyle, idstrokeStyle, desc38 );
var idshapeStyle = stringIDToTypeID( "shapeStyle" );
desc36.putObject( idT, idshapeStyle, desc37 );
executeAction( idsetd, desc36, DialogModes.NO );
Copiar link para a área de transferência
Copiado
Hi Chuck, thx again for your help and prompt answer ! It works great !
Thanks and have a nice day !
Copiar link para a área de transferência
Copiado
If I could ask latest latest one more thing : what I could change in the script to have other angles :
- horizontal left, or right
- vertical up or down,
like on screenshot in red, green and violet
(always the same lenght 54 px)
I read your script and documentation, but I didn't find (didn't understand) how to write/modify to do this.
Thanks a lot, again.... :-))
Copiar link para a área de transferência
Copiado
It's OK, I found ! Thanks !
Encontre mais inspiração, eventos e recursos na nova comunidade da Adobe
Explore agora