javascriptでテキストフレームの重なり取得は?
[5731]javascriptでテキストフレームの重なり取得は? |
投稿者:amiza_ret |
投稿日:2011/04/14(Thu) 11:34:55
WindowsXP InDesignCS4 or CS5の環境にて。
javascriptで、テキストフレームの重なりを取得する事は可能でしょうか?
重なりの順番などは必要なく、重なっているかどうかのみ取得出来ればいいのです。
テキストフレームには写真が貼ってあります。
基本的に「同一レイヤー」で「グループ化」はなしの状態です。
コツコツと1ページづつ、一つ一つのテキストフレームの4つの座標を調べて行く方法しかないのでしょうか?
もし、ヒントでも分かる方がいれば、よろしくご指導をお願いします。
» 1
javascriptで、テキストフレームの重なりを取得する事は可能でしょうか?
重なりの順番などは必要なく、重なっているかどうかのみ取得出来ればいいのです。
テキストフレームには写真が貼ってあります。
基本的に「同一レイヤー」で「グループ化」はなしの状態です。
コツコツと1ページづつ、一つ一つのテキストフレームの4つの座標を調べて行く方法しかないのでしょうか?
もし、ヒントでも分かる方がいれば、よろしくご指導をお願いします。
[5732]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:いき |
投稿日:2011/04/14(Thu) 11:48:45
» 2
[5733]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:いき |
投稿日:2011/04/14(Thu) 11:58:12
私、勘違いしてますね。......出直します。
» 3
[5734]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:(z-) |
投稿日:2011/04/14(Thu) 12:31:17
>テキストフレームには写真が貼ってあります。
それはグラフィックフレームという事でよろしいでしょうか(わりとどうでもいい)
そういうメソッドがあればいいんでしょうけど、ありません。
「パスファインダ:追加」で前後のspread.pageItems.lengthを見るとかでどうでしょうか?
» 4
それはグラフィックフレームという事でよろしいでしょうか(わりとどうでもいい)
そういうメソッドがあればいいんでしょうけど、ありません。
「パスファインダ:追加」で前後のspread.pageItems.lengthを見るとかでどうでしょうか?
[5735]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:お~まち |
投稿日:2011/04/14(Thu) 12:42:55
ずばりそのもの、というのはないので、コツコツと調べていく方法しかないでしょう。
でもこのケースはDTPではあまりなくても、ゲームプログラミングでは当たり前ですので(ブロック崩しとか、射撃とか、ある形とある形が重なっているかどうかを判定することが必要)、たとえばFlashでゲームプログラミングを解説しているページとか、ひょっとするとそのものズバリのコードがあるかも知れません。
上記とは全く関係ないですが、一つの案として
「判定する2つのフレームの幅と高さを取得しておいて、一度その2つのフレームをグループ化し、幅と高さを取得する。グループ化されたオブジェクトの幅もしくは高さが元のフレームのそれぞれの合計よりも大きければ重なっていない、小さければ重なっている」
というのを思いつきました。参考までに。
» 5
でもこのケースはDTPではあまりなくても、ゲームプログラミングでは当たり前ですので(ブロック崩しとか、射撃とか、ある形とある形が重なっているかどうかを判定することが必要)、たとえばFlashでゲームプログラミングを解説しているページとか、ひょっとするとそのものズバリのコードがあるかも知れません。
上記とは全く関係ないですが、一つの案として
「判定する2つのフレームの幅と高さを取得しておいて、一度その2つのフレームをグループ化し、幅と高さを取得する。グループ化されたオブジェクトの幅もしくは高さが元のフレームのそれぞれの合計よりも大きければ重なっていない、小さければ重なっている」
というのを思いつきました。参考までに。
[5736]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:(z-) |
投稿日:2011/04/14(Thu) 12:44:44
ちょい訂正
>前後のspread.pageItems.lengthを見る
・スプレッド全体を「パスファインダ:追加」した場合はその後に複合パスを解除する必要がある
・事前に複合パスがある場合(アウトライン文字など)は処理対象に含めない必要がある
・どれとどれが重なっているのか、を見るには事前に各オブジェクトの座標を最低2点、配列で記憶しておく必要がある
» 6
>前後のspread.pageItems.lengthを見る
・スプレッド全体を「パスファインダ:追加」した場合はその後に複合パスを解除する必要がある
・事前に複合パスがある場合(アウトライン文字など)は処理対象に含めない必要がある
・どれとどれが重なっているのか、を見るには事前に各オブジェクトの座標を最低2点、配列で記憶しておく必要がある
[5737]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:(z-) |
投稿日:2011/04/14(Thu) 12:53:48
>お~まち様
まあ、半分冗談ですけど "^
» 7
まあ、半分冗談ですけど "^
[5738]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:お~まち |
投稿日:2011/04/14(Thu) 13:45:14
>(z-)さん
いやいや、ご指摘のとおり、回転が掛かってると目論見どおりにはいかないですね。さすが現役の方は冴えてますね。
» 8
いやいや、ご指摘のとおり、回転が掛かってると目論見どおりにはいかないですね。さすが現役の方は冴えてますね。
[5739]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:amiza_ret |
投稿日:2011/04/14(Thu) 13:53:01
みなさん、ありがとうございました!!
>いきさん
私も最初、せうぞーさんの所に行きつきました。
>(z-)さん
> それはグラフィックフレームという事でよろしいでしょうか(わりとどうでもいい)
contentType = ContentType.graphicType
です。
パスファインダですと、なかなか難しい気が(私の技術不足)しています。
確かに、Ovalや回転してある物についてはグループ化の方法はダメですね。
今回、やろうとしている仕事に関してはそれらはないので、下記の方法で行う事としました。
>お~まちさん
> 上記とは全く関係ないですが、一つの案として
さすがです!
この方法で作成してみようと思います。
ただ、一応(もしや...)と思い「当たり判定」で検索してみました。
お~まちさんが言う通り、ヒントとなるwebがたくさん引っ掛かってきました。
例:
if(X0 < X3 && X2 < X1 && Y0 < Y3 && Y2 < Y1)
{
<九州工業大学情報工学部の一部活 C3のホームページより>
そこで、上記を利用しちょっと書いてみたのが(分析もせず)下記のソースです。
imgObja= app.activeDocument.selection[0];
imgObjb= app.activeDocument.selection[1];
var X0 = imgObja.visibleBounds[1];
var X1 = imgObja.visibleBounds[3];
var Y0 = imgObja.visibleBounds[0];
var Y1 = imgObja.visibleBounds[2];
var X2 = imgObjb.visibleBounds[1];
var X3 = imgObjb.visibleBounds[3];
var Y2 = imgObjb.visibleBounds[0];
var Y3 = imgObjb.visibleBounds[2];
if(X0 < X3 && X2 < X1 && Y0 < Y3 && Y2 < Y1){
alert("重なってます");
} else {
alert("離れてます");
}
今の所、大丈夫そうです。
お~まちさんのヒントで簡単に出来そうです!!
» 9
>いきさん
私も最初、せうぞーさんの所に行きつきました。
>(z-)さん
> それはグラフィックフレームという事でよろしいでしょうか(わりとどうでもいい)
contentType = ContentType.graphicType
です。
パスファインダですと、なかなか難しい気が(私の技術不足)しています。
確かに、Ovalや回転してある物についてはグループ化の方法はダメですね。
今回、やろうとしている仕事に関してはそれらはないので、下記の方法で行う事としました。
>お~まちさん
> 上記とは全く関係ないですが、一つの案として
さすがです!
この方法で作成してみようと思います。
ただ、一応(もしや...)と思い「当たり判定」で検索してみました。
お~まちさんが言う通り、ヒントとなるwebがたくさん引っ掛かってきました。
例:
if(X0 < X3 && X2 < X1 && Y0 < Y3 && Y2 < Y1)
{
<九州工業大学情報工学部の一部活 C3のホームページより>
そこで、上記を利用しちょっと書いてみたのが(分析もせず)下記のソースです。
imgObja= app.activeDocument.selection[0];
imgObjb= app.activeDocument.selection[1];
var X0 = imgObja.visibleBounds[1];
var X1 = imgObja.visibleBounds[3];
var Y0 = imgObja.visibleBounds[0];
var Y1 = imgObja.visibleBounds[2];
var X2 = imgObjb.visibleBounds[1];
var X3 = imgObjb.visibleBounds[3];
var Y2 = imgObjb.visibleBounds[0];
var Y3 = imgObjb.visibleBounds[2];
if(X0 < X3 && X2 < X1 && Y0 < Y3 && Y2 < Y1){
alert("重なってます");
} else {
alert("離れてます");
}
今の所、大丈夫そうです。
お~まちさんのヒントで簡単に出来そうです!!
[5740]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:(z-) |
投稿日:2011/04/14(Thu) 16:49:23
ええと、上記は結局
>コツコツと1ページづつ、一つ一つのテキストフレームの4つの座標を調べて行く方法
ですよね。
まあ、それでいいならいいんですけど......
蛇足ながら、パスファインダを利用する場合というのを書いてみました。
//グループ、ロックされたオブジェクト、非表示のレイヤー、マスターページアイテムはナシの場合とする
function modosimaFunc(){
while(doc.undoHistory.length > unHis){
doc.undo();
}
}
var spObj = app.activeWindow.activeSpread;
var doc = spObj.parent;
var unHis = doc.undoHistory.length;
doc.selection=null;
var pLen=spObj.pageItems.length;
var i=0, targetObj, hettakaObj, kasanattemasseAry=[];
while(i<pLen-1){
for(j=i+1; j<pLen; j++){
targetObj=spObj.pageItems[i].addPath(spObj.pageItems[j]);
targetObj.releaseCompoundPath();
hettakaObj=spObj.pageItems.length;
modosimaFunc();
if(hettakaObj != pLen){
kasanattemasseAry.push(spObj.pageItems[i], spObj.pageItems[j]);
}
}
i++;
}
if(kasanattemasseAry.length){
doc.selection=kasanattemasseAry;
alert("こんだけ重なってました");
}
else alert("重なり合っているオブジェクトはありません");
» 10
>コツコツと1ページづつ、一つ一つのテキストフレームの4つの座標を調べて行く方法
ですよね。
まあ、それでいいならいいんですけど......
蛇足ながら、パスファインダを利用する場合というのを書いてみました。
//グループ、ロックされたオブジェクト、非表示のレイヤー、マスターページアイテムはナシの場合とする
function modosimaFunc(){
while(doc.undoHistory.length > unHis){
doc.undo();
}
}
var spObj = app.activeWindow.activeSpread;
var doc = spObj.parent;
var unHis = doc.undoHistory.length;
doc.selection=null;
var pLen=spObj.pageItems.length;
var i=0, targetObj, hettakaObj, kasanattemasseAry=[];
while(i<pLen-1){
for(j=i+1; j<pLen; j++){
targetObj=spObj.pageItems[i].addPath(spObj.pageItems[j]);
targetObj.releaseCompoundPath();
hettakaObj=spObj.pageItems.length;
modosimaFunc();
if(hettakaObj != pLen){
kasanattemasseAry.push(spObj.pageItems[i], spObj.pageItems[j]);
}
}
i++;
}
if(kasanattemasseAry.length){
doc.selection=kasanattemasseAry;
alert("こんだけ重なってました");
}
else alert("重なり合っているオブジェクトはありません");
[5741]Re: javascriptでテキストフレームの重なり取得は? |
投稿者:amiza_ret |
投稿日:2011/04/14(Thu) 17:33:52
(z-)さん、ありがとうございました。
動作確認いたしました。
今回の仕事に合うのはどちらかを検討・検証し、参考にさせて頂きます。
動作確認いたしました。
今回の仕事に合うのはどちらかを検討・検証し、参考にさせて頂きます。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)