Indexへ
(11648)//【11634】//(*)
------------------------
【タイトル】Lite & Seen Lite / JW_CAD 外部変形 / DOSによるプログラムの研究報告(2)
【記事番号】 11634 (*)
【 日時 】07/12/30 10:59
【 発言者 】Kazuo Miyake
【 リンク 】http://www17.ocn.ne.jp/~lite/



 MS-DOSのコマンド(Windows2000 から) と
AWK や RUBYを利用して 簡単な外部変形のプ
ログラムを考えてみました。


1. 2点で円を描くプログラム

@rem 円を描く
@echo off
for /f "tokens=1*" %%i in (jwc_temp.txt) do (
 if %%i EQU hp1- set p1=%%j
 if %%i EQU hp2 set p2=%%j
)
call:ci %p1% %p2% > jwc_temp.txt
exit

:ci
echo %* | jgawk '{ OFMT="%%.15g"; print "ci",$1,$2,sqrt(($3-$1)^^2+($4-$2)^^2) }'
goto:eof

REM #jww
REM #1- 円の中心を指示してください。
REM #2 円周上の点を指示してください。
REM #e

→ ruby -x の場合
:ci
ruby -x %~f0 %*
goto:eof
#!ruby
x1,y1,x2,y2 = $*.map{ |x| x.to_f }
puts "ci %s %s %s" % [ x1,y1,Math.hypot(x2-x1,y2-y1) ]
__END__


2. 線長(作図画面のスケール)を計測表示するプログラム

@rem 線長(作図画面のスケール)を計測表示する
@echo off
( findstr ".*" jwc_temp.txt
) | jgawk '/^^[ ]/ ^&^& NF==4{ printf "h#L = %%.03f ",sqrt(($3-$1)^^2+($4-$2)^^2) ^> "jwc_temp.txt" }'
exit

REM #jww
REM #1ln 線を指示してください。
REM #e

→ ruby -anx の場合
findstr ".*" jwc_temp.txt | ruby -anx %~f0
#!ruby
BEGIN{ $>=open("jwc_temp.txt","w") }
case $_
when /^[ ]/
 if $F.size == 4
  x1,y1,x2,y2 = $F.map{ |x| x.to_f }
  puts "h#L = %.03f " % Math.hypot(x2-x1,y2-y1)
 end
end
__END__


3. 表示画面のスケールをコメント表示するプログラム

@rem スケールを取得する hs
@echo off
for /f "tokens=1*" %%i in (jwc_temp.txt) do (
 if %%i EQU hs set hs=%%j
 if not defined lg call:lg %%i
)
call:hs %hs% > jwc_temp.txt
exit

:hs
echo %* | jgawk -v lg=%lg% '{ for(i=1;i^<=NF;i++) hs[sprintf("%%x",i-1)]=$i; print "h#S=1/"hs[lg] }'
goto:eof

:lg
set x=%1
if %x:~0,2% EQU lg set lg=%x:~2,1%
goto:eof

REM #jww
REM #e


 バッチファイルだけでも アイデア次第で
外部変形機能を 利用することができるよう
です。

 皆様方のご健康とご活躍をお祈り申し上
げます。


       記録 2007.12.30 三宅