引出線修正
引出線を修正する外部変形です。
当ブログで公開している、下記の外部変形で作図した引出線に利用できます。
引出線 引出線(文字種指定) 引出線(横)
注)汎用性はありませんが、
右側引出線は、左から右、左側引出線は、右から左に点を指示している場合は、
利用できる可能性があります。但し、矢印は、長さ3/角度15°となります。
<修正手順>
1.引出線/注記を範囲選択 ⇒ 左AM0時「確定 基点(free)」
文字を範囲選択⇒引出線(曲線属性)を(L)クリックで追加選択がおすすめ
2.新しい始点を指定 (L)/(R)クリック
元の始点を(R)クリックすると、終点側を修正
3.新しい終点を指定 (L)/(R)クリック
元の終点を(R)クリックすると、先端側を修正
※ 2.3で、新しい始点/終点を指定すると、全体移動になります。
緑表示(識別の為)の引出線を修正した例です。
--------------------
@REM 引出線修正
@echo off
REM
REM #jww
REM #cd
REM #h1 範囲選択
REM #hc 引出線/文字を選択してください
REM #1- 新しい始点を指定してください
REM #2 新しい終点を指定してください
REM #hr
REM #e
REM
jgawk -f leader_mod.awk jwc_temp.txt>temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
--------------------
<leader_mod.awk>
--------------------
##### 引出線修正 #####
BEGIN{
pi=atan2(0,-1);dq="\"";ns=0;
#誤差補正
k=10000;
#矢印長さ/角度
arw=3;th=pi/12;chk=(arw+0.5);
}
###データ取得
#縮尺
/^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];chk=(sc*chk)^2}
#座標値取得
/^hp1/{xs=$2;ys=$3}
/^hp2/{xe=$2;ye=$3}
#引出線データ取得
/^#/,/NF==0/{
if(substr($1,1,2)=="ly"){ly=$1}
if(substr($1,1,2)=="lc"){lc=$1}
if(substr($1,1,2)=="lt"){lt=$1}
if(NF==4){
if($1!=$3 && $2==$4){xbp=$1;ybp=$2;xbj=xbp*k;xbj=rnd(xbj)/k;if($1<$3){dir="rgt";xl=$3-$1}else{dir="lft";xl=$1-$3}}
else{if((($1-$3)^2+($2-$4)^2)<chk){next}else{ax1=$1;ay1=$2;ax2=$3;ay2=$4;axj=ax2*k;axj=rnd(axj)/k}}}
if(substr($1,1,2)=="cn"){cn=$1}
if($1=="ch"){ns=ns+1;xc[ns]=$2;yc[ns]=$3;cc[ns]=$6}
}
###
END{
#未実行指定
if(xbj!=axj){print "hq";exit}
#選択図形消去
print "hd";
#縮尺補正
al=sc*arw;
#文字位置
{for(i=1;i<=ns;i++){dxc[i]=xc[i]-xbp;dyc[i]=yc[i]-ybp}}
#引出線(新)角度
anr=atan2((ye-ys),(xe-xs));
#矢印(新)終点座標
xwu=xs+al*cos(anr+th);ywu=ys+al*sin(anr+th);
xwl=xs+al*cos(anr-th);ywl=ys+al*sin(anr-th);
#データ書出し
print ly;
print lc;
print lt;
#曲線属性化
print "pl";
printf "%.15g %.15g %.15g %.15g\n",xs,ys,xe,ye;
printf "%.15g %.15g %.15g %.15g\n",xs,ys,xwu,ywu;
printf "%.15g %.15g %.15g %.15g\n",xs,ys,xwl,ywl
if(dir=="rgt"){printf "%.15g %.15g %.15g %.15g\n",xe,ye,xe+xl,ye;print cn
for(i=1;i<=ns;i++){printf "%s %.15g %.15g %d %d %s\n","ch",xe+dxc[i],ye+dyc[i],5,0,cc[i]}}
if(dir=="lft"){printf "%.15g %.15g %.15g %.15g\n",xe,ye,xe-xl,ye;print cn
for(i=1;i<=ns;i++){printf "%s %.15g %.15g %d %d %s\n","ch",xe+dxc[i],ye+dyc[i],5,0,cc[i]}}
}
###定義関数
#四捨五入
function rnd(x){if(x>=0){return int(x+0.5)}else{return -int(-x+0.5)}}
#####
--------------------
| 固定リンク
コメント