Skip to main content
Inspiring
July 22, 2022
Answered

【Javascript】選択オブジェクトを中心にアートボードを作成したい時、小数点以下まで合わせないといけないのか

  • July 22, 2022
  • 5 replies
  • 1096 views

お世話になります。

 

複数の選択オブジェクトがあって、それぞれの中心に対してアートボードを作成するというスクリプトを作っています。

 

下記は複数の選択オブジェクトそれぞれの中心点を計算して出したものになりますが、オブジェクトによって中心点が整数でない場合があるとします。

 

その場合、小数点以下まできっちり合わせてアートボードを作成しなければいけないでしょうか?印刷物のデータになるので中心はずらしたくないのですが、Illustratorで扱うデータは小数点以下のずれも厳しいでしょうか?

 

小数点以下のずれは気にならないのなら、小数点以下1桁ぐらいで切り捨てても大丈夫なものですか?

var idoc  = app.activeDocument;
var selObj = idoc.selection;

for(i=0; i<selObj.length; i++){
    var selCenter = selObj[i].geometricBounds ; //選択オブジェクトの座標

    var X = keisan(selCenter[0],selCenter[2]) ;
    var Y = keisan(selCenter[1],selCenter[3]) ;

    var X = coordinate(X); 
    var Y = coordinate(Y);

    alert(X + "," + Y);
}

function keisan (nagasa1 , nagasa2) {
    return Math.abs((nagasa1 + nagasa2) / 2);
}

function coordinate (obj) {
    return obj * 25.4 / 72;
}

 

 

This topic has been closed for replies.
Correct answer ajabon grinsmith

お察しのとおり、結果として中心も同じ座標になるということで、

中心座標を基点としての作成したことにはなりません。

 

オブジェクト座標をもとにアートボード作成

アートボードの中心座標を計算(a)

中心座標を丸めた値を用意(b)

(a-b)の値ぶんアートボードを移動(もしくは左上座標より減算)

 

…が必要になるかと。

ところでartboards.add()、知りませんでした(ESTKのオブジェクトモデルビューアから漏れてる)。勉強になりました(´Ꙩ ̫ Ꙩ`)

5 replies

Participating Frequently
July 22, 2022

丸めるのに不安がある場合の例え話として、全然関係ない話ですが、
印刷の世界で使われている黄金比のA版B版のも正確な数値ではなく整数にしてしまっています。
A4ならば210mm × 297mmとされていますが、
実際には、1 対 ルート2 の無理数になります。
( X 対 X * (2 ^ 0.5) )
1 対 1.414213562373となり、
210mm × 296.98484809835mmというかんじです。
(実際にはA0から始めるのか知りませんが)
処理の最後で整数に丸めてしまって全然問題ないはずです。

nekkonekoAuthor
Inspiring
July 22, 2022

整数にしてしまう場合がけっこうあるんですね。

一応印刷業にいるのに勉強不足でした・・・。

ありがとうございました!

nekkonekoAuthor
Inspiring
July 22, 2022

みなさん、ありがとうございました。

 

今回選択オブジェクトの中心を基準にアートボードを作成するスクリプトを作りたくて、一度中心点を取得しようと考えて上記のコードを書いたのですが・・・

 

var idoc  = app.activeDocument;
var selObj = idoc.selection; 

for(i=0; i<selObj.length; i++){
    var selCenter = selObj[i].geometricBounds ;

    idoc.artboards.add(selCenter);
}

 

これだけでは「選択オブジェクトの中心=アートボードの中心」にはならないでしょうか?これではただ「選択オブジェクトのサイズ=アートボードサイズ」なだけですか?

ajabon grinsmith
Community Expert
ajabon grinsmithCommunity ExpertCorrect answer
Community Expert
July 22, 2022

お察しのとおり、結果として中心も同じ座標になるということで、

中心座標を基点としての作成したことにはなりません。

 

オブジェクト座標をもとにアートボード作成

アートボードの中心座標を計算(a)

中心座標を丸めた値を用意(b)

(a-b)の値ぶんアートボードを移動(もしくは左上座標より減算)

 

…が必要になるかと。

ところでartboards.add()、知りませんでした(ESTKのオブジェクトモデルビューアから漏れてる)。勉強になりました(´Ꙩ ̫ Ꙩ`)

