| 記事内容:[|]
面白そうなので作ってみました。実用になるでしょうか?
(名前や指定方法はご希望とちょっと違います。すいません。)
# レイヤも判定するようにした方が良かったかなぁ
d_hatch.bat
---------------------------ここから
@REM ハッチ斜線消去
@echo off
goto exe
REM #jw
REM #cd
REM #h1 #h1:範囲内のデータのみを選択
REM #hc ハッチを選択してください。
REM #1ln 消去するハッチ線を1本指定して下さい。
REM #e
:exe
rem ↓ 角度許容値(度)
gawk -f d_hatch.awk jwc_temp.txt 0.1 > temp.txt
copy temp.txt jwc_temp.txt > nul
---------------------------ここまで
d_hatch.awk
---------------------------ここから
BEGIN{
pi = atan2(0,-1);
diff = ARGV[2] + 0;
ARGV[2] = "";
count = 0;
print "hd"; # 選択データの消去
}
{
if ( $1 ~ /[0-9e\.\-\+].+/ && NF == 4 ) {
x1[ count ] = $1 + 0;
y1[ count ] = $2 + 0;
x2[ count ] = $3 + 0;
y2[ count ] = $4 + 0;
lca[ count ] = lc;
lta[ count ] = lt;
count ++;
}
else if ( /^hhp1ln/ ){
getline;
hangle = AtanDeg( $4 - $2, $3 - $1 );
hlc = lc;
hlt = lt;
}
else if ( /^lt/ ){
lt = $0;
print;
}
else if ( /^lc/ ){
lc = $0;
print;
}
else if ( /^hq/ ){
# 何もしない
}
else {
print;
}
}
END {
clc = lc;
clt = lt;
for ( i = 0; i < count; i ++ ){
angle = AtanDeg( y2[i] - y1[i], x2[i] - x1[i] );
if ( lca[i] == hlc && lta[i] == hlt ){
if ( hangle - diff > angle || angle > hangle + diff ){
PrintLine();
}
}
else {
PrintLine();
}
}
}
function PrintLine() {
if ( clc != lca[i] || clt != lta[i] ){
print lca[i];
print lta[i];
clc = lca[i];
clt = lta[i];
}
printf( "%.11f %.11f %.11f %.11f\n", x1[i], y1[i], x2[i], y2[i] );
}
function AtanDeg( y, x ) {
r = atan2( y, x );
d = r / pi * 180.0;
return d;
}
---------------------------ここまで
|