有沒有在Adobe Illustrator中對對象設置限制的方法?在Adobe Illustrator中設置約束條件
我想將多個對象放置到一個興趣點。對象本身應該總是看着POI。另外,當POI移動時,對象的方向應該更新。
有沒有辦法在Adobe Illustrator中定義這種類型的邏輯?
感謝您的幫助! Jan
有沒有在Adobe Illustrator中對對象設置限制的方法?在Adobe Illustrator中設置約束條件
我想將多個對象放置到一個興趣點。對象本身應該總是看着POI。另外,當POI移動時,對象的方向應該更新。
有沒有辦法在Adobe Illustrator中定義這種類型的邏輯?
感謝您的幫助! Jan
你可以寫一個腳本來做到這一點。
一個問題是如何確定哪些對象是正確的。
作爲一個快速的黑客解決方案是使用命名約定:假設POI對象在其名稱中包含字符「POI」。
一旦你得到的POI對象,它只是一個使用ATAN2得到的事情的,從每一個其他對象的POI:
var dx = POI.x - obj.x;
var dy = POI.y - obj.y;
var angle = atan2(dy,dx);
下面是一個簡單的腳本:
/*
* Rotates a bunch of selected items towards a chosen target
*
* Usage: select at least 2 objects and mark the "look at" target by having POI in the name of the item
*/
#target illustrator
var d = app.activeDocument;//current document
var s = d.selection;//current selection
var hasDocCoords = app.coordinateSystem == CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
var poi = getPOI(s);//get an object that contains 'poi'/'POI' in the name
if(s.length > 1 && poi != undefined){//if there are at least 2 objects and one's a POI
var lookAt = getPos(poi);//get the position to look at
for(var i = 0 ; i < s.length; i++){//for each object
if(s[i] != poi){//that isn't the poi
var pos = getPos(s[i]);//get the position
//get the angle using atan2 and the difference vector between the two positions(current object and poi)
var angle = Math.atan2(pos[1]-lookAt[1],pos[0]-lookAt[0]);
//check if there's a rotation applied, if so, remove it first
if(s[i].tags.length > 0){
if(s[i].tags[0].name == "BBAccumRotation"){
s[i].rotate(s[i].tags[0].value* -57.2957795);//reverse rotate
s[i].tags[0].remove();
}
}
//if it doesn't have a rotation tag, add one so it can be removed when the script is reapplied
if(s[i].tags.length == 0){
var t = s[i].tags.add();
t.name = "BBAccumRotation";
t.value = angle;
}
s[i].rotate(angle * 57.2957795);//finally convert radians to degrees and apply the rotation
}
}
app.redraw();
}
function getPOI(s){//find POI in selection
for(var i = 0 ; i < s.length; i++)
if (s[i].name.toUpperCase().indexOf("POI") >= 0) return s[i];
}
function getPos(o){
var pos = hasDocCoords ? d.convertCoordinate (o.position, CoordinateSystem.DOCUMENTCOORDINATESYSTEM, CoordinateSystem.ARTBOARDCOORDINATESYSTEM) : o.position;
pos[0] += o.width;//offset to centre of object
pos[1] -= o.height;
return pos;
}
你可以將它保存爲正確位置(ILLUSTRATOR_INSTALL_DIR/Presets/LOCALE/Scripts
)中的POI.jsx文件,以便通過訪問文件>腳本>查看POI
要使用它,請至少選擇2個對象,確保名稱中包含POI
。
這裏有一個快速預覽:
注意,三角形的符號。如果需要調整,可以很容易地調整旋轉(如您在符號面板中看到的那樣)。另一種方法是加一個偏移量在劇本的角度,但這種感覺不夠靈活:)
非腳本版本可能使用符號旋轉工具,但它是一個緩慢的,不是很精確的過程: