http://goo.gl/RExCaのつづきです。前回の件は環境による違いだと諦めました。今回はこれです。
var selObj = app.activeDocument.selection;
var graphicLineCount = 0 ;
for (var j = 0 ; j < selObj.length ; j++) {
if (selObj[j].constructor.name =="GraphicLine") {
graphicLineCount ++ ;
for (var h = 0 ; h < selObj[j].graphicLines.length ; h ++) {
selObj[j].graphicLines[h].strokeWeight = 0.1 ;
}
}
}
alert("選択していた " + selObj.length + " つのうちの " + graphicLineCount+ " つの罫線を0.1mmにしました")
アラートは表示されるものの0.1mmに変わってくれません。
範囲選択の書き方が悪いのでしょうか? それともまた環境の違いによるものなのでしょうか? 当方の環境はWin版CS4です。ご検証できる方、よろしくお願いします。
[13827] モアイ (2012/04/05 Thu 13:24)
> var selObj = app.activeDocument.selection;
> var graphicLineCount = 0 ;
> for (var j = 0 ; j < selObj.length ; j++) {
> if (selObj[j].constructor.name =="GraphicLine") {
> graphicLineCount ++ ;
> for (var h = 0 ; h < selObj[j].graphicLines.length ; h ++) {
> selObj[j].graphicLines[h].strokeWeight = 0.1 ;
> }
> }
> }
> alert("選択していた " + selObj.length + " つのうちの " + graphicLineCount+ " つの罫線を0.1mmにしました")
selObj[j]が"GraphicLine"なんですから、
selObj[j].graphicLines[h]ってのはおかしいんでないですか
[13828] (z-) (2012/04/05 Thu 14:15) web
連投すいません
期待どおりの動作をしないなりに、なぜエラーを返さないか、については
GraphicLineは、グラフィックフレーム同様に他のオブジェクトを入れ子にできるんですよ。画像なんかも。
当然外見は変化ないんですが。
なので、変数hは0のまま素通りしてるはずです。
alert(j); alert(h); とか挟んでみてhの変化を追ってくるといいです。
[13829] (z-) (2012/04/05 Thu 14:19) web
> selObj[j]が"GraphicLine"なんですから、
> selObj[j].graphicLines[h]ってのはおかしいんでないですか
すみません。今回は罫線のみに絞りましたので前回の続きではないですね。textFrameなども選択されている状態です。元は
var lineObj=app.activeDocument.graphicLines;
var graphicLineCount = 0 ;
for(var g=0; g<lineObj.length; g++){
if(lineObj[g].strokeWeight<0.1){
graphicLineCount ++ ;
lineObj[g].strokeWeight=0.1;
lineObj[g].strokeTint=100;
}
}
alert( graphicLineCount+ " つの罫線を0.1mmにしました")
だったのですが、エリア選択で処理しようと思い、いじくってるうちに質問のおかしなスクリプトになってしまいました。
[13831] モアイ (2012/04/05 Thu 15:17)
var lineObj=app.activeDocument.selection;
lineObj[0].strokeWeight=0.1;
これが動くなら環境の問題では無いと思いますよ。
[13832] (-_-) (2012/04/05 Thu 15:49)
for (var h = 0 ; h < selObj[j].graphicLines.length ; h ++) も
必要ないですよね。
[13830] (-_-) (2012/04/05 Thu 14:27)
var selObj = app.activeDocument.selection;
var graphicLineCount = 0 ;
for (var j = 0 ; j < selObj.length ; j++) {
if (selObj[j].constructor.name =="GraphicLine") {
graphicLineCount ++ ;
selObj[j].strokeWeight = 0.1 ;
}
}
alert("選択していた " + selObj.length + " つのうちの " + graphicLineCount+ " つの罫線を0.1mmにしました")
で動きます。
[13834] . (2012/04/05 Thu 17:52)
補足
線の塗が「なし」の場合、線幅を設定しても無視されます。
[13837] . (2012/04/05 Thu 18:01)
> http://goo.gl/RExCaのつづきです。前回の件は環境による違いだと諦めました。今回はこれです。
環境の問題ではないでしょ?
しっかり理由があると思いますけど。
[13833] . (2012/04/05 Thu 16:55)
> 環境の問題ではないでしょ?
> しっかり理由があると思いますけど。
動きました。ありがとうございました。
勉強不足なのは確かです。しかしMac環境で作成されたscriptのいくつかが動かないのを経験すると、自分の作ったのも環境の違いやバージョンの違いで動かないのではと疑ってしまいます。やはりMacも入れないと難しいですか。
[13842] モアイ (2012/04/06 Fri 12:01)
> 勉強不足なのは確かです。しかしMac環境で作成されたscriptのいくつかが動かないのを経験すると、自分の作ったのも環境の違いやバージョンの違いで動かないのではと疑ってしまいます。やはりMacも入れないと難しいですか。
このぐらいの処理ではバージョンごとの不具合はあれどMacだWinだで違うような事はそうそうありません。
おかしいと思ったらalert()や$.writeln()で変数の動きを伺うなど、
そういうのをやっていけばいいです。
ちゃんと動かない時はそれで大抵わかります。
くれくれ言うだけの人なんかに比べてみんなよっぽど応援してくれますから。
がんばってください。
[13843] (z-) (2012/04/06 Fri 13:09) web
せっかく、デバッガ(ExtenedScript Toolkit)があるのですから、使わない手はありません。
一行ずつ実行して、変数の変化やループの動き方を追いかければ、大概のミスはわかります。
期待する動きと異なるときに、しっかりと理由を考えることです。
[13844] . (2012/04/06 Fri 13:21)
しっかりと理解せずに色んなことをまとめてやろうとすると失敗しやすいです。
エラーが起きた時は部分部分でちゃんと動作確認することが大切です。
[13845] (-_-) (2012/04/06 Fri 13:24)
> しっかりと理解せずに色んなことをまとめてやろうとすると失敗しやすいです。
> エラーが起きた時は部分部分でちゃんと動作確認することが大切です。
みなさん、アドバイスありがとうございます。
確かにいろんなことをまとめてやろうとしたのが失敗の原因でした。
エラーが起きた時の対処の仕方(所謂デバッグ)が始めたばかりでよく分からないのです。scriptを公開しているサイトを見て勉強してますが、デバッグのやり方がのってないので(z-)さん、よろしくお願いします<(_ _)>
[13847] モアイ (2012/04/06 Fri 22:08)
> エラーが起きた時の対処の仕方(所謂デバッグ)が始めたばかりでよく分からないのです。scriptを公開しているサイトを見て勉強してますが、デバッグのやり方がのってないので
http://d.hatena.ne.jp/kamiseto/20090929/1254233039
から
http://d.hatena.ne.jp/kamiseto/20091001/1254414824
http://d.hatena.ne.jp/kamiseto/20091007/1254926047
まで、ちと尻切れトンボ感がありますがw だいじな事が書かれています。
Javascriptコンソールとデータブラウザが肝、というのはホントです。
うまく動かない処理の前後にブレークポイントを設置し、実行するとそこで一旦止まるのでデータブラウザを見る。
すると宣言してある変数やらが並んでいるので値を参照する、
上でも書きましたが、変数の挙動を見ましょう。
obj[i].hoge(); のとき、iの値が予想どおりか確認してください。
いいとこで止めてデータブラウザで見るもよし、
alert(i); obj[i].hoge; を挟んで、iの値をアラート表示させるもよし、
for (var h = 0 ; h < selObj[j].graphicLines.length ; h ++) {
$.writeln("j="+j+", h="+h);
selObj[j].graphicLines[h].strokeWeight = 0.1 ;
}
と書いておけば、Javascriptコンソールに
j=0, h=0
j=1, h=0
j=2, h=0
.....
とづらづら出ます。
データブラウザ上でselObj[i]のプロパティを見る事はできませんが、
for(i=0; i<selObj.length; i++){
myObj=selObj[i];
$.bp(); //完成したらこの行は削除しないと殺される
myObj.hoge();
}
とやっておくとmyObjのプロパティを見る事が可能です。
だいたいこんな感じで自分の書きなぐったひどいスクリプトをアレしています。
参考になれば幸いです。
[13848] (z-) (2012/04/06 Fri 22:41)
ありがとうございます。ちなみに
>(z-)さん、よろしくお願いします<(_ _)>
は http://pub.ne.jp/ajabon/?entry_id=4250983 に詳しく書いていただければの意味でした^^ 言葉が足りなくてすみません。デバッグ方法って当たり前すぎてか皆さんブログに書いてませんね。初心者はみなさんのブログを参考にしてますから、当たり前のことであっても書いてほしいです。
[13849] モアイ (2012/04/07 Sat 15:16)
あぁ、あぁw
でもまあ、上に書いたことが8割ですし、少なくともウチはまだ初心者ですので。。
一度も走らせないまま書きちらかして後でバグが探せなくて吠え面はしょっちゅうありますし。
まあその。いずれ "^
[13850] (z-) (2012/04/07 Sat 17:30) web
> ありがとうございます。ちなみに
>
> >(z-)さん、よろしくお願いします<(_ _)>
>
> は http://pub.ne.jp/ajabon/?entry_id=4250983 に詳しく書いていただければの意味でした^^ 言葉が足りなくてすみません。デバッグ方法って当たり前すぎてか皆さんブログに書いてませんね。初心者はみなさんのブログを参考にしてますから、当たり前のことであっても書いてほしいです。
「当たり前のこと」なら、貴方が態度(御自身でブログで書いて下さい)で見せて下さい。それが流儀じゃないかと思います。
そうすることで、貴方のお望みのことができるし、皆さんが幸せになると思います。
[13853] 流星光輝 (2012/04/09 Mon 01:27) web
みなさんにとっては「当たり前のこと」の意です。http://www.dtptemple.org/imgbbs/index.php?mode=article&id=13848&page=1
を見ていろいろやってますが、Javascriptコンソールに出すことすら出来ません。自分自身が訳わからない状態ですからブログなんて書けません。たとえ書いたとしても読んで人は理解できないと思います。
[13855] モアイ (2012/04/09 Mon 16:58)
>Javascriptコンソールに出すことすら出来ません。
for(i=0; i<5; i++){
$.writeln(i);
}
とか単純なとこから始めてみてはいかが。
とにかく、いきなり大物に着手しないことです。ウチもよく自滅します。
[13856] (z-) (2012/04/09 Mon 18:03) web
知り合いからtwitterで笑いものになっていることを知らされました。
ここにはもう来ません
でもデバッグが簡単なことではないということだけ分かりました。
初心者の自分だけではない、それが分かっただけでも安心しました。ありがとうございました。
[13859] モアイ (2012/04/10 Tue 12:10)
もう見てないかもですが
とぼしい人脈を頼りにちょっぴりTwitterを見てきたけど、少なくとも見てきた範囲では特に誰も笑ってませんでしたよ?
「がんばれー」とか「たくましく育ってほしい」とか「いい意味で大器晩成だね」とか。
ともだち少ないだけかもですが。。
だいたい、事を丸投げして全身で甘えようって時に人の目なんか気にしていては何も得られませんよ。
昔の赤ちゃんは公衆の面前でおっぱい飲んでたんですから。。
[13867] (z-) (2012/04/10 Tue 17:35) web