
Adobe Illustrator 批量标注尺寸脚本-支持0.5公差取整 源码
function make_size() {
var docRef = activeDocument;
var mm = 25.4 / 72;
var myFont = textFonts.getByName("MicrosoftYaHei");
var myFontSize = 24;
var x, y;
function formatSize5(size) {
var rd = Math.round(size * mm * 2) / 2;
return (rd % 1 === 0) ? Math.round(rd) : rd.toFixed(1);
}
var cmykRed = new CMYKColor();
cmykRed.cyan = 0;
cmykRed.magenta = 100;
cmykRed.yellow = 100;
cmykRed.black = 0;
function writeText(text) {
var textRef = docRef.textFrames.add();
textRef.contents = text;
textRef.textRange.characterAttributes.size = myFontSize;
textRef.textRange.characterAttributes.textFont = myFont;
textRef.textRange.characterAttributes.fillColor = cmykRed;
textRef.top = y + 15 / mm;
textRef.left = x + 10 / mm;
}
if (docRef.selection.length > 0) {
var mySelection = docRef.selection;
for (var i = 0; i < mySelection.length; i++) {
var s = mySelection[i]
x = s.left; y = s.top
var str = formatSize5(s.width) + "x" + formatSize5(s.height) + "mm";
writeText(str)
}
}
}
说明
Math.round(size * mm * 2) 将尺寸乘以2后进行四舍五入,这样可以实现每0.5的取整。
/ 2 将结果恢复为原单位。
toFixed(1) 保证返回的结果保留一位小数。
这样,15.4 和 15.6 将取整为 15.5,而 15.8 和 15.9 将取整为 16。
如果你在 Adobe 软件的 JavaScript 环境中,确实可以用更传统的方式处理。以下是修改后的函数,不使用 Number 方法:
function formatSize(size) {
var rounded = Math.round(size * mm * 2) / 2;
return (rounded % 1 === 0) ? Math.round(rounded) : rounded.toFixed(1);
}
说明:
Math.round(size * mm * 2) / 2 用于按0.5取整。
使用 rounded % 1 === 0 检查是否为整数。如果是整数,则返回四舍五入后的整数;否则,保留一位小数。
这样就可以在 Adobe 的 JavaScript 环境中正常运行了。
在 JavaScript 中,=== 是严格相等运算符,用于比较两个值是否相等,并且会考虑它们的类型。与之相对的是 ==,它是宽松相等运算符,会在比较前进行类型转换。
主要区别:
=== (严格相等):只有在值和类型都相同的情况下才返回 true。
== (宽松相等):在比较前会尝试将不同类型的值转换为相同类型。