Copy link to clipboard
Copied
I'm not sure exactly when this changed, but it used to be that when creating a line with start and end arrowheads, the length and width of the arrowhead were percentages of the line width. They're now absolute pixel values which makes it extremely hard to get consistency of arrowhead shape across different line widths. Can this be reverted, or given as a user preference to select arrowhead dimensions as either percentage (legacy) or absolute pixels (current) ?
Copy link to clipboard
Copied
That was discussed many month ago...
At that time they wanted to check whether the old line tool (which structured the arrows differently) could be included again. Haven't heard from it since then... However, the old function can still be accessed via script (incl. percentage)
var idMk = charIDToTypeID( "Mk " );
var desc51 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref13 = new ActionReference();
var idcontentLayer = stringIDToTypeID( "contentLayer" );
ref13.putClass( idcontentLayer );
desc51.putReference( idnull, ref13 );
var idUsng = charIDToTypeID( "Usng" );
var desc52 = new ActionDescriptor();
var idType = charIDToTypeID( "Type" );
var desc53 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc54 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc54.putDouble( idRd, 255.000000 );
var idGrn = charIDToTypeID( "Grn " );
desc54.putDouble( idGrn, 241.922698 );
var idBl = charIDToTypeID( "Bl " );
desc54.putDouble( idBl, 0.000000 );
var idRGBC = charIDToTypeID( "RGBC" );
desc53.putObject( idClr, idRGBC, desc54 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc52.putObject( idType, idsolidColorLayer, desc53 );
var idShp = charIDToTypeID( "Shp " );
var desc55 = new ActionDescriptor();
var idStrt = charIDToTypeID( "Strt" );
var desc56 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idRlt = charIDToTypeID( "#Rlt" );
desc56.putUnitDouble( idHrzn, idRlt, 20.000 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idRlt = charIDToTypeID( "#Rlt" );
desc56.putUnitDouble( idVrtc, idRlt, 100.000 );
var idPnt = charIDToTypeID( "Pnt " );
desc55.putObject( idStrt, idPnt, desc56 );
var idEnd = charIDToTypeID( "End " );
var desc57 = new ActionDescriptor();
var idHrzn = charIDToTypeID( "Hrzn" );
var idRlt = charIDToTypeID( "#Rlt" );
desc57.putUnitDouble( idHrzn, idRlt, 220.000 );
var idVrtc = charIDToTypeID( "Vrtc" );
var idRlt = charIDToTypeID( "#Rlt" );
desc57.putUnitDouble( idVrtc, idRlt, 100.000 );
var idPnt = charIDToTypeID( "Pnt " );
desc55.putObject( idEnd, idPnt, desc57 );
var idWdth = charIDToTypeID( "Wdth" );
var idPxl = charIDToTypeID( "#Pxl" );
desc55.putUnitDouble( idWdth, idPxl, 13.000000 );
var idStrA = charIDToTypeID( "StrA" );
var desc58 = new ActionDescriptor();
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc58.putUnitDouble( idWdth, idPrc, 20.000000 );
var idLngt = charIDToTypeID( "Lngt" );
var idPrc = charIDToTypeID( "#Prc" );
desc58.putUnitDouble( idLngt, idPrc, 100.000000 );
var idCncv = charIDToTypeID( "Cncv" );
var idPrc = charIDToTypeID( "#Prc" );
desc58.putUnitDouble( idCncv, idPrc, 0.000000 );
var idOn = charIDToTypeID( "On " );
desc58.putBoolean( idOn, true );
var idcArw = charIDToTypeID( "cArw" );
desc55.putObject( idStrA, idcArw, desc58 );
var idEndA = charIDToTypeID( "EndA" );
var desc59 = new ActionDescriptor();
var idWdth = charIDToTypeID( "Wdth" );
var idPrc = charIDToTypeID( "#Prc" );
desc59.putUnitDouble( idWdth, idPrc, 25.000000 );
var idLngt = charIDToTypeID( "Lngt" );
var idPrc = charIDToTypeID( "#Prc" );
desc59.putUnitDouble( idLngt, idPrc, 50.000000 );
var idCncv = charIDToTypeID( "Cncv" );
var idPrc = charIDToTypeID( "#Prc" );
desc59.putUnitDouble( idCncv, idPrc, 0.000000 );
var idOn = charIDToTypeID( "On " );
desc59.putBoolean( idOn, true );
var idcArw = charIDToTypeID( "cArw" );
desc55.putObject( idEndA, idcArw, desc59 );
var idLn = charIDToTypeID( "Ln " );
desc52.putObject( idShp, idLn, desc55 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
var desc60 = new ActionDescriptor();
var idstrokeStyleVersion = stringIDToTypeID( "strokeStyleVersion" );
desc60.putInteger( idstrokeStyleVersion, 2 );
var idstrokeEnabled = stringIDToTypeID( "strokeEnabled" );
desc60.putBoolean( idstrokeEnabled, true );
var idfillEnabled = stringIDToTypeID( "fillEnabled" );
desc60.putBoolean( idfillEnabled, true );
var idstrokeStyleLineWidth = stringIDToTypeID( "strokeStyleLineWidth" );
var idPxl = charIDToTypeID( "#Pxl" );
desc60.putUnitDouble( idstrokeStyleLineWidth, idPxl, 2.510000 );
var idstrokeStyleLineDashOffset = stringIDToTypeID( "strokeStyleLineDashOffset" );
var idPnt = charIDToTypeID( "#Pnt" );
desc60.putUnitDouble( idstrokeStyleLineDashOffset, idPnt, 0.000000 );
var idstrokeStyleMiterLimit = stringIDToTypeID( "strokeStyleMiterLimit" );
desc60.putDouble( idstrokeStyleMiterLimit, 100.000000 );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleLineCapType = stringIDToTypeID( "strokeStyleLineCapType" );
var idstrokeStyleButtCap = stringIDToTypeID( "strokeStyleButtCap" );
desc60.putEnumerated( idstrokeStyleLineCapType, idstrokeStyleLineCapType, idstrokeStyleButtCap );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleLineJoinType = stringIDToTypeID( "strokeStyleLineJoinType" );
var idstrokeStyleMiterJoin = stringIDToTypeID( "strokeStyleMiterJoin" );
desc60.putEnumerated( idstrokeStyleLineJoinType, idstrokeStyleLineJoinType, idstrokeStyleMiterJoin );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleLineAlignment = stringIDToTypeID( "strokeStyleLineAlignment" );
var idstrokeStyleAlignCenter = stringIDToTypeID( "strokeStyleAlignCenter" );
desc60.putEnumerated( idstrokeStyleLineAlignment, idstrokeStyleLineAlignment, idstrokeStyleAlignCenter );
var idstrokeStyleScaleLock = stringIDToTypeID( "strokeStyleScaleLock" );
desc60.putBoolean( idstrokeStyleScaleLock, false );
var idstrokeStyleStrokeAdjust = stringIDToTypeID( "strokeStyleStrokeAdjust" );
desc60.putBoolean( idstrokeStyleStrokeAdjust, false );
var idstrokeStyleLineDashSet = stringIDToTypeID( "strokeStyleLineDashSet" );
var list5 = new ActionList();
var idNne = charIDToTypeID( "#Nne" );
list5.putUnitDouble( idNne, 4.000000 );
var idNne = charIDToTypeID( "#Nne" );
list5.putUnitDouble( idNne, 2.000000 );
desc60.putList( idstrokeStyleLineDashSet, list5 );
var idstrokeStyleBlendMode = stringIDToTypeID( "strokeStyleBlendMode" );
var idBlnM = charIDToTypeID( "BlnM" );
var idNrml = charIDToTypeID( "Nrml" );
desc60.putEnumerated( idstrokeStyleBlendMode, idBlnM, idNrml );
var idstrokeStyleOpacity = stringIDToTypeID( "strokeStyleOpacity" );
var idPrc = charIDToTypeID( "#Prc" );
desc60.putUnitDouble( idstrokeStyleOpacity, idPrc, 100.000000 );
var idstrokeStyleContent = stringIDToTypeID( "strokeStyleContent" );
var desc61 = new ActionDescriptor();
var idClr = charIDToTypeID( "Clr " );
var desc62 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc62.putDouble( idRd, 237.281931 );
var idGrn = charIDToTypeID( "Grn " );
desc62.putDouble( idGrn, 28.433876 );
var idBl = charIDToTypeID( "Bl " );
desc62.putDouble( idBl, 36.261481 );
var idRGBC = charIDToTypeID( "RGBC" );
desc61.putObject( idClr, idRGBC, desc62 );
var idsolidColorLayer = stringIDToTypeID( "solidColorLayer" );
desc60.putObject( idstrokeStyleContent, idsolidColorLayer, desc61 );
var idstrokeStyleResolution = stringIDToTypeID( "strokeStyleResolution" );
desc60.putDouble( idstrokeStyleResolution, 72.000000 );
var idstrokeStyle = stringIDToTypeID( "strokeStyle" );
desc52.putObject( idstrokeStyle, idstrokeStyle, desc60 );
var idcontentLayer = stringIDToTypeID( "contentLayer" );
desc51.putObject( idUsng, idcontentLayer, desc52 );
var idLyrI = charIDToTypeID( "LyrI" );
desc51.putInteger( idLyrI, 4 );
executeAction( idMk, desc51, DialogModes.NO );
Maybe you can write a script for that...
Copy link to clipboard
Copied
Honestly the current method is all but useless. I'm not sure why they would have gone to this - it makes it impossible to get any consistency of arrowhead shape across different line widths without having to calculate and manually fill in values every time. It's a reduction in productivity.