Page 511 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼曖昧文字重複処理 補助員 19/4/23(火) 3:12 ┣Re:曖昧文字重複処理 kojima 19/4/23(火) 12:42 ┃ ┣Re:曖昧文字重複処理 柳 絮 19/4/23(火) 15:51 ┃ ┗Re:曖昧文字重複処理 補助員 19/4/24(水) 1:57 ┃ ┗Re:曖昧文字重複処理 kojima 19/4/24(水) 12:46 ┃ ┗Re:曖昧文字重複処理 補助員 19/4/25(木) 13:52 ┣発想の転換 文字をずらして中抜文字 kojima 19/5/25(土) 12:59 ┗発想の転換 文字をずらして立体文字 kojima 19/5/25(土) 14:39 ─────────────────────────────────────── ■題名 : 曖昧文字重複処理 ■名前 : 補助員 ■日付 : 19/4/23(火) 3:12 -------------------------------------------------------------------------
協力事務所からJWWデータを いただいたのですがやたらデーターが重いのです 印刷出力では特に気にならないのですが、JWWで文字を拡大してみますと文字が重なっているようです 重複処理を行いましたが軽くなりません 座標ファイルで調べましたら下記のように同じ文字が複数(7個)作画されていました。 文字列に対してのみ複数重なっている状態です。 文字列1つに対してこのような状態です ------------------------------------------------------------------------- lg0 ly1 lc2 lt1 lw0 cn3 cn"$<MS ゴシック> # ly0 cn0 4.99533 4.99533 0.994833 2 cc0 ch -20.2988335 -0.0846664285714205 40.936333 0 "サンプルデータ ------1. cn0 4.99533 4.99533 0.994833 2 ch -20.6374995 0.0846665714285741 40.936333 0 "サンプルデータ -------2. cn0 4.99533 4.99533 0.994833 2 ch -20.2988335 -0.169333428571431 40.936333 0 "サンプルデータ -------3. cn0 4.99533 4.99533 0.994833 2 ch -20.6374995 -0.169333428571431 40.936333 0 "サンプルデータ -------4. cn0 4.99533 4.99533 0.994833 2 ch -20.2988335 0.16933357142857 40.936333 0 "サンプルデータ -------5. cn0 4.99533 4.99533 0.994833 2 ch -20.6374995 0.16933357142857 40.936333 0 "サンプルデータ -------6. cn0 4.99533 4.99533 0.994833 2 ch -20.4681665 -4.28571421906554e-007 40.936333 0 "サンプルデータ -------7. ----------------------------------------------------------------------------- そこで、このようなあいまいな文字の重複処理が可能な外部変形を探しております。 仕様書でほとんど文字の図面です。一個ずつ消す方法やエディター等で処理する方法も考えましたが 結構大変です。複数枚図面がありますが同じ状態です 処理後の文字位置のずれは、印刷上問題がありませんので 1.を採用して残りは消す方法でよいと 考えますが難しいでしょうか 外部変形で範囲を囲い処理してくれないかと思いました。 当方外部変形を作るまでのスキルがありません 文字ずれ寸法の範囲が調整できれば便利と考えますが、情報がありましたらお教えください よろしくお願いします。 |
batファイルにrubyスクリプトを記述するタイプの外部変形。 Rubyのインストールが必要。 ※この掲示板からコピペすると、行頭に半角スペースが付加される場合があります。(行頭の半角スペースを削除してください) @REM 重複した文字位置の整理 @echo off REM #jww REM #cd REM #zz REM #zc REM #h3 REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt > jwc_temp.txt pause goto end #!ruby -Ks include Math def moji_zahyo(moji_x,moji_y,moji_l,moji_arg,moji_h,cc) case cc when 0 x,y=moji_x,moji_y when 1 x=moji_x-moji_l/2*cos(moji_arg) y=moji_y-moji_l/2*sin(moji_arg) when 2 x=moji_x-moji_l*cos(moji_arg) y=moji_y-moji_l*sin(moji_arg) when 3 x=moji_x+moji_h/2*cos(moji_arg-PI/2) y=moji_y+moji_h/2*sin(moji_arg-PI/2) when 4 x=moji_x+moji_h/2*cos(moji_arg-PI/2)-moji_l/2*cos(moji_arg) y=moji_y+moji_h/2*sin(moji_arg-PI/2)-moji_l/2*sin(moji_arg) when 5 x=moji_x+moji_h/2*cos(moji_arg-PI/2)-moji_l*cos(moji_arg) y=moji_y+moji_h/2*sin(moji_arg-PI/2)-moji_l*sin(moji_arg) when 6 x=moji_x+moji_h*cos(moji_arg-PI/2) y=moji_y+moji_h*sin(moji_arg-PI/2) when 7 x=moji_x+moji_h*cos(moji_arg-PI/2)-moji_l/2*cos(moji_arg) y=moji_y+moji_h*sin(moji_arg-PI/2)-moji_l/2*sin(moji_arg) when8 x=moji_x+moji_h*cos(moji_arg-PI/2)-moji_l*cos(moji_arg) y=moji_y+moji_h*sin(moji_arg-PI/2)-moji_l*sin(moji_arg) end return x,y end moji_zahyo_array=[];hch=[] puts "hd","bz" n1=0;n2=0 while ARGF.gets xy=$_.split if xy[0]=~/^hq/ elsif xy[0]=~/^hch/ xy.each{|item|hch<<item.to_f} elsif xy[0]=~/^cn(\d+)/ print $_ cn=$1.to_i case cn when 0 moji_h=xy[2].to_f else moji_h=hch[cn] end elsif xy[0]=~/^cc/ print $_ cc=xy[0][2,1].to_i elsif xy[0]=~/^ch/ n1 += 1 moji_x=xy[1].to_f moji_y=xy[2].to_f moji_l=hypot(xy[4].to_f,xy[3].to_f) moji_arg=atan2(xy[4].to_f,xy[3].to_f) x,y=moji_zahyo(moji_x,moji_y,moji_l,moji_arg,moji_h,cc) if moji_zahyo_array.include?([x.round,y.round]) else n2 += 1 print $_ moji_zahyo_array<<[x.round,y.round] end else print $_ end end printf "h#削除された文字数#{n1-n2}\n" __END__ :end |
▼kojimaさん: お世話になります。 私もそんなデータを頂いた時がありました。 作者は、意図して作図をしたそうでした (何でも印刷をしたときに ハッキリ・クッキリ文字を再現したかったとか・・迷惑w) 動作確認をいたしました。 ありがたく使わせて頂きます。 動作環境 Win-7 64bit JWW7.11 ruby1.91(64bit) |
kojima 様 いつもありがとうございます。 こんなに早く公開してくださり感謝、感謝です。 この数日何だったのか?との思いです 早速この外変使用させていただきました。 結果 該当のファイル4回実行することで曖昧な文字の処理ができました。 1回目 5203 文字処理 2回目 371 文字処理 3回目 25 文字処理 4回目 4 文字処理 合計 5603 文字処理 大変助かりました。 どれぐらいのずれ距離の処理が可能なのか気になりましたので 手探りでずれ距離を探ってみました。 1/1 図面で 文字を左右上下に0.44mm(当方の場合は0.44mmが限度のように思います)程 度コピーして処理をしてみました 結果2回で9文字を8文字処理してくれました RN 様のご指摘も気になりましたので、変更してみました 該当のファイル3回実行することで曖昧な文字の処理ができました。 1回目 5203 文字処理 2回目 368 文字処理 3回目 32 文字処理 合計 5603 文字処理 わたくしの考えているオプション入力はこのずれ距離が1mmとか入力できる と便利かなと考えております。 図面の 重複処理を行い 次に この外変処理を 行う とにかく、すごいですよね 皆様 ありがとうございます |
▼補助員さん: > わたくしの考えているオプション入力はこのずれ距離が1mmとか入力できる と便利かなと考えております。 @REM 重複した文字位置の整理 @echo off REM #jww REM #cd REM #zz REM #zc REM #h3 REM #c重複しているとみなす縦横ズレの最大値(図寸) 無指定:1/_/a REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 > jwc_temp.txt pause goto end #!ruby -Ks include Math zure=1 while ARGV.size>1 case argument=ARGV.pop when /\/a/ zure=argument[2..-1].to_f end end def moji_zahyo(moji_x,moji_y,moji_l,moji_arg,moji_h,cc) case cc when 0 x,y=moji_x,moji_y when 1 x=moji_x-moji_l/2*cos(moji_arg) y=moji_y-moji_l/2*sin(moji_arg) when 2 x=moji_x-moji_l*cos(moji_arg) y=moji_y-moji_l*sin(moji_arg) when 3 x=moji_x+moji_h/2*cos(moji_arg-PI/2) y=moji_y+moji_h/2*sin(moji_arg-PI/2) when 4 x=moji_x+moji_h/2*cos(moji_arg-PI/2)-moji_l/2*cos(moji_arg) y=moji_y+moji_h/2*sin(moji_arg-PI/2)-moji_l/2*sin(moji_arg) when 5 x=moji_x+moji_h/2*cos(moji_arg-PI/2)-moji_l*cos(moji_arg) y=moji_y+moji_h/2*sin(moji_arg-PI/2)-moji_l*sin(moji_arg) when 6 x=moji_x+moji_h*cos(moji_arg-PI/2) y=moji_y+moji_h*sin(moji_arg-PI/2) when 7 x=moji_x+moji_h*cos(moji_arg-PI/2)-moji_l/2*cos(moji_arg) y=moji_y+moji_h*sin(moji_arg-PI/2)-moji_l/2*sin(moji_arg) when 8 x=moji_x+moji_h*cos(moji_arg-PI/2)-moji_l*cos(moji_arg) y=moji_y+moji_h*sin(moji_arg-PI/2)-moji_l*sin(moji_arg) end return x,y end moji_zahyo_array=[];hch=[] puts "hd","bz" n1=0;n2=0 while ARGF.gets xy=$_.split if xy[0]=~/^hq/ elsif xy[0]=~/^hch/ xy.each{|item|hch<<item.to_f} elsif xy[0]=~/^cn(\d+)/ print $_ cn=$1.to_i case cn when 0 moji_h=xy[2].to_f else moji_h=hch[cn] end elsif xy[0]=~/^cc/ print $_ cc=xy[0][2,1].to_i elsif xy[0]=~/^ch/ n1 += 1 moji_x=xy[1].to_f moji_y=xy[2].to_f moji_l=hypot(xy[4].to_f,xy[3].to_f) moji_arg=atan2(xy[4].to_f,xy[3].to_f) x,y=moji_zahyo(moji_x,moji_y,moji_l,moji_arg,moji_h,cc) array=moji_zahyo_array.find{|x1,y1|(x1-x).abs<zure && (y1-y).abs<zure} unless array n2 += 1 print $_ moji_zahyo_array<<[x,y] end else print $_ end end printf "h#削除された文字数#{n1-n2}\n" __END__ :end |
kojima 様 ありがとうございます。 バッチリ動いております。 当方の希望通り、ずれ位置を入力出来るようアップしてくださり感謝、感謝 です。 今後共よろしくお願いします。 |
10個の文字をずらして1個の中抜文字に見えるようにします。 @REM 微小なズレの文字を重ねて中抜文字(9+1文字) @echo off REM #jww REM #cd REM #zc REM #c描画する文字 無指定:JW_CAD/_/a REM #c文字幅 無指定:10/_/b REM #c文字高 無指定:10/_/c REM #c文字間隔 無指定:2/_/d REM #c文字色 無指定:6/_/e REM #c重ね文字の間隔 無指定:0.2/_/f REM #h0 REM #0 REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 %2 %3 %%4 %5 %6> jwc_temp.txt pause goto end #!ruby -Ks include Math str="JW_CAD" moji_w=10;moji_h=10;moji_d=2;moji_c=6 zure=0.2 while ARGV.size>1 case argument=ARGV.pop when /\/a/ str=argument[2..-1].to_f when /\/b/ moji_w=argument[2..-1].to_f when /\/c/ moji_h=argument[2..-1].to_f when /\/d/ moji_d=argument[2..-1].to_f when /\/e/ moji_c=argument[2..-1].to_i when /\/f/ zure=argument[2..-1].to_f end end while ARGF.gets xy=$_.split if xy[0]=~/^cn\"/ font=$_.chomp end end cn_a=["cn0",moji_w,moji_h,moji_d,moji_c] cn=cn_a.join("\s") puts "bz" puts cn puts "cc4" puts font+"!" printf("ch 0 0 1 0 \"%s\n",str) printf("ch %.2f 0 1 0 \"%s\n",zure,str) printf("ch -%.2f 0 1 0 \"%s\n",zure,str) printf("ch %.2f %.2f 1 0 \"%s\n",zure,zure,str) printf("ch 0 %.2f 1 0 \"%s\n",zure,str) printf("ch -%.2f %.2f 1 0 \"%s\n",zure,zure,str) printf("ch %.2f -%.2f 0 \"%s\n",zure,zure,str) printf("ch 0 -%.2f 1 0 \"%s\n",zure,str) printf("ch -%.2f -%.2f 1 0 \"%s\n",zure,zure,str) puts "cn0 #{moji_w} #{moji_h} #{moji_d} 2" puts font printf("ch 0 0 1 0 \"%s\n",str) __END__ :end |
文字を微小にずらして立体的に浮き上がって見せるようにします。 @REM 微小なズレの文字を重ねて立体文字 @echo off REM #jww REM #cd REM #zc REM #h3 REM #c重ね文字の間隔 無指定:0.2/_/a REM #c角度 無指定:30/_/b REM #c重ねる回数 無指定:10/_/c REM #k方向|1)右上り(L)|2)右下り(R)|3)左上り|4)左下り|/_/d REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 %2 %3 %4> jwc_temp.txt pause goto end #!ruby -Ks include Math zure=0.2;n=10;kakudo=30 while ARGV.size>1 case argument=ARGV.pop when /\/a/ zure=argument[2..-1].to_f when /\/b/ kakudo=argument[2..-1].to_f when /\/c/ n=argument[2..-1].to_i when /\/d/ muki=argument[2..-1].to_i end end k_arg=kakudo*PI/180 kei_x=1;kei_y=1 if muki==3 or muki==4 kei_x= -1 end if muki==2 or muki==4 kei_y= -1 end hcw=[];hch=[];hcd=[] while ARGF.gets xy=$_.split if xy[0]=~/^hq/ elsif xy[0]=~/^hcw/ xy.each{|item|hcw<<item.to_f} elsif xy[0]=~/^hch/ xy.each{|item|hch<<item.to_f} elsif xy[0]=~/^hcd/ xy.each{|item|hcd<<item.to_f} elsif xy[0]=~/^cn\"/ print $_ font=$_.chomp elsif xy[0]=~/^cn(\d+)/ cn=$_.chomp if xy.size==1 moji_w=hcw[$1.to_i] moji_h=hch[$1.to_i] moji_d=hcd[$1.to_i] else moji_w=xy[1].to_f moji_h=xy[2].to_f moji_d=xy[3].to_f end elsif xy[0]=~/^ch/ str=$'.chomp if $_=~/\"/ x,y,xw,yh=xy[1].to_f,xy[2].to_f,xy[3].to_f,xy[4].to_f arg=atan2(yh,xw) puts "cn0 #{moji_w} #{moji_h} #{moji_d} 2" n.times{ x=x+zure*cos(arg+k_arg)*kei_x y=y+zure*sin(arg+k_arg)*kei_y printf("ch %.11f %.11f %.11f %.11f \"%s\n",x,y,xw,yh,str) } puts cn print $_ else print $_ end end __END__ :end |