Page 100 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼外変で図形を作成、仮表示を見ながら配置する方法 kojima 15/09/30(水) 12:48 ─────────────────────────────────────── ■題名 : 外変で図形を作成、仮表示を見ながら配置する方法 ■名前 : kojima ■日付 : 15/09/30(水) 12:48 -------------------------------------------------------------------------
☆を作成して仮表示を見ながら配置する外部変形です。 RubyとAutoITのインストールが必要です。 外部変形で座標ファイルを作成後、自動的に「座標ファイル」コマンドに切り換わり 外部変形で作成された座標ファイルを読み込みます。 @REM ☆の座標ファイル作成→座標ファイルで配置 @echo off REM #jww REM #cd REM #c外半径の入力 無指定:100/_/a REM #h0 REM #e copy jwc_temp.txt temp.txt > nul echo h#>jwc_temp.txt start ruby -x %~f0 temp.txt %1 goto end #!ruby -Ks require 'win32ole' include Math path=Dir.pwd $stdout=open("z_temp.txt","w") #線の作図 def sen(x1,y1,x2,y2) printf(" %.11f %.11f %.11f %.11f\n",x1,y1,x2,y2) end #sen1とsen2の延長線上の交点を返す def kouten(sen1,sen2) sen1x=sen1[2]-sen1[0] sen1y=sen1[3]-sen1[1] sen1xy=sqrt(sen1x**2+sen1y**2) sen1_arg=atan2(sen1y,sen1x) x1_1=sen1[0] x1_2=sen1[0]+sen1xy y1_1=sen1[1] y1_2=sen1[1] x=sen2[0]-sen1[0] y=sen2[1]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_1=sen1[0]+xy*cos(henkaku) y2_1=sen1[1]+xy*sin(henkaku) x=sen2[2]-sen1[0] y=sen2[3]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_2=sen1[0]+xy*cos(henkaku) y2_2=sen1[1]+xy*sin(henkaku) x=x2_2-x2_1 y=y2_2-y2_1 delta=y/x y=y1_1-y2_1 dx=y/delta kouten_x=x2_1+dx kouten_y=y1_1 x=kouten_x-x1_1 kouten_xt=x1_1+x*cos(sen1_arg) kouten_yt=y1_1+x*sin(sen1_arg) return [kouten_xt,kouten_yt] end #☆の作図 def star_draw(x,y,r,arg) kijun_kakudo=72*2*PI/360 kakudo=PI/2+arg point=[];sen_a=[] 5.times{ point<<[x+r*cos(kakudo),y+r*sin(kakudo)] kakudo += kijun_kakudo } sen1=[point[0][0],point[0][1],point[2][0],point[2][1]] sen2=[point[0][0],point[0][1],point[3][0],point[3][1]] sen3=[point[1][0],point[1][1],point[3][0],point[3][1]] sen4=[point[1][0],point[1][1],point[4][0],point[4][1]] sen5=[point[2][0],point[2][1],point[4][0],point[4][1]] x1,y1=kouten(sen1,sen4) sen(point[0][0],point[0][1],x1,y1) sen(point[1][0],point[1][1],x1,y1) x1,y1=kouten(sen1,sen3) sen(point[1][0],point[1][1],x1,y1) sen(point[2][0],point[2][1],x1,y1) x1,y1=kouten(sen3,sen5) sen(point[2][0],point[2][1],x1,y1) sen(point[3][0],point[3][1],x1,y1) x1,y1=kouten(sen2,sen5) sen(point[3][0],point[3][1],x1,y1) sen(point[4][0],point[4][1],x1,y1) x1,y1=kouten(sen2,sen4) sen(point[4][0],point[4][1],x1,y1) sen(point[0][0],point[0][1],x1,y1) end #以降メインルーチン include Math r=100 while ARGV.size>1 case argument=ARGV.pop when /\/a/ r=argument[2..-1].to_f end end star_draw(0,0,r,0)#☆の作図 $stdout.close str=path+"/z_temp.txt" str.gsub!("/","\\") #以降は「座標ファイル」コマンドへ移るスクリプト文 itx=WIN32OLE.new("AutoITX3.Control") itx.Opt("WinTitleMatchMode",2) itx.WinActivate("jw_win") itx.WinMenuSelectItem("jw_win","","[その他","座標ファイル") itx.ControlFocus("jw_win","条件設定","Button7") itx.ControlClick("jw_win","条件設定","Button7") itx.WinWaitActive("座標ファイル条件設定") itx.ControlFocus("座標ファイル条件設定","","Edit1") itx.ControlSetText("座標ファイル条件設定","","Edit1",str) itx.ControlFocus("座標ファイル条件設定","","Button18") itx.ControlClick("座標ファイル条件設定","","Button18") itx.WinWaitClose("座標ファイル条件設定") itx.ControlFocus("jw_win","ファイル読込","Button3") itx.ControlClick("jw_win","ファイル読込","Button3") __END__ :end |