Indexへ
(12743)//【12742】→(12744)
------------------------
【タイトル】円の中の文字編集について
【記事番号】 12742 (*)
【 日時 】06/06/12 11:02
【 発言者 】art

お世話になります。
三斜での面積計算を行っております。
図面内の三角形の番号を表示するため○に数字を連番で振っているのですが、
○の中心に合った文字が中心からずれるときがあります。(外部変形で番号を変更した場合等)このような場合に円の中心と文字列の基点(中中)を一括で合わせる方法はないでしょうか。
よろしくお願い致します。


Indexへ
(12742)←【12744】→(12761)
------------------------
【タイトル】Re(1):円の中の文字編集について
【記事番号】 12744 (12742)
【 日時 】06/06/12 11:16
【 発言者 】鈴木

▼artさん:

>三斜での面積計算を行っております。
>図面内の三角形の番号を表示するため○に数字を連番で振っているのですが、
>○の中心に合った文字が中心からずれるときがあります。(外部変形で番号を変更した場合等)このような場合に円の中心と文字列の基点(中中)を一括で合わせる方法はないでしょうか。

●後から変更する方法をご存知の方が居ればアドバイスを待ってください。
私は線記号変形の公開されているものをダウンロードして使っています。
○の中に3桁程度の数字あるいはアルファベット混成の文字を入れるものです。
大きさが希望のものかわかりませんがこれは便利に使っています。
座標番号にも使えます。

miyaさんの線記号変形をDLできるサイトを紹介します。
http://www.vector.co.jp/soft/dos/business/se188392.html?site=n


Indexへ
(12744)←【12761】→(12762)
------------------------
【タイトル】Re追伸
【記事番号】 12761 (12744)
【 日時 】06/06/12 16:56
【 発言者 】鈴木

>▼artさん:

今日使っていて、通り芯記号も室名枠(コメント枠?)も準備されている線記号変形だと
思い出しました。
大きさも様々なバリエーションがあります。

>miyaさんの線記号変形をDLできるサイトを紹介します。
>http://www.vector.co.jp/soft/dos/business/se188392.html?site=n


Indexへ
(12761)←【12762】→(12772)
------------------------
【タイトル】Re(2):円の中の文字編集について
【記事番号】 12762 (12744)
【 日時 】06/06/12 17:10
【 発言者 】art modanart@hotmail.com

▼鈴木さん:
何度も回答頂きありがとうございます。
紹介頂いた線記号変形は、私も中の一部ですが使用させて頂いております。
再度内容を確認してみます。
ただ、今回の場合は、既に別の外部変形で作成された連番(1〜150程度)についての編集でした。何かいい方法はないでしょうか。
円の中心に文字列の中心を一括で揃えるような外部変形をご存じないでしょうか。
よろしくお願い致します。


Indexへ
(12762)←【12772】→(12773)
------------------------
【タイトル】こんなかな?awkです
【記事番号】 12772 (12762)
【 日時 】06/06/12 20:55
【 発言者 】ko

batファイル

@REM 円中心に文字位置修正
ECHO off
REM バッチファイルによる設定
REM
REM #jww
REM #cd
REM #h1
REM #g0
REM #ht10
REM #ht20
REM #ht30
REM #ht40
REM #zz
REM #zw
REM #zc
REM #e
REM

jgawk -f 円中心に文字.awk jwc_temp.txt %1 > temp.txt
del input.txt
rename jwc_temp.txt input.txt
rename temp.txt jwc_temp.txt

:pause

以下awkファイル ファイルネーム『円中心に文字.awk』
BEGIN{fl="z";sc=0.001;
if(ARGC > 2){
for(i=2;i ARGV[i]="";
}
}
i=0;sr=0;
}
#初期値
/^hch/{ split($0,aph) };
/^lg/ {lg=substr($1,3);sc=asc[index(" 0123456789abcdef",lg)]};
/^ly/ && fl=="z"{fl=$0;if(lyr=="z"){lyr=substr($1,3)}};
/^cn/ && length($1) < 5 {mj=substr($1,3);
if(mj+0 == 0) {
apw[1]=$2;aph[1]=$3;apd[1]=$4;apc[1]=$5;
}};
/^cc/{cc=substr($0,3)}

