« 直径寸法 | トップページ | PDF変換 »

2021年6月 2日 (水)

直径・半径寸法

前回の直径寸法に、半径寸法の作図を追加しました。
直径/半径、寸法値の内側/外側等の選択は必要ありません。
※寸法図形ではありません。

Photo_20210602073201

@if(0==1) //直径・半径寸法
@echo off
REM #jww
REM #cd
REM #1ci 円を選択してください
REM #hr
REM #e
cscript //nologo //e:jscript "%~f0" %*
copy temp.txt jwc_temp.txt
del temp.txt
goto:eof
@end
//ファイルオープン
fso=new ActiveXObject("Scripting.FileSystemObject")
r=fso.OpenTextFile("jwc_temp.txt")
w=fso.CreateTextFile("temp.txt")
//ユーザー設定
lc="lc1" //寸法線色
cn="cn4" //文字種
offset=0.5 //寸法線との間隔
aux_l=5 //補助線短
dis=5 //寸法値(外側)
dig=2 //小数点以下桁数
jrad=10 //内/外側切換半径
rk=1.5 //係数(半径選択)
//初期設定
dq="\"";sp=" " //ダブルコーテーション、スペース
arw=3 //矢印長さ
ang=Math.PI/12 //角度
/////jwc_temp.txt読込み
while (!r.AtEndOfLine){
line=r.ReadLine()
//
if(/hq/.test(line)){} //"hq"スキップ
//縮尺
else if(/hs/.test(line)){
hs=line.split(/\s+/).slice(1)
as_arr={'a':10,'b':11,'c':12,
'd':13,'e':14,'f':15} } //連想配列
//文字幅
else if(/hcw/.test(line)){
cw=line.split(/\s+/)
cnn=cn.substr(2)
cw=Number(cw[cnn]) }
//文字間隔
else if(/hcd/.test(line)){
cd=line.split(/\s+/)
cd=Number(cd[cnn])}
//縮尺
else if(/lg/.test(line)){
lg=line.substr(2) //レイヤグループ名(0~9、a~f)
if(lg.match(/\d/)){
s=hs[lg]} //尺度(1/s)
else{ s=hs[as_arr[lg]]}
//縮尺補正
arw=s*arw //矢印長さ
offset=s*offset //寸法線との間隔
cw=s*cw;cd=s*cd //文字幅
aux_l=s*aux_l //補助線短
dis=s*dis //寸法値(外側)
jrad=s*jrad ///内/外側切換半径
}
//指示点座標
else if(/^hp1ci/.test(line)){
id=line.split(/\s+/)
xi=Number(id[1]);yi=Number(id[2])
}
//円データ
else if(/^ci/.test(line)){
obj=line.split(/\s+/)
elc=obj.length //要素数
x0=Number(obj[1]);y0=Number(obj[2]) //円中心座標
rad=Number(obj[3]);dia=2*rad //直径
dig=Math.pow(10,dig)
dia=Math.round(dia*dig)/dig //直径四捨五入
rrad=Math.round(rad*dig)/dig //半径四捨五入
dia=dq+"φ"+dia
rrad=dq+"R"+rrad
if(elc==4){chr_n=dia.length} //寸法文字数
if(elc==8){chr_n=rrad.length} //寸法文字数
th=Math.atan2((yi-y0),(xi-x0)) //傾き(ラジアン)
if(xi<x0 && yi>y0){th=th-Math.PI} //傾き補正(左上)
if(xi<x0 && yi<y0){th=th+Math.PI} //傾き補正(左下)
}
else{
w.WriteLine(line)
}
} //while
/////
//寸法線座標
dx=rad*Math.cos(th);dy=rad*Math.sin(th)
drx=x0+dx;dry=y0+dy;dlx=x0-dx;dly=y0-dy
if(elc==4){dline=[dlx,dly,drx,dry]} //円寸法線
if(elc==8){ //円弧寸法線
if(xi>x0){
dline=[x0,y0,drx,dry]}
if(xi<x0){
dline=[x0,y0,dlx,dly]}
}
//矢印要素
dxu=arw*Math.cos(th+ang) //右上
dyu=arw*Math.sin(th+ang)
dxl=arw*Math.cos(th-ang) //右下
dyl=arw*Math.sin(th-ang)
//寸法値座標
if(elc==8){jrad=rk*jrad}
if(elc==8 && rad>=jrad){
if(xi>x0){
xd=x0+dx/2-offset*Math.sin(th)
yd=y0+dy/2-offset*Math.cos(th)}
if(xi<x0){
xd=x0-dx/2-offset*Math.sin(th)
yd=y0-dy/2-offset*Math.cos(th)}
}
else{
xd=x0-offset*Math.sin(th)
yd=y0+offset*Math.cos(th)}
//
if(rad>=jrad){jd=0 //内側矢印
urx=drx-dxl;ury=dry-dyl
lrx=drx-dxu;lry=dry-dyu
ulx=dlx+dxu;uly=dly+dyu
llx=dlx+dxl;lly=dly+dyl
}
else{ jd=1 //外側矢印
urx=drx+dxl;ury=dry+dyl
lrx=drx+dxu;lry=dry+dyu
ulx=dlx-dxu;uly=dly-dyu
llx=dlx-dxl;lly=dly-dyl
//補助線座標
aux_r=aux_l+(chr_n)*(cw/2+cd)
if(xi>x0){
aurx=drx+aux_r*Math.cos(th)
aury=dry+aux_r*Math.sin(th)
aulx=dlx-aux_l*Math.cos(th)
auly=dly-aux_l*Math.sin(th)
//寸法値(右外側)
xd=xd+(rad+dis)*Math.cos(th)
yd=yd+(rad+dis)*Math.sin(th)
}
else{jd=2
aurx=drx+aux_l*Math.cos(th)
aury=dry+aux_l*Math.sin(th)
aulx=dlx-aux_r*Math.cos(th)
auly=dly-aux_r*Math.sin(th)
//寸法値(左外側)
xd=xd-(rad+dis)*Math.cos(th)
yd=yd-(rad+dis)*Math.sin(th)
}
//補助線
auxl_r=[drx,dry,aurx,aury]
auxl_l=[dlx,dly,aulx,auly]
//補助線作図
w.WriteLine(lc)
if(elc==8 && xi<x0){}
else{
w.WriteLine("z3")
w.WriteLine(auxl_r.join(sp))
}
if(elc==8 && xi>x0){}
else{
w.WriteLine("z3")
w.WriteLine(auxl_l.join(sp))
}
}
//矢印
arw_ru=[urx,ury,drx,dry]
arw_rl=[lrx,lry,drx,dry]
arw_lu=[ulx,uly,dlx,dly]
arw_ll=[llx,lly,dlx,dly]
//矢印作図
w.WriteLine(lc)
if(elc==8 && xi<x0){}
else{
w.WriteLine("z3")
w.WriteLine(arw_ru.join(sp)) //右上
w.WriteLine("z3")
w.WriteLine(arw_rl.join(sp))
}
if(elc==8 && xi>x0){}
else{
w.WriteLine("z3")
w.WriteLine(arw_lu.join(sp))
w.WriteLine("z3")
w.WriteLine(arw_ll.join(sp))
}
w.WriteLine("#")
/////////
//寸法線・寸法値
w.WriteLine(jd)
w.WriteLine(dline.join(sp))
if(jd==0){w.WriteLine("cc1")}
if(jd==1){w.WriteLine("cc0")}
if(jd==2){w.WriteLine("cc2")}
w.WriteLine(cn)
if(elc==4){ dia=["cs",xd,yd,dx,dy,dia]
w.WriteLine(dia.join(sp))}
if(elc==8){ rrad=["cs",xd,yd,dx,dy,rrad]
w.WriteLine(rrad.join(sp))}
w.WriteLine("#")
//ファイルクローズ
r.Close();w.Close()
/////////
//2021.6.2 by somem

|

« 直径寸法 | トップページ | PDF変換 »

コメント

コメントを書く



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




« 直径寸法 | トップページ | PDF変換 »