nekkonekoAuthor
Inspiring
July 22, 2022

何度もありがとうございます!

 

やっぱり中心座標を基点として作成したことにならないんですね。

ちょっとだけ「これで良いじゃん!簡単に出来た!」と思ってしまいました・・・。

 

流れを教えて頂いたので、参考にして作ってみます。

私もartboards.add()は調べてたらたまたま見つけました。便利ですね!

Gishu Azami
Community Expert
Community Expert
July 22, 2022

ウェブ制作のpx向けのスクリプトならまだしも、“印刷物のデータになる”とのことでしたら、mmにおいて“小数点以下1桁ぐらいで切り捨てても大丈夫”だと、当方も思います。

生明義秀
nekkonekoAuthor
Inspiring
July 22, 2022

ありがとうございます。

 

ウェブ制作向けではないので、おっしゃる通り小数点以下1桁で切り捨てて試してみて、何か問題があったらそこら辺変えてみようと思います。

ajabon grinsmith
Community Expert
Community Expert
July 22, 2022

とりあえずで

    var X = coordinate(X); 
    var Y = coordinate(Y);

この2つの変数は宣言済みなのでここではvar不要です。

 

>小数点以下まできっちり合わせてアートボードを作成しなければいけないでしょうか

 

自由にやればいいと個人的には思うのですが。

仮にピクセル整合が必要なWeb用の作業だとしても、

幅・高さが奇数ピクセルであれば中心座標は小数点つきとなります。

その、整数でなければならないと考える根拠というか理由はどういうものでしょうか?

 

またこの場合、整数にこだわるのはmmのほうでしょうか(コード内容からしてご存知でしょうけど、内部ではPointで管理されています)。

nekkonekoAuthor
Inspiring
July 22, 2022

ありがとうございます。

 

アートボードの中心は整数じゃなくていいのですが、

例えばオブジェクトの中心座標が「x=36.7567437」「y=64.7456632」みたいな数値だとして、その中心座標に合わせてアートボードを作成する時、そのオブジェクトの数値に全て合わせるべきか、それとも「x=36.8」「y=64.7」ぐらいで切り捨てて作っても大丈夫なのか、ってことを聞きたかったです。

 

最初に整数が・・・という文言があったので分かりづらくてすみません・・・。

ajabon grinsmith
Community Expert
Community Expert
July 22, 2022

その、ある程度で切り捨てる理由というのが表示上の座標値を見た目上できるだけすっきりさせたい、などであれば、やっちゃって構わないかと(個人的にですが)思います。

これによる成果物をまた他のInDesgn上などに配置した際に端ギリギリのオブジェクトのツラが揃わないなどの懸念はありますが、ケースとしてあり得ないのであれば雑処理でいいかなと。

雑処理とはいえコードは逆に少し長くなるんですがw

Ten A
Community Expert
Community Expert
July 22, 2022

こういうのは時と場合によって要求精度が変わるので、どう使いたいかっていう点に左右されるものです。
コーディネイトがポイントで計算されていますので0.35mmの更に1/10オーダーであれは丸め込んで±0.2mm以下って感じでしょうから、その誤差が人の目で気がつくかどうかって所を考えればよいのではないでしょうか。

ちなみに、varは変数を定義する為のものですから初回だけでオッケーです。

nekkonekoAuthor
Inspiring
July 22, 2022

ありがとうございます。

 

誤差が人の目で気がつくかですか・・・正直、0.1mm単位の誤差は分かるというかシビアにならなければいけない感じで、0.01mmとかってなると関係ないかもです。

 

とりあえず色々試してみます!