« 微小誤差 | トップページ | 小数点位置揃え »

2022年11月 5日 (土)

文字整列

文字列を整列させる外部変形です。
対象文字は、水平/垂直横文字、水平/垂直縦文字
操作は、範囲選択→作図位置指定です。
注)文字間は、バッチファイルで指定してください。
    初期設定値は、1mm (図寸)

Photo_20221105201801

2022.11.07 スプリクト修正

@if(0==1) //文字整列
@echo off
goto %1
REM #jww
REM #cd
REM #hm|右下(L)|中下(R)|左下(3)|
REM #:1
REM #:2
REM #:3
REM #h3 範囲内の文字を選択
REM #0 作図位置を指示してください
REM #e
:1
:2
:3
echo sel %1 >>jwc_temp.txt
cscript //nologo //e:jscript %0 %1
copy temp.txt jwc_temp.txt
del temp.txt
goto:eof
@end
fs=new ActiveXObject( "Scripting.FileSystemObject" )
r=fs.OpenTextFile("jwc_temp.txt")
w=fs.CreateTextFile("temp.txt")
//ユーザー設定
chsp=1 //文字間
//初期設定
x0=0;y0=0 //作図原点
sp=" " //スペース
i=0;j=0;k=0 //カウンタ
//配列
s_chr=[];sort=[];chr=[]
//テキストデータ読込み
while (!r.AtEndOfLine) {
line=r.ReadLine()
if(/hq/.test(line)){
// w.WriteLine("hd") //元図を消去
}
//縮尺取得
else if(/hs/.test(line)){
hs=line.split(/\s+/)
for(i=0;i<=9;i++){hs[i]=hs[i+1]}
hs["a"]=hs[11];hs["b"]=hs[12];hs["c"]=hs[13]
hs["d"]=hs[14];hs["e"]=hs[15];hs["f"]=hs[16]}
/////
else if(/lg/.test(line)){
lg=line.substr(2)
s=hs[lg]} //尺度(1/S)
//文字高取得
else if(/hch/.test(line)){
hch=line.split(/\s+/)
for(i=0;i<=9;i++){hch[i]=hch[i+1]}}
//文字種取得
else if(/cn/.test(line)){
cn=line.split(/\s+/)
ucht=Number(cn[2])
cnn=cn[0].substr(2)
cn=cn[0].substr(3,1)
if(cn=="$"){w.WriteLine(line)} //フォント
else {
if(cnn==0){ //任意サイズ
dh=s*(ucht+chsp)
w.WriteLine(line)}
else { cht=Number(hch[cnn-1]) //文字高さ
dh=s*(cht+chsp) //行間隔
w.WriteLine(line)}}}
//文字データ取得
else if(/^c[hv]/.test(line)){
s_chr[j]=line.split(sp)
xy=line.split(sp)
dx=Math.round(xy[3])
dy=Math.round(xy[4])
if(j==0 && dy==0){dir=0}
else if(j==0 && dx==0){dir=1}
//エラー表示
else if(dx!=0 && dy!=0){
w.WriteLine("h#水平/垂直文字を選択してください")
WScript.Quit(0) }
else{}
j=j+1 }
//文字基点取得
else if(/sel/.test(line)){
sel=line.split(sp)
jd=sel[1]} //文字基点
else{w.WriteLine(line)} //設定情報
}
/////文字データ
//座標ソート
if(dir==0){
sort=ysort(s_chr)} //水平横文字
else if(dir==1){
sort=xsort(s_chr)} //垂直横文字
else{}
//文字作図
if(jd==1){
w.WriteLine("cc2")} //基点右下
else if(jd==2){
w.WriteLine("cc1")} //基点中下
else { w.WriteLine("cc0")} //基点左下
//
for(k=0;k<j;k++){
chr=sort[k]
if(dir==0){
chr[1]=x0;chr[2]=y0-k*dh}
else if(dir==1){
chr[1]=x0+k*dh;chr[2]=y0}
else{}
chr=chr.join(sp)
w.WriteLine(chr)}
/////ユーザー定義関数
function ysort(ch){
ch=ch.sort(
function(a,b){
return(Number(b[2])-Number(a[2]))
})
return ch}
function xsort(ch){
ch=ch.sort(
function(a,b){
return(Number(a[1])-Number(b[1]))
})
return ch}
w.Close();r.Close()

|

« 微小誤差 | トップページ | 小数点位置揃え »

コメント

コメントを書く



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




« 微小誤差 | トップページ | 小数点位置揃え »