« 曲線属性解除 | トップページ | 文字列の和 »

2021年5月18日 (火)

敷地図・座標点

十年以上前に公開した 外部変形 ですが、Jscriptで作り直しました。
座標値は、スプリクト側で計算しているので、特別なExcelシートは不要です。

◇Excelシートの入力例
 ファイルは、data.csvとして、バッチファイルと同じフォルダに
 csv形式で保存してください。
Csv_data

csvデータの書換えを、バッチファイル上で行う場合には、
7行目に、下記のどちらかの行を追加してください。
start /w excel data.csv 
notepad data.csv

◇作図例
 座標点だけの場合は、レイヤ"0"を非表示にしてください。
Photo_20220811105401

@if(0==1) //敷地図・座標点
@echo off
REM #jww
REM #cd
REM #0 原点を指定してください
REM #e
type jwc_temp.txt data.csv>temp.txt
cscript //nologo //e:jscript "%~f0" %*
del temp.txt
goto:eof
※バッチファイル上でデータを書換える場合は、、
7行目にどちらかを追加
start /w excel data.csv
notepad data.csv
@end
//ファイルオープン
fso=new ActiveXObject("Scripting.FileSystemObject")
r=fso.OpenTextFile("temp.txt")
w=fso.CreateTextFile("jwc_temp.txt")
//初期設定
dq="\"";sp=" ";sh="/";cma=","
de="°";mn="’";se="”" //角度記号
wd=5;cdx=0;cdy=3 //文字位置調整
mrk="A" //符号
n=0
emsg="h#データがありません!"
//配列宣言
x=[];y=[];pt=[];chr=[];mark=[]
/////temp.txt読込み
while (!r.AtEndOfLine){
line=r.ReadLine()
//縮尺の取得
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(/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]]
}
//縮尺補正
wd=s*wd //中心線長さ
cdx=cdx*s;cdy=cdy*s} //文字シフト値
else if(/^\d/.test(line)){
n=n+1
data=line.split(cma) //カンマ区切り
dist=data[0] //距離
//角度変換
deg=data[1] //度
min=data[2] //分
sec=data[3] //秒
//ラジアン変換
th_rad=(Number(deg)+Number(min)
/60+Number(sec)/3600)*Math.PI/180
//符号・座標点
mrk_out=dq.concat(mrk,n,sp,dist,sh) //符号、距離
th_deg=deg.concat(de,min,mn,sec,se) //角度
mark[n]=mrk_out+th_deg
//座標計算
x[n]=dist*Math.cos(th_rad) //X座標
y[n]=dist*Math.sin(th_rad) //Y座標
}
else{ } //スキップ
} //while
//エラー処理
if(n==0){
w.WriteLine(emsg) //エラーメッセージ
WScript.Quit() //スプリクト終了
}
/////////
//表題作図
tle=dq+"コメント"+sp+"2021/**/**"
tle=["ch",0,6*s,5,0,tle]
w.WriteLine("ly1\ncc1") //レイヤ・文字基点(中下)
w.WriteLine(tle.join(sp))
//中心線作図
cent_h=[-wd,0,wd,0]
cent_v=[0,-wd,0,wd]
w.WriteLine("ly1\nlc2\nlt5") //レイヤ・線色・線種
w.WriteLine(cent_h.join(sp))
w.WriteLine(cent_v.join(sp))
//原点・座標点の作図
w.WriteLine("ly2\npt 0 0\ncc0")
for(i=1;i<=n;i++){
pt=["pt",x[i],y[i]]
w.WriteLine(pt.join(sp))
}
//符号・座標点
w.WriteLine("ly3") //レイヤ指定
for(i=1;i<=n;i++){
chr=["ch",x[i]+cdx,y[i]+cdy,5,0,mark[i]]
w.WriteLine(chr.join(sp))
}
//敷地図
w.WriteLine("ly0\nlc3\nlt5") //レイヤ・線色・線種
for(i=1;i<=n;i++){
if(i==n){
ln=[x[i],y[i],x[1],y[1]]}
else{ln=[x[i],y[i],x[i+1],y[i+1]]
}
w.WriteLine(ln.join(sp))
}
//ファイルクローズ
r.Close();w.Close()
/////
//2021.5.18 by somem

|

« 曲線属性解除 | トップページ | 文字列の和 »

コメント

コメントを書く



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




« 曲線属性解除 | トップページ | 文字列の和 »