'rotate()' 没有设置 'BBAccumRotation'?



Illustrator使用该BBAccumRotation以弧度0.51246700跟踪对象的旋转。

如果对象设置为BBAccumRotation

  • 当前旋转 - 弧度 = 旋转值
  • 以前旋转过,目前为 0 度 - 弧度 = 0.000000
  • 通过拖动手柄旋转
  • 通过对象>变换>旋转旋转
  • 通过"属性"面板旋转>
  • 旋转

如果对象:BBAccumRotation

  • 已通过脚本使用rotate()进行旋转
  • 通过实时效果旋转> 扭曲和变换> 变换>旋转
  • 使用实时效果旋转并展开

问题是,有没有一种原生/烘焙的方式来设置rotate()BBAccumRotation

虽然可以向对象添加BBAccumRotation标签,但它会像任何自定义标签一样处理 - Illustrator 无法在其旋转标签处识别它,因此它不会反映在"属性"面板等位置。

我知道我可以使用自定义标签来跟踪rotate()正在做什么 - 我宁愿不去那里。

似乎rotate()应该设置BBAccumRotation,我希望有一些我不知道的事情。

如果您有兴趣亲自查看此内容,以下是一些测试脚本:

检查对象的标签:

if (app.documents.length == 0 ) {
alert('Open a document to run this script.');
} else if (app.activeDocument.selection.length != 1)  {
alert('Select 1 object to run this script.');
} else {
TagAlert();
}

function TagAlert() {
var iDoc = app.activeDocument;
var aObj = iDoc.selection;
var nObj = aObj.length;
for ( i = 0; i < nObj; i++ ) {
var obj = selection[0];
var aTags = obj.tags;
var nTags = aTags.length;
if (nTags == 0) {
alert('No tags.')
} else {
for ( i = 0; i < nObj; i++ ) {
var obj = aObj[0];
var aTags = obj.tags;
var nTags = aTags.length;
for ( i = 0; i < nTags; i++ ) {
tagName = aTags[i].name;
tagVal = aTags[i].value;
alert(tagName + ' ' + tagVal);
}
} // for
} // if
} // for
}; // TagAlert

将对象旋转 30 度:

if (app.documents.length == 0 ) {
alert('Open a document to run this script.');
} else if (app.activeDocument.selection.length != 1)  {
alert('Select 1 and only 1 object to run this script.');
} else {
RotateObject();
}
function RotateObject() {
var iDoc = app.activeDocument;
var aObj = iDoc.selection;
var nObj = aObj.length;
for(i = 0; i < nObj; i++) { 
aObj[i].rotate(30);
}
};

提前谢谢你:)

[Tags].add()方法返回一个 Tag 对象,当重命名以匹配内置标记(如"BBAccumRotation"(时,Illustrator 通常会识别该对象,例如在属性面板中。

下面的代码使用.rotate()将第一个选定的对象旋转 -22 度,然后相应地旋转边界框。请注意,[Tags].value必须从字符串转换为数字。另请注意,此功能似乎未被记录在案。

#target illustrator
// convert back to radians
function deg2Rad( n ) {
return n * ( Math.PI / 180 );
}
function rotateBBox( layer, degrees ) {
// `tag` will revert to an exiting BBAccumRotation tag if it exists
// if it doesn't exit, it is created
var tag = null;
var i;
for ( i = 0; i < layer.tags.length; i++ ) {
if ( layer.tags[i].name === 'BBAccumRotation' ) {
tag = layer.tags[i];
}
i += 1;
}
if ( !tag ) {
tag = layer.tags.add();
tag.name = 'BBAccumRotation';
}
if ( tag.value ) {
// tag.value must be converted from a String
tag.value = Number( tag.value ) + deg2Rad( degrees );
} else {
tag.value = deg2Rad( degrees );
}
}
function main() {
var doc = app.activeDocument;
var angle, sel;
if ( doc.selection.length < 1 ) {
alert( 'At least one (1) layer must be selected.' );
return 1;
} else {
doc = app.activeDocument;
sel = doc.selection[0];
angle = -22;
sel.rotate( angle );
rotateBBox( sel, angle );
}
}
main();```
function rotate(item, degrees) {
var angle = 0;
try {
angle = parseFloat(item.tags["BBAccumRotation"].value);
} catch(e) {
var tag   = item.tags.add();
tag.name  = "BBAccumRotation";
tag.value = 0;
}
item.tags["BBAccumRotation"].value = angle + degrees*Math.PI/180;
item.rotate(degrees);
}
var item = app.activeDocument.selection[0]; // no tag
rotate(item, 15);  // BBAccumRotation 15°
rotate(item, 15);  // BBAccumRotation 30°
rotate(item, -25); // BBAccumRotation 5°

相关内容

  • 没有找到相关文章

最新更新