Indexへ
(9141)//【8952】→(8953)
------------------------
【タイトル】JW_CAD 外部変形 / ruby -x による バッチに書くプログラムの研究報告
【記事番号】 8952 (*)
【 日時 】07/02/10 19:00
【 発言者 】Kazuo Miyake qqza3hq89@aioros.ocn.ne.jp
【 リンク 】http://www17.ocn.ne.jp/~lite/



 ruby や perl を利用すれば バッチファ
イルで完結する外部変形プログラムが作成
できることがわかりました。

 ruby -x や perl -x で起動すれば バッ
チファイルの #!ruby や #!perl 以降に書
いたプログラムを 実行する仕組みが 外部
変形でも利用できます。

 1行プログラムは MS-DOS の影響を直接
受けるため 「%」や「^」を 「%%」や「^^」
に書き換える必要がありましたが このやり
方は プログラムファイルをそのまま貼り付
けるだけで動きます。


 例えば、線を引くなら

@rem 「線を引く」
@echo off

ruby -x %~f0 jwc_temp.txt
exit

REM #jww
REM #1-始点を指示してください。 (L)free (R)Read
REM #2終点を指示してください。 (L)free (R)Read
REM #e

#!ruby
txt = ARGV[0]
if File.exist? txt
    hp = []
    f = open(txt,"r")
    while f.gets
        if $_ =~ /^hp[1-9][0-9]?/
            hp << $_.split()[1,2]
        end
    end
    f.close()
    g = open(txt, "w")
        for pt in hp
            g << "%s\n" % pt.join(" ")
        end
    g.close()
end

 のようになります。


 時刻を書き込むなら

@rem 時刻を書き込む
@echo off

ruby -x %~f0 jwc_temp.txt
exit

REM #jww
REM #0 時刻を書き込む基点を指示してください。
REM #e

#!ruby
txt = ARGV[0]
t = "\"%s" % Time.now
g = open(txt, "w")
    g << "%s\n" % ["ch",0,0,1,0,t].join(" ")
g.close()

 のようになります。


 ちょっとしたプログラムには 便利な方法
だと思います。


 では、皆様のご健康をお祈り申し上げます。

 2007.02.10 記録 三宅


Indexへ
(8952)←【8953】→(8956)
------------------------
【タイトル】Re(1):JW_CAD 外部変形 / ruby -x による バッチに書くプログラムの研究報告
【記事番号】 8953 (8952)
【 日時 】07/02/11 05:28
【 発言者 】スター

▼Kazuo Miyakeさん:
> ruby や perl を利用すれば バッチファ
>イルで完結する外部変形プログラムが作成
>できることがわかりました。
>
> ruby -x や perl -x で起動すれば バッ
>チファイルの #!ruby や #!perl 以降に書
>いたプログラムを 実行する仕組みが 外部
>変形でも利用できます。
>
> 1行プログラムは MS-DOS の影響を直接
>受けるため 「%」や「^」を 「%%」や「^^」
>に書き換える必要がありましたが このやり
>方は プログラムファイルをそのまま貼り付
>けるだけで動きます。
>
>
> 例えば、線を引くなら
>
>@rem 「線を引く」
>@echo off
>
>ruby -x %~f0 jwc_temp.txt
>exit
>
>REM #jww
>REM #1-始点を指示してください。 (L)free (R)Read
>REM #2終点を指示してください。 (L)free (R)Read
>REM #e
>
>#!ruby
>txt = ARGV[0]
>if File.exist? txt
>    hp = []
>    f = open(txt,"r")
>    while f.gets
>        if $_ =~ /^hp[1-9][0-9]?/
>            hp << $_.split()[1,2]
>        end
>    end
>    f.close()
>    g = open(txt, "w")
>        for pt in hp
>            g << "%s\n" % pt.join(" ")
>        end
>    g.close()
>end
>
> のようになります。
>
>
> 時刻を書き込むなら
>
>@rem 時刻を書き込む
>@echo off
>
>ruby -x %~f0 jwc_temp.txt
>exit
>
>REM #jww
>REM #0 時刻を書き込む基点を指示してください。
>REM #e
>
>#!ruby
>txt = ARGV[0]
>t = "\"%s" % Time.now
>g = open(txt, "w")
>    g << "%s\n" % ["ch",0,0,1,0,t].join(" ")
>g.close()
>
> のようになります。
>
>
> ちょっとしたプログラムには 便利な方法
>だと思います。
>
>
> では、皆様のご健康をお祈り申し上げます。
>
> 2007.02.10 記録 三宅

相談室のコジマさんの減衰曲線で実行したらOKでした。
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=18977;id=004

@REM 擬似sin減衰曲線
@echo off

copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 %3 %4 > jwc_temp.txt
exit

