|
WindowsXP InDesignCS4 or CS5の環境にて。
javascriptで、テキストフレームの重なりを取得する事は可能でしょうか? 重なりの順番などは必要なく、重なっているかどうかのみ取得出来ればいいのです。 テキストフレームには写真が貼ってあります。
基本的に「同一レイヤー」で「グループ化」はなしの状態です。
コツコツと1ページづつ、一つ一つのテキストフレームの4つの座標を調べて行く方法しかないのでしょうか?
もし、ヒントでも分かる方がいれば、よろしくご指導をお願いします。
|
No.5731 2011/04/14(Thu) 11:34:55
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
|
Re: javascriptでテキストフレームの重なり取得は? / いき |
|
|
No.5732 2011/04/14(Thu) 11:48:45
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 ( .NET CLR 3.5.30729)
|
|
Re: javascriptでテキストフレームの重なり取得は? / いき |
|
|
No.5733 2011/04/14(Thu) 11:58:12
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 ( .NET CLR 3.5.30729)
|
|
Re: javascriptでテキストフレームの重なり取得は? / (z-) |
|
|
|
>テキストフレームには写真が貼ってあります。 それはグラフィックフレームという事でよろしいでしょうか(わりとどうでもいい)
そういうメソッドがあればいいんでしょうけど、ありません。 「パスファインダ:追加」で前後のspread.pageItems.lengthを見るとかでどうでしょうか?
|
No.5734 2011/04/14(Thu) 12:31:17
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4
|
|
Re: javascriptでテキストフレームの重なり取得は? / お〜まち |
|
|
|
ずばりそのもの、というのはないので、コツコツと調べていく方法しかないでしょう。
でもこのケースはDTPではあまりなくても、ゲームプログラミングでは当たり前ですので(ブロック崩しとか、射撃とか、ある形とある形が重なっているかどうかを判定することが必要)、たとえばFlashでゲームプログラミングを解説しているページとか、ひょっとするとそのものズバリのコードがあるかも知れません。
上記とは全く関係ないですが、一つの案として 「判定する2つのフレームの幅と高さを取得しておいて、一度その2つのフレームをグループ化し、幅と高さを取得する。グループ化されたオブジェクトの幅もしくは高さが元のフレームのそれぞれの合計よりも大きければ重なっていない、小さければ重なっている」 というのを思いつきました。参考までに。
|
No.5735 2011/04/14(Thu) 12:42:55
Opera/9.80 (Windows NT 6.1; U; ja) Presto/2.8.131 Version/11.10
|
|
Re: javascriptでテキストフレームの重なり取得は? / (z-) |
|
|
|
ちょい訂正
>前後のspread.pageItems.lengthを見る ・スプレッド全体を「パスファインダ:追加」した場合はその後に複合パスを解除する必要がある ・事前に複合パスがある場合(アウトライン文字など)は処理対象に含めない必要がある ・どれとどれが重なっているのか、を見るには事前に各オブジェクトの座標を最低2点、配列で記憶しておく必要がある
|
No.5736 2011/04/14(Thu) 12:44:44
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4
|
|
Re: javascriptでテキストフレームの重なり取得は? / お〜まち |
|
|
|
>(z-)さん いやいや、ご指摘のとおり、回転が掛かってると目論見どおりにはいかないですね。さすが現役の方は冴えてますね。
|
No.5738 2011/04/14(Thu) 13:45:14
Opera/9.80 (Windows NT 6.1; U; ja) Presto/2.8.131 Version/11.10
|
|
Re: javascriptでテキストフレームの重なり取得は? / amiza_ret |
|
|
|
みなさん、ありがとうございました!!
>いきさん 私も最初、せうぞーさんの所に行きつきました。
>(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("離れてます"); }
今の所、大丈夫そうです。 お〜まちさんのヒントで簡単に出来そうです!!
|
No.5739 2011/04/14(Thu) 13:53:01
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
|
|
Re: javascriptでテキストフレームの重なり取得は? / (z-) |
|
|
|
ええと、上記は結局 >コツコツと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("重なり合っているオブジェクトはありません");
|
No.5740 2011/04/14(Thu) 16:49:23
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_4_11; ja-jp) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/4.1.3 Safari/533.19.4
|
|
Re: javascriptでテキストフレームの重なり取得は? / amiza_ret |
|
|
|
(z-)さん、ありがとうございました。 動作確認いたしました。
今回の仕事に合うのはどちらかを検討・検証し、参考にさせて頂きます。
|
No.5741 2011/04/14(Thu) 17:33:52
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
|
|