#処理
/^hq/ {print "hd"; next}

# 文字データ
/^c[hs]/ {
if($5+0 == 0){
$6=substr($0,index($0,$6));
mx=$2;my=$3
mlen=$4;mhit=aph[mj+1]*sc;
xx=((cc % 3)-1)/2;yy=(int(cc/3)-1)/2;
mcx=mx-mlen*xx;mcy=my-mhit*yy;
j=0;s="";while(++j <= i){
if(cx[j] != ""){
p=sqrt((cx[j]-mcx)^2+(cy[j]-mcy)^2)
if(s == "" || s > p){s = p ;k=j;}
}
}
if(s != "" ){
if(s < cr[k]){++sr;
print "cc4"
$2=cx[k];$3=cy[k];
print $0
next;
}
}
}
}
# 円データ
/^ci/ && NF==4 {
cx[++i]=$2;cy[i]=$3;cr[i]=$4;}
{print $0 };
END{
#終了処理
#初期状態の復活
print "ly" fl
printf("h# 処理数 %i \n",sr);
};


Indexへ
(12772)←【12773】→(12937)
------------------------
【タイトル】Re(1):こんなかな?awkです
【記事番号】 12773 (12772)
【 日時 】06/06/12 22:37
【 発言者 】art

▼koさん:
ありがとうございました。
巧く動かす事が出来ました。これで、図面作成の効率が上がります。
本当に助かります。


Indexへ
(12773)←【12937】→(13012)
------------------------
【タイトル】Re(1):こんなかな?awkです
【記事番号】 12937 (12772)
【 日時 】06/06/19 10:14
【 発言者 】すずしん

koさん、artさんおはようございます。

koさん、すばらしい外変ありがとうございます。

横から申し訳ありませんが
楕円の場合にも出来るようにならないものでしょうか?

ずうずうしいお願いですが宜しくお願いします。


Indexへ
(12937)←【13012】→(13036)
------------------------
【タイトル】Re(2):こんなかな?rubyです
【記事番号】 13012 (12937)
【 日時 】06/06/20 00:29
【 発言者 】コジマ

▼すずしんさん:
>楕円の場合にも出来るようにならないものでしょうか?

Koさんのawk版 に対して ruby版です。

文字の基点が円内・楕円内でないと、実行されません。


◎バッチファイル(ファイル名 ch_ci_fit.bat)

@REM 円内文字を中心に移動
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht20
REM #ht30
REM #ht40
REM #zz
REM #zc
REM #zw
REM #h1
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks ch_ci_fit.rb temp.txt > jwc_temp.txt


◎スクリプトファイル(ファイル名 ch_ci_fit.rb)

include Math;en=[];by=[]
while ARGF.gets
    xy=split
    if xy[0]=~/^ci/
        if xy.size==4 or xy[4]==xy[5]
            xy.collect!{|item|item.to_f}
            en<        end
    end
end