REM #jww
REM #cd
REM #h0
REM #c初期の1サイクル長(実寸) 無指定:100/_/a
REM #c初期の1サイクルの振幅(実寸) 無指定:300/_/b
REM #c1/2サイクルの分割数 無指定:20/_/c
REM #c振幅の減衰率 無指定:0.9/_/d
REM #1/始点を指示してください free(L) Read(R)
REM #2終点を指示(AM1:00ドラッグで15度毎解除) free(L) Read(R)
REM #e

#!ruby
include Math
pitch=100.0;sinpuku=300.0;bunkatu=20;biritu=0.9
while ARGV.size>1
  case argument=ARGV.pop
    when /\/a/
      pitch=argument[2..-1].to_f
    when /\/b/
      sinpuku=argument[2..-1].to_f
    when /\/c/
      bunkatu=argument[2..-1].to_i
    when /\/d/
      biritu=argument[2..-1].to_f
  end
end
while ARGF.gets
  xy=split
  ax,ay=xy[1].to_f,xy[2].to_f if xy[0]=="hp1-"
  bx,by=xy[1].to_f,xy[2].to_f if xy[0]=="hp2"
end
puts "pl"
x,y=bx-ax,by-ay
l,arg=sqrt(x**2+y**2),atan2(y,x)
tl=0
while tl  hh=sinpuku/2;p2=pitch/2;y_by=PI/2*hh/(p2/2)
  d_pi=PI/bunkatu;d_l=p2/bunkatu
  0.step(2*PI,d_pi){|i|
    y=(y_by*sin(i)*p2/PI)
    printf("%.11f %.11f\n",ax+(d_l*i/d_pi)*cos(arg)-y*sin(arg),ay+y*cos(arg)+(d_l*i/d_pi)*sin(arg))
  }
  ax += pitch*cos(arg)
  ay += pitch*sin(arg)
  sinpuku *= biritu
  pitch *= 1/biritu
  tl += pitch
end
puts "#"


Indexへ
(8953)←【8956】→(8967)
------------------------
【タイトル】Re(2):JW_CAD 外部変形 / ruby -x による バッチに書くプログラムの研究報告
【記事番号】 8956 (8953)
【 日時 】07/02/11 10:52
【 発言者 】菊水の旋風

Miyakeさん、スターさん、ご苦労様です。

この方法は便利です !!
私の方でも過日相談室で書いたJWW_SMPL.BATの円枠
対応スクリプトで実験しましたら上手くいきました
でご報告いたします。

下記をバッチファイル名をSMPLen.batとしてJWW_SMPL,exe
と同じ場所に置いてください。(通常はC:\jww)


@REM 三 斜 計 算(円枠対応)
@echo off
goto do%1
REM #jww
REM #cd
REM #hm |三 斜 計 算|BAT 編集|
REM #:1
REM #h1
REM #hc 【 三 斜 計 算 】 三角形を選択(三角形の辺 200 まで)   
REM #0 数値書き込み位置指示 (L)free (R)Read
REM #ht10
REM #ht20
REM #ht40
REM #hr
REM #e
REM
REM   追加オプション(指定レイヤに作図)
REM   /M* :文字種類指定、 「*」は文字種No1〜10 (無指定:2)
REM   /N* :初期番号指定、 「*」は1〜8001    (無指定:1)
REM   /L* :レイヤ指定、  「*」はレイヤ0〜F  (無指定:書込レイヤ )
REM   /K* :小数点以下有効桁数、  「*」は0〜3 (無指定:2)
REM
REM   /T* :三角形頂点に点を作図、 「*」 は 点種類No1〜9 (無指定:1)
REM   /E*.*:三角形頂点に円を作図、「*.*」 は円半径 mm  (無指定:1.0)
REM   /H* :三角形の辺を作図、   「*」 は 線色No1〜9  (無指定:1)
REM
REM   /S :敷地面積(小数点以下3桁を切り捨て)を作図
REM
REM #:2
REM #h0
REM #hr
REM #e

:do1
JWW_SMPL.EXE /S /M3 /N1 /L9 /E1.5 /K3
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt > jwc_temp.txt
rem pause
exit
goto END
:do2
start /w notepad.exe SMPLen.bat > jwc_temp.txt
goto END

#!ruby
#============= 設 定 ================================================
#
# 変更法 : " "の半角英数字を変更設定してファイルを上書き保存して下さい。
#
waku_en = "en" #番号枠種類 (円枠 → en : 楕円枠 → daen 枠無 → no )
waku_lc = "0"  #番号枠線色 (1〜9) 0の場合はSMPL.EXE既定線色
line_lc = "0"  #線頂点線色 (1〜9) 0の場合はSMPL.EXE既定線色
#
#=======================================================================
while ARGF.gets
 if $_ =~ /^ci/
  data = $_.split
  if data.size == 8 && data[6].to_f != 1
  data[6] = "1"
  en_kazari = data.join("\s")+"\n"
  if waku_lc != "0"
   print "lc"+waku_lc+"\n"
  end
  if waku_en == "en"
   print en_kazari
  elsif waku_en == "daen"
   print
  elsif waku_en == "no"

  else
   print "he 枠種類設定エラー\n"
   exit
  end
  else
  print
  end
 elsif $_ =~ /^lc/
  if line_lc == "0"
  print
  else
  print "lc"+line_lc+"\n"
  end
 else
  print
 end
