簡體   English   中英

`rotate()` 沒有設置 `BBAccumRotation`?

[英]`rotate()` does not set `BBAccumRotation`?

Illustrator 使用BBAccumRotation以弧度0.51246700跟蹤對象的旋轉。

如果BBAccumRotation ,則設置BBAccumRotation

  • 當前已旋轉 - 弧度 = 旋轉值
  • 先前已旋轉,當前為 0 度 - 弧度 = 0.000000
  • 通過拖動手柄旋轉
  • 通過 Object > 變換 > 旋轉旋轉
  • 通過屬性面板旋轉 > 旋轉

如果BBAccumRotation ,則設置 BBAccumRotation:

  • 使用rotate()通過腳本旋轉
  • 通過實時效果旋轉 > 扭曲和變換 > 變換 > 旋轉
  • 以現場效果旋轉並展開

問題是,是否有一種本機/烘焙方式可以讓rotate()設置BBAccumRotation

雖然可以將BBAccumRotation標簽添加到 object,但它會像任何自定義標簽一樣被處理 - Illustrator 在其旋轉標簽上無法識別它,因此它不會反映在“屬性”面板等位置。

我知道我可以使用自定義標簽來跟蹤rotate()正在做什么 - 我寧願不在 go 那里。

似乎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

將 object 旋轉 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()方法返回一個標簽 object,當它重命名以匹配內置標簽(例如,'BBAccumRotation')時,插圖畫家通常會識別它,例如在屬性面板中。

下面的代碼使用.rotate()將第一個選擇的 object 旋轉 -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°

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM