• 締切済み

イラストレーターでドキュメント上に配置している図形の座標を取得するja

イラストレーターでドキュメント上に配置している図形の座標を取得するjavascriptを探していたところ、以下のプログラムを見つけたのですが、うまく動きません(ファイルが作成されません)。プログラムのどこが原因で動かないのかが分かる方いましたら教えていただけないでしょうか。 var outputFile = new File("Centroid_of_Selection.txt"); outputFile.open("write"); var sel= activeDocument.selection; var str=""; for(var i=0; i<sel.length; i++){ var str_name=sel[i].name; var top_left=sel[i].position; var w=sel[i].width; var h=sel[i].height; var centroid_x=top_left[0]+(w/2); var centroid_y=top_left[1]-(h/2); str=str_name+"\t"+centroid_x+"\t"+centroid_y; outputFile.writeln(str); } outputFile.close(); <動作> デスクトップにテキストファイルとして書き出される。 単位はポイント。 図形の名前、X座標、Y座標 の順番でタブ区切りになる。

みんなの回答

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

イラストレーターのバージョンとOS環境が無いので、間違ってるかもしれませんが Illustrator CS3 or CS4 以上でWindowsと仮定して まず、 var outputFile = new File("Centroid_of_Selection.txt"); ですが、デスクトップに書き出すなら、ファイルパスの指定も 必用じゃないですか? "C:\\Documents and Settings\\hogehoge\\デスクトップ\\Centroid_of_Selection.txt" みたいに、それから、 outputFile.open("write"); は、outputFile.open ("W","",""); じゃないでしょうか さらに、 str=str_name+"\t"+centroid_x+"\t"+centroid_y; は tab = String.fromCharCode(9);として str=str_name+tab+centroid_x+tab+centroid_y; とした方がよいです。 イラストレーターでは日本語の文字コードがSHIFT JISコード以外では 動作しないそうです。 ※そもそも根本的な事としてイラストレーターのjavascriptで ファイル処理できるんですよね!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル 図形の座標誤差

    エクセルで線をグループ化した図形とその図形内の左上の線の座標をselection.top selection.left で取得すると、それぞれで値が異なるときがあります。 また、グループ図形を指定の位置に指定しても(selection.top=100とか)100のところに来ないことがあります。 色々(debug.printを入れたり)していると直ったりします(想定通りの値になる)が、不安定みたいです。 原因と対策がわかれば教えてください。

  • 複製したMCを指定した座標へ配置したいのですが

    こんにちは。 初歩的な質問で申し訳ないのですがよろしくお願いします。 attachMoiveでライブラリ内のMCを数十個複製しそれらをステージ内に 配置する際、4x4、6x6といったように均等に数十個配置する事は 出来るのですが均等に配置するのではなく自分の指定した座標に 1つ1つ配置したいのです。 色々調べましたら、自分の配置したい各場所の各座標(x,y)を 配列を使い変数にするのだと思い、自分なりに作ってみましたところ 1つは指定した座標に配置出来たのですが2つ目以降が上手く 配置出来ません。 var i; var num=50; //複製するmcの数 var pos = {x:50, y:100}; //1つ目の指定座標。              //ここで残り49個のmcの座標も指定。 for (i=0; i<num; i++) { _root.attachMovie("mc", "mc"+i, i); var mc_obj = eval("_root.mc"+i); mc_obj._x = pos._x; mc_obj._y = pos._y; } 一応頭の中ではこういうスクリプトを考えてますが多分間違いが あり何かが足りないのだと思います。 var posのところで2つ目以降の座標の指定の仕方と forの中でmc_obj._xとmc_obj._yにどのように50個分指定した 座標へ配置設定をしてやるのかお分かりくださる方がいらっしゃれば ご教授くださいますようよろしくお願いします。

    • ベストアンサー
    • Flash
  • 極方程式と直交座標(方)は同一図形を表すか?

    極方程式 r=sinθ+2 と 直交座標の方程式 4(x^2+y^2)=(x^2+y^2-y)^2 は 同一図形を表すかどうか。 変換しても、条件に含む・含まない点など、肝心なところがよくわかりません。 どなたか、ご解答をお願いできないでしょうか。どうぞよろしくお願いいたします。

  • 座標空間における図形 (激難)

    座標空間における図形 (激難) 座標軸に垂直な平面の方程式、P(a,b,c)とする。 点Pを通り、x軸に垂直な平面の方程式はx=a 点Pを通り、y軸に垂直な平面の方程式はx=b 教えてほしいところ 確かに、xyz空間上の点(x,y,z)の条件とみれば平面になりますが、何故それが1の場合、垂直、2の場合、平行といえるんですか??

  • 外部テキストファイルから座標データを読み込み,その座標にムービークリップを配置する

    タイトル通りなのですが, 外部テキストファイルから座標データを読み込み, その座標にムービークリップを配置させたいと考えています. 外部テキストファイルは name=0, x=10, y=20 &name=1, x=11, y=21 &name=2, x=12, y=22  ・      ・   ・  ・      ・   ・  ・      ・   ・ として,1行ごとに名前と座標のデータがあります. 行数は可変で,行数だけムービークリップを配置したいと考えています. いろいろ調べてsplit関数などを使えば1行ごとに読み込めそうだということはわかりましたが, オブジェクト指向はほとんど使ったことが無いので悪戦苦闘しています(C言語はそれなりに使えます). どのようにすれば上記のようなプログラムをかけますでしょうか. どなたかよろしくお願いいたします. 環境 FLASH MX, WINDOWS XP

    • ベストアンサー
    • Flash
  • 外部テキストファイルより座標データを読み込み、ムービークリップを配置し画像を読み込ませる

    たびたびすみません、追記いたします。 外部テキストファイルから座標を読み込み、ムービークリップを作成し、そのムービークリップに座標を割り当て、画像を読み込ませ、さらにそのムービークリップのロールオーバー時に、あらかじめ作成しておいたテキストボックスに店名と簡単な店舗詳細を表示するというスクリプトを組みたいのですが、なかなかうまくいきません。使いどころとしては地図にそれらのムービークリップを配置し、そのランドマーク画像にロールオーバーしたら店舗詳細が現れるといったものを作りたいです。いろいろなサイトや本を参考にしながら下記スクリプトを作成致しましたが、うまくうごきません。たぶんloadMovieの読み込みのタイミングあたりがおかしいのだと思いますが、ムービークリップを新規に作成するときに、フレームアクションで画像の読み込みとその後の処理をどうやって記述したらよいのかがわかりません。まだまだ知識不足なもので、どなたかご教授頂けないでしょうか?よろしく御願い致します。 ↓フレームアクション↓ function makeMC(n) { for (i=1; i<=n; i++) { _root.createEmptyMovieClip("mc"+myLV["name"+i],i); mmLD = new Object(); mmLD.onData = function(LDOK) { if (LDOK) { _root["mc"+myLV["name"+i]].onPress = function() { _root.t_box.text_a.text = this["text_a"+i]; _root.t_box.text_b.text = this["text_b"+i]; }; _root["mc"+myLV["name"+i]].onRelease = _root["mc"+myLV["name"+i]].onReleaseOutside=function () { _root.t_box.text_a.text = ""; _root.t_box.text_b.text = ""; }; } else { trace("イメージファイルのロード失敗"); } mmLD.loadMovie("images/"+i+".jpg"); }; } } myLV = new LoadVars(); myLV.onLoad = function(TEXTOK) { if (TEXTOK) { makeMC(this.mcNum); for (i=1; i<=this.mcNum; i++) { _root["mc"+this["name"+i]]._x = this["x"+i]; _root["mc"+this["name"+i]]._y = this["y"+i]; } } else { trace("テキストファイルのロード失敗"); } }; myLV.load("mcdata.txt"); ↓あらかじめ作成したムービークリップの詳細↓ インスタンス名「t_box」というムービークリップの中に「text_a」「text_b」というダイナミックテキストが入っております。 ↓外部テキストファイル↓ mcNum=10& &name1=1&x1=20&y1=20&text_a1=サンプル店名(1)&text_b1=店の説明(1)& &name2=2&x2=40&y2=40&text_a2=サンプル店名(2)&text_b2=店の説明(2)& &name3=3&x3=60&y3=60&text_a3=サンプル店名(3)&text_b3=店の説明(3)& &name4=4&x4=80&y4=80&text_a4=サンプル店名(4)&text_b4=店の説明(4)& &name5=5&x5=100&y5=100&text_a5=サンプル店名(5)&text_b5=店の説明(5)& &name6=6&x6=120&y6=120&text_a6=サンプル店名(6)&text_b6=店の説明(6)& &name7=7&x7=140&y7=140&text_a7=サンプル店名(7)&text_b7=店の説明(7)& &name8=8&x8=160&y8=160&text_a8=サンプル店名(8)&text_b8=店の説明(8)& &name9=9&x9=180&y9=180&text_a9=サンプル店名(9)&text_b9=店の説明(9)& &name10=10&x10=200&y10=200&text_a10=サンプル店名(10)&text_b10=店の説明(10) どうかよろしく御願い致します。

    • ベストアンサー
    • Flash
  • 高校教科書では、図形を回転させる?座標を回転させる?

    たとえば、2次曲線 x^2+xy+y^2=1 のグラフを書いたり、面積を求めたり、形状を調べるには、標準形にすることがよくあります。 高校教科書でそれらのことを説明する場合、 図形を回転させているのでしょうか? それとも、座標を回転させているのでしょうか? 実質的には同等なのですが、どちらをメインにするかで確実に差異があると思います。 個人的には、現在の高校教科書では図形を回転させる立場、 数十年前の教科書では、座標を回転させる立場で書かれていたと思っているのですが、どうなのでしょうか? 大学の教科書、または、世界的な傾向としては、どうなのでしょうか?

  • 他のサイトでは動くのに、gooでは動かない、なぜ??

    マウスストーカーですが、他のサイトでは動きます(確認済み)が ウェブのgooのmainに貼り付けたら動きません、何故ですか? なお、ソースファイルは本より取り込みました。 -----[SRCE]----- <SCRIPT language='JavaScript'> str_x=0; str_y=-100; pn=1; var numb=35; for(i=0; i<=numb; i++) { document.write('<SPAN ID=MS'+i+' CLASS=stalker STYLE=position:absolute;left:-100;top:-100px;><IMG SRC=http://userimage.gaiax.com/***/**/**.gif></SPAN>'); } function Imagemove(){str_x=document.body.scrollLeft+window.event.clientX; str_y=document.body.scrollTop+window.event.clientY; } document.onmousemove=Imagemove; function stalker(){document.all['MS'+pn].style.top=str_y+10; document.all['MS'+pn].style.left=str_x+10;pn=pn%numb+1; setTimeout('stalker()'); } window.onload=stalker </SCRIPT> -----[EOF]----- よろしくお願いいたします。 公開されますから、URLの1部のディレクトリーと ファイル名は**に置き換えています。

  • ポップアップブロック付きのブラウザ(IE8)で、window.open

    ポップアップブロック付きのブラウザ(IE8)で、window.openをつかって小窓を二つ出したい。 表題の通り、ポップアップブロックに引っかかってしまい、2つの小窓が出せません。 現状は、1つだけ小窓が立ち上がる状態です。 理想のタイミングは、エンターページをクリックすると、window.openが実行され 2つの小窓が立ち上がるというのが理想です。 以下に現在のスクリプトをコピペ致します。 <script language="JavaScript"> moveTo(0,0); resizeTo(screen.width,screen.height); var g_pop01; var g_pop02; function open_pop(){ var w_Width1 = 280 var w_Width2 = 567 var w_Height1 = 540 var w_Height2 = 540 var w_space = 22 var x1 = (screen.availWidth - w_Width1 - w_Width2 - w_space)/2; var x2 = x1 + w_Width1 + w_space var y1 = (screen.availHeight - w_Height1)/2; var y2 = (screen.availHeight - w_Height2)/2; g_pop01 = window.open("left2.swf?nowX="+x1+"&nowY="+y1,"flash_pop1",'toolbar=0,menubar=0,scrollbars=no,resizable=no,width='+w_Width1+',height='+w_Height1+',left='+x1+',top='+y1); g_pop02 = window.open("right2.swf?nowX="+x2+"&nowY="+y2+"&guideX="+x1+"&guideY="+y1,"flash_pop2",'toolbar=0,menubar=0,scrollbars=no,resizable=no,width='+w_Width2+',height='+w_Height2+',left='+x2+',top='+y2); } </script> </head> <body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0 scroll="no" bgcolor="#000000"> <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0"> <form name="frm2"> <input type="Hidden" name="fov" value="0"> </form> <tr> <td align="center" valign="middle"> <table width="484" height="260" border="0"> <tr> <td><img src="img/logo_484x260_2.png" border="0" usemap="#Map" LANGUAGE=javascript onClick="open_pop()"> <map name="Map"> <area shape="rect" coords="4,2,480,254" href="index.html"> </map></td> </tr> </table> </td> </tr> </table> </body> </html>

  • ビットマップを二値化した後の座標取得のご相談

    ビットマップを二値化した後の座標取得のご相談 最近VB6.0からVC++2008(Express Edition)に乗り換えて画像処理を試みています(WinXP).現在,長方形が写っているビットマップ画像を二値化して,指定範囲内の長方形の平均高さ(白を抽出)を調べようとしています.WEBや文献など調べて,二値化するところまではできたのですが,二値化後の白黒画像の座標値の読み方が分からないため,長方形の高さを算出することができません.もしよろしければご助言いただけましたら幸いに思います. ─────────────────────────────────── VB6.0プログラム(二値化後の処理の部分) Dim Xmin As Double, Xmax As Double //X方向 Dim Ymin As Double, Ymax As Double //Y方向 Dim SumY As Double, AveY As Double Dim Pix As Double ' Xmin = 0 Xmax = Shape1.Width SumY = 0  //長方形の高さの合計 AveY = 0  //長方形の高さの平均 ' For X = Shape1.Left To Shape1.Left + Shape1.Width Ymin = 0 Ymax = 0 ' For Y = Shape1.Top To Shape1.Top + Shape1.Height //囲んだ四角部分において '   //※この下の部分をVC++2008でどのようにすれはいいかわかりません・・・ If picturebox1.Point(X, Y) = RGB(255, 255, 255) Then //白があれば If Ymin = 0 Then //Yminが0であれば Ymin = Y //YminはY End If If Ymax < Y Then //YmaxがYより小さかったら Ymax = Y //YmaxはY End If End If ' Next Y SumY = SumY + Ymax - Ymin //Xごとの長方形の高さの合計 Next X ' AveY = SumY / Xmax //平均高さの算出 ─────────────────────────────────── ここからVC++2008(二値化と計算を一気に行えればいいなと思ってます) for (j = 0; j < rect.Height; j++) {  for (i = 0; i < rect.Width; i++){ //輝度値の取得 B = pBuf[i * Step + j * bmpData->Stride]; //青 G = pBuf[i * Step + 1 + j * bmpData->Stride]; //緑 R = pBuf[i * Step + 2 + j * bmpData->Stride]; //赤 //輝度値の設定(二値化) if ((B >= Threshold) || (G >= Threshold) || (R >= Threshold)) { //白に変換  pBuf[i * Step + j * bmpData->Stride] = 255; //青  pBuf[i * Step + 1 + j * bmpData->Stride] = 255; //緑  pBuf[i * Step + 2 + j * bmpData->Stride] = 255; //赤  //※ここに何かいれればいいと思うのですが,上記の  //※If(picturebox1.Point(X,Y)=RGB(255,255,255))に代わる書き方が分かりません… } else { //黒に変換 pBuf[i * Step + j * bmpData->Stride] = 0; //青 pBuf[i * Step + 1 + j * bmpData->Stride] = 0; //緑 pBuf[i * Step + 2 + j * bmpData->Stride] = 0; //赤 } } 参照WEB http://imagingsolution.blog107.fc2.com/blog-entry-40.htm