puts "hd"
open("temp.txt","r"){|f|
    while line=f.gets
        xy=split
        if xy[0]=~/^hq/
        elsif xy[0]=~/^hs/
            print $_
            xy[1..-1].each{|item|by<        elsif xy[0]=~/^lg/
            print $_
            zusun=by[xy[0][2,1].hex]
        elsif xy[0]=~/^cc/
            print $_
            cc=xy[0]
        elsif xy[0]=~/^ch/
            if line=~/\"/
                moji=$'.chomp
            end
            mojix,mojiy=xy[1].to_f,xy[2].to_f

            n=0
            en.each{|item|
                if item.size==4
                    hen=1
                    ziku=0
                else
                    hen=item[6]
                    ziku=item[7]
                end
                x,y=mojix-item[1],mojiy-item[2]
                l=sqrt(x**2+y**2)
                arg=atan2(y,x)
                ziku_arg=ziku*2*PI/360
                lx=l*cos(arg-ziku_arg)
                ly=l*sin(arg-ziku_arg)

                if lx.abs<=item[3]+3*zusun
                    ry=sqrt((item[3]**2-lx**2).abs)
                end
                if ry && ly.abs<=ry.abs*hen+3*zusun
                    n+=1
                    mojix,mojiy=item[1],item[2]
                end
            }
            if n==0
                puts cc,$_
            else
                puts "cc4"
                printf("ch %.11f %.11f %.11f %.11f\"%s\n",
                                    mojix,mojiy,xy[3],xy[4],moji)
            end
        else
            print $_
        end
    end
}


Indexへ
(13012)←【13036】→(13040)
------------------------
【タイトル】Re(2):こんなかな?awkです
【記事番号】 13036 (12937)
【 日時 】06/06/20 20:06
【 発言者 】ko

バグってました orz 図面の尺度を取り込んでない・・・・
バグ修正と楕円に対応しました
awkファイルのみ修正

BEGIN{fl="z";
if(ARGC > 2){
for(i=2;i ARGV[i]="";
}
}
i=0;sr=0;
}
#初期値
/^hs/ { split($0,asc) };
/^hch/{ split($0,aph) };
/^lg/ {lg=substr($1,3);sc=asc[index(" 0123456789abcdef",lg)]};
/^ly/ && fl=="z"{fl=$0;if(lyr=="z"){lyr=substr($1,3)}};
/^cn/ && length($1) < 5 {mj=substr($1,3);
if(mj+0 == 0) {
apw[1]=$2;aph[1]=$3;apd[1]=$4;apc[1]=$5;
}};
/^cc/{cc=substr($0,3)}

#処理
/^hq/ {print "hd"; next}

# 文字データ
/^c[hs]/ {
if($5+0 == 0){
$6=substr($0,index($0,$6));
mx=$2;my=$3
mlen=$4;mhit=aph[mj+1]*sc;
xx=((cc % 3)-1)/2;yy=(int(cc/3)-1)/2;
mcx=mx-mlen*xx;mcy=my-mhit*yy;
j=0;s="";while(++j <= i){
if(cx[j] != ""){
p=sqrt((cx[j]-mcx)^2+(cy[j]-mcy)^2)
if(s == "" || s > p){s = p ;k=j;}
}
}
if(s != "" ){
if(s < cr[k]*ch[k]){++sr;
print "cc4"
$2=cx[k];$3=cy[k];cx[k]=""
print $0
next;
}
}
}
}
# 円データ
/^ci/ && NF==4 {
cx[++i]=$2;cy[i]=$3;cr[i]=$4;ch[i]=1}
# 楕円データ
/^ci/ && NF==8 && sei($6-$5)==0 && $8==0 {
cx[++i]=$2;cy[i]=$3;cr[i]=$4;ch[i]=$7}
{print $0 };
END{
#終了処理
#初期状態の復活
print "ly" fl
printf("h# 処理数 %i \n",sr);
};
function sei(atai){
return((atai+720)%360)}


Indexへ
(13036)←【13040】→(13041)
------------------------
【タイトル】ruby・awk共にありがとう
【記事番号】 13040 (13036)
【 日時 】06/06/21 09:13
【 発言者 】すずしん

コジマさん、koさん

おはようござります。

早速作っていただきありがとうございました。
DXFからのデータ修正がとても便利になりました。


Indexへ
(13040)←【13041】//(12745)
------------------------
【タイトル】Re(3):こんなかな?awkです
【記事番号】 13041 (13036)
【 日時 】06/06/21 09:38
【 発言者 】art modanart@hotmail.com

koさん バージョンアップありがとうございました。
コジマさん いつもお世話になります。
大事に使わせて頂きます。