« 法勾配 | トップページ | 指定文字変更・削除 »

2023年12月15日 (金)

勾配作図

斜線または、標高から各種勾配を作図する外部変形。

◇斜線選択(横断面図に適用)
 斜線選択(複数可)→点指示終了(左AM0時)
Photo_20231215001901
◇標高選択(平面図に適用)
 2地点の標高を選択
Photo_20231215122401
※勾配は、書込み文字種で作図

◇バッチファイル
@REM 勾配作図
@echo off
goto %1
REM #jww
REM #cd
REM #hm|勾配(L)|法勾配(R)|標高勾配(3)|標高法勾配(4)|
REM #:1
REM #:2
REM #1ln 斜線を選択してください(L)
REM #99#
REM #hr
REM #e
REM #:3
REM #:4
REM #1ch 標高を選択してください(L)
REM #2ch 標高を選択してください(L)
REM #hr
REM #e
:1
:2
jgawk -vT=%1 -f grade.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:3
:4
jgawk -vT=%1 -f grade2.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
goto end
:end

◇AWKスクリプト(斜線用)
##### grade.awk
BEGIN{
dq="\"" #ダブルコーテーション
k=100 #小数点以下桁数2
ntp="1:" #法勾配
per="%" #パーセント
perm="‰" #パーミル
sp=" " #スペース
larw="←" #矢印
rarw="→" #矢印
}
##
/^ /{
#始点座標変換(左→右)
if($1>$3){
xs=$3;ys=$4;xe=$1;ye=$2;dir=-1}
else{xs=$1;ys=$2;xe=$3;ye=$4;dir=1}
if(xs==xe || ys==ye){} #水平/垂直線除外
else{
dx=xe-xs;dy=ye-ys
grd=dy/dx #勾配
n=dx/dy #法勾配
if(grd<0){grd=-1*grd;n=-1*n;arw=-1} #絶対値
else{arw=1} 
#単位判定
if(grd>=0.01){grd=grd*100;un=1}
else{grd=grd*1000;un=2}
#四捨五入
grd=int(grd*k+0.5)/k
n=int(n*k+0.5)/k
#文字データ
#勾配
if(un==1){
if(arw<0){grd=dq grd per sp rarw}
else{grd=dq larw sp grd per}}
else{
if(arw<0){grd=dq grd perm sp rarw}
else{grd=dq larw sp grd perm}}
#法勾配
n=dq ntp n
#作図
xc=(xs+xe)/2;yc=(ys+ye)/2 #文字基点
print "cc1" #文字基点(中下)
if(T==1){print "ch",xc,yc,dx,dy,grd} #勾配
if(T==2){print "ch",xc,yc,dx,dy,n}}} #法勾配

◇AWKスクリプト(標高用)
##### grade2.awk
BEGIN{
dq="\"" #ダブルコーテーション
k=100 #小数点以下桁数2
ntp="1:" #法勾配
per="%" #パーセント
perm="‰" #パーミル
sp=" " #スペース
larw="←" #矢印
rarw="→" #矢印
i=1
}
##
/^ch/{
x[i]=$2;y[i]=$3
split($6,chr,"\"");h[i]=chr[2];i=i+1
}
END{
if(h[1]>h[2]){hs=h[1];xs=x[1];ys=y[1]
he=h[2];xe=x[2];ye=y[2]}
else{
hs=h[2];xs=x[2];ys=y[2]
he=h[1];xe=x[1];ye=y[1]}
#距離
dis=sqrt((xe-xs)^2+(ye-ys)^2)
grd=(he-hs)*1000/dis #勾配
n=dis/(he-hs)/1000 #法勾配
if(grd<0){grd=-1*grd;n=-1*n} #絶対値
else{} 
if(grd>=0.01){grd=grd*100;un=1}
else{grd=grd*1000;un=2}
#四捨五入
grd=int(grd*k+0.5)/k
n=int(n*k+0.5)/k
#勾配
if(un==1){
if(xs<xe){grd=dq grd per sp rarw}
else if(xs==xe){grd=dq grd per sp rarw}
else if(ys==ye && xs<xe){grd=dq grd per sp rarw}
else if(ys==ye && xs>xe){grd=dq larw sp grd per}
else{print NG;grd=dq larw sp grd per}}
else{
if(xs<xe){grd=dq grd perm sp rarw}
else if(xs==xe){grd=dq grd perm sp rarw}
else if(ys==ye && xs<xe){grd=dq grd perm sp rarw}
else if(ys==ye && xs>xe){grd=dq larw sp grd perm}
else{grd=dq larw sp grd perm}}
#法勾配
n=dq ntp n
#作図
xc=(xs+xe)/2;yc=(ys+ye)/2 #文字基点
if(xs>xe){dx=(xs-xe);dy=(ys-ye)}
else{dx=(xe-xs);dy=(ye-ys)}
print "cc1" #文字基点(中下)
if(T==3){print "ch",xc,yc,dx,dy,grd} #勾配
if(T==4){print "ch",xc,yc,dx,dy,n}} #法勾配

|

« 法勾配 | トップページ | 指定文字変更・削除 »

コメント

somem様
お世話になっております

早速のご対ありがとうございました。
有難く使わせて頂きます

投稿: a.fujii | 2023年12月15日 (金) 14時22分

コメントを書く



(ウェブ上には掲載しません)




« 法勾配 | トップページ | 指定文字変更・削除 »