I have a bunch of lineworks with different stroke weights. Is there a direct way to reduce/increase all stroke weights proportionally without changing the size of the objects?
Thanks, Newton
You may use the following script. It changes the widths of all strokes in document accordingly to the percentile value.
//here you can change the stroke percentual
var myA = prompt("Choose your %","80","Change width stroke");
var myPercentile = myA/100;
if(myA!=null){
// choose all page elements
for (var i=0;i<app.activeDocument.pageItems.length;i++){
var myLayer = app.activeDocument.pageItems[i];
//if element is compound make a new loop for pathItems
if(myLayer.typename=="CompoundPathItem"){
for(var u=0;u<myLayer.pathItems.length;u++){
//take actual stroke size
var myPath = myLayer.pathItems[u];
var myMeasure = myPath.strokeWidth;
//transform the stroke width into % choose at start
myPath.strokeWidth = myMeasure*myPercentile;
}
}
if(myLayer.typename=="PathItem"){
var myMeasure = myLayer.strokeWidth;
myLayer.strokeWidth = myMeasure*myPercentile;
}
}
}
Choose transform → scale scale down (or up to increase) with scale strokes and effects enabled. Then yet again scale with opposite scale value, this time disable scale strokes and effects. Done.
This is not very good approach if your using pixel snapping as it introduces jitter (instead of a matrix concatenation). In this case i would consider scripting this.
Simply run this script:
if (documents.length) {
sel = activeDocument.selection;
if (sel[0]) {
dial = new Window("dialog", "Scale Stroke Width");
gr = dial.add("group");
gr.add("statictext", undefined, "Scale Stroke Width by:");
perc = gr.add("edittext");
perc.characters = 5;
perc.onChanging = function () {ok.enabled = !isNaN(perc.text)}
gr.add("statictext", undefined, "%");
ok = dial.add("button", undefined, "OK");
if (dial.show() == 1) for (i = 0; i < sel.length; i++)
sel[i].resize(100, 100, undefined, undefined, undefined, undefined, perc.text);
}
}
The key here is the method .resize():
.resize(scaleX, scaleY
[,changePositions] [,changeFillPatterns] [,changeFillGradients]
[,changeStrokePattern] [,changeLineWidths] [,scaleAbout]
)
You don't want to scale the object, therefore scaleX and scaleY stay 100. The only thing to change is changeLineWidths. This proves that Illustrator has the specific thing you ask for as a built-in feature, but Adobe just hid it from you.