end

:END


Indexへ
(8956)←【8967】//(8959)
------------------------
【タイトル】Re(3):JW_CAD 外部変形 / ruby -x による バッチに書くプログラムの研究報告
【記事番号】 8967 (8956)
【 日時 】07/02/12 11:29
【 発言者 】Kazuo Miyake qqza3hq89@aioros.ocn.ne.jp
【 リンク 】http://www17.ocn.ne.jp/~lite/



いろいろと実用的な利用方法があることがわかりました。
ありがとうございました。

DOSシェルのプログラムにも、まだ可能性が残っているの
かもしれません。この方法は GUI なども利用できると思
います。簡単な Ruby/Tk は 動作しました。

では 健康第一で お過ごしください。
          
               記録 三宅

>Miyakeさん、スターさん、ご苦労様です。
>
>この方法は便利です !!
>私の方でも過日相談室で書いたJWW_SMPL.BATの円枠
>対応スクリプトで実験しましたら上手くいきました
>でご報告いたします。
>
>下記をバッチファイル名をSMPLen.batとしてJWW_SMPL,exe
>と同じ場所に置いてください。(通常はC:\jww)
>
>
>@REM 三 斜 計 算(円枠対応)
>@echo off
>goto do%1
>REM #jww
>REM #cd
>REM #hm |三 斜 計 算|BAT 編集|
>REM #:1
>REM #h1
>REM #hc 【 三 斜 計 算 】 三角形を選択(三角形の辺 200 まで)   
>REM #0 数値書き込み位置指示 (L)free (R)Read
>REM #ht10
>REM #ht20
>REM #ht40
>REM #hr
>REM #e
>REM
>REM   追加オプション(指定レイヤに作図)
>REM   /M* :文字種類指定、 「*」は文字種No1〜10 (無指定:2)
>REM   /N* :初期番号指定、 「*」は1〜8001    (無指定:1)
>REM   /L* :レイヤ指定、  「*」はレイヤ0〜F  (無指定:書込レイヤ )
>REM   /K* :小数点以下有効桁数、  「*」は0〜3 (無指定:2)
>REM
>REM   /T* :三角形頂点に点を作図、 「*」 は 点種類No1〜9 (無指定:1)
>REM   /E*.*:三角形頂点に円を作図、「*.*」 は円半径 mm  (無指定:1.0)
>REM   /H* :三角形の辺を作図、   「*」 は 線色No1〜9  (無指定:1)
>REM
>REM   /S :敷地面積(小数点以下3桁を切り捨て)を作図
>REM
>REM #:2
>REM #h0
>REM #hr
>REM #e
>
>:do1
>JWW_SMPL.EXE /S /M3 /N1 /L9 /E1.5 /K3
>copy jwc_temp.txt temp.txt > nul
>ruby -x %~f0 temp.txt > jwc_temp.txt
>rem pause
>exit
>goto END
>:do2
>start /w notepad.exe SMPLen.bat > jwc_temp.txt
>goto END
>
>#!ruby
>#============= 設 定 ================================================
>#
># 変更法 : " "の半角英数字を変更設定してファイルを上書き保存して下さい。
>#
> waku_en = "en" #番号枠種類 (円枠 → en : 楕円枠 → daen 枠無 → no )
> waku_lc = "0"  #番号枠線色 (1〜9) 0の場合はSMPL.EXE既定線色
> line_lc = "0"  #線頂点線色 (1〜9) 0の場合はSMPL.EXE既定線色
>#
>#=======================================================================
> while ARGF.gets
> if $_ =~ /^ci/
>  data = $_.split
>  if data.size == 8 && data[6].to_f != 1
>  data[6] = "1"
>  en_kazari = data.join("\s")+"\n"
>  if waku_lc != "0"
>   print "lc"+waku_lc+"\n"
>  end
>  if waku_en == "en"
>   print en_kazari
>  elsif waku_en == "daen"
>   print
>  elsif waku_en == "no"
>
>  else
>   print "he 枠種類設定エラー\n"
>   exit
>  end
>  else
>  print
>  end
> elsif $_ =~ /^lc/
>  if line_lc == "0"
>  print
>  else
>  print "lc"+line_lc+"\n"
>  end
> else
>  print
> end
> end
>
>:END