文字下線調整2
指定長さの下線を延長し、対象文字を下線の中心上に移動させる外部変形。
2025/6/15 更新
※範囲選択後、文字下線(基準長)を指定してください。
◇バッチファイル
@REM 文字下線調整2
@echo off
REM #jww
REM #cd
REM #hm|左端 (L)|右端 (R)|
REM #:1
REM #:2
REM #h2 範囲内データ、範囲内外にまたがる線データ
REM #hc 範囲選択してください
REM #1ln 基準線を指示してください。
REM #e
:1
:2
jgawk '/hhp1ln/{jd=1}/^^ /{if(jd==1){lgh=$3-$1;print "std",lgh;jd=0}}' jwc_temp.txt>std.txt
copy std.txt+jwc_temp.txt
jgawk -vT=%1 -f ldr_adj2.awk std.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
del std.txt
goto end
文字コード ANSIで保存してください
:end
◇AWKスクリプト
#ファイル名 ldr_adj2.awk
# 文字コード ANSIで保存してください。
BEGIN{
#ユーザー設定
dx=10 #下線伸長
dy=0 #y座標補正
#初期設定
k=1000 #桁数
n=0 #カウンタ
}
#std.txt読込
#基準長取得
/std/{lgh=$2
lgh=lgh*k;lgh=rnd(lgh)/k;next} #四捨五入
/hq/{print "hd";next} #選択図形消去
#縮尺
/^hs/{for(i=0;i<=9;i++) S[i]=$(i+2);
S["a"]=$12;S["b"]=$13;S["c"]=$14;
S["d"]=$15;S["e"]=$16;S["f"]=$17}
/^lg/{lg=substr($1,3);sc=S[lg]}
#下線データ取得
/hhp1ln/{}
/^ /{
if($1<$3){xs=$1;xe=$3}else{xs=$3;xe=$1}
ul=xe-xs
ul=ul*k;ul=rnd(ul)/k #四捨五入
if($2==$4 && ul==lgh){
n=n+1
if(T==1){$1=$1-sc*dx} #左端伸長
if(T==2){$3=$3+sc*dx} #右端伸長
xc=$1+(lgh+sc*dx)/2;print;next}else{}
if(n==0){print "he対象線がありません";exit}
}
#文字データ取得
/^ch/{
yc=$3+sc*dy;wth=$4;chr=$6
print "cc1" #文字基点 中下
print "ch",xc,yc,wth,0,chr
next}
#
{print} #再作図
#ユーザー定義関数
function rnd(x){if(x>0) return int(x+0.5)}
| 固定リンク

コメント
somem様
お世話になっております
いつも公開されてる外部変形・線記号変形
有難く使わせて頂いております
ご相談ですが
図面に500以上のランダムに配置された連番を丸囲みしたいのですが可能でしょうか?その連番横に注釈文字が並列しているのですが指定文字ごとにレイヤに移動したいのですが可能でしょうか?
ご検討いただければ幸いです。
投稿: a.fujii | 2025年6月27日 (金) 06時48分
a.fujiiさん、こんにちは。
連番の文字属性(文字種)は、各図面で共通ですか?
同一レイヤグループ内に、連番と同じ文字種の文字列がありますか?
3桁の番号も、丸囲みにするのですか?
指定文字は、何種類ありますか?
移動先のレイヤ指定は、何が基準になりますか?
投稿: somem | 2025年6月27日 (金) 12時04分
somem様
お世話になっております
#連番の文字属性(文字種)は、各図面で共通です#か?
共通です
#同一レイヤグループ内に、連番と同じ文字種の文字列がありますか?
はい
#3桁の番号も、丸囲みにするのですか?
はい
#指定文字は、何種類ありますか?
8種類ぐらいあります
#移動先のレイヤ指定は、何が基準になりますか?
発注者のデータが番号、注釈とも同一文字種、同一レイヤ、に入ってくるのが事の発端ですので番号か注釈どちらかが選択出来て指定レイヤに移動で切ればイイのですが
宜しくお願い致します
投稿: a.fujii | 2025年6月27日 (金) 13時54分
a.fujiiさん、こんばんは。
番号(数字)をレイヤ移動する様にします。
投稿: somem | 2025年6月27日 (金) 19時21分