過去ログ

                                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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 100