Page 52 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼外部変形コマンドを探しております 構造関係者 15/05/11(月) 21:39 ┗Re(1):外部変形コマンドを探しております kojima 15/05/12(火) 8:38 ┗Re(2):外部変形コマンドを探しております 構造関係者 15/05/12(火) 14:20 ─────────────────────────────────────── ■題名 : 外部変形コマンドを探しております ■名前 : 構造関係者 ■日付 : 15/05/11(月) 21:39 -------------------------------------------------------------------------
構造関係の仕事をしています。 計算書から構造図を作成するソフトを使用していますが 伏図等では、部材の符号がばらばらで作図されてきます。 RG20→R・G・20と3文字構成になっております。 外部変形で文字結合を行っておりますが、文字数が1000文字程度の場合 範囲囲いの回数も400回程度と、とても面倒に感じております。 そこでお教えいただきたいのですが一度の範囲指定で文字結合が可能な 外部変形コマンドがあればお教えいただきたいのです。 縦文字、横文字があります。見かけ上ひとつの文字に表示してきますので(実際は3文字構成) 一定の間隔以内の文字を結合してくれればよいのではないでしょうか このような外部変形がありましたらお教えください |
バッチファイルにRubyスクリプトを記述した外部変形です。 バッチファイルだけで動作します。(但し、Rubyのインストールが必要) コピペ後、全角スペースを半角スペースに一括置換してください。 行頭に半角スペースが挿入される場合がありますので その時は、手作業で行頭の半角スペースを削除してください。 @REM 接近した文字の連結 @echo off REM #jww REM #cd REM #zz REM #h3 REM #hc文字を範囲選択してください。 文字基点は全て左下に変更されます REM #c文字間隔の最大値(図寸) 無指定:1.0/_/a REM #bz REM #e copy jwc_temp.txt temp.txt > nul ruby -x %~f0 temp.txt %1 > jwc_temp.txt pause exit #!ruby -Ks include Math str_d=1.0 while ARGV.size>1 case argument=ARGV.pop when /\/a/ str_d=argument[2..-1].to_f end end #文字データのクラス class Strdata attr_accessor :ch, :cn, :font, :str, :x1, :y1, :x2, :y2 def initialize(ch,cn,font,str,x1,y1,x2,y2) @ch=ch @cn=cn @font=font @str=str @x1=x1 @y1=y1 @x2=x2 @y2=y2 end end #文字列の配列str_aから連続した部分文字列を抽出してrenzokuに格納 def renzoku_moji(str_a,str_d) a=str_a.shift renzoku=[a] begin b=str_a.find{|item2| l=hypot(item2.x1-a.x2,item2.y1-a.y2) l<=str_d && a.ch==item2.ch && a.cn==item2.cn } if b a=b renzoku<<a str_a.delete_if{|item2|item2==b} end end while(b) begin a=renzoku[0] b=str_a.find{|item2| l=hypot(a.y1-item2.y2,a.x1-item2.x2) l<=str_d && a.ch==item2.ch && a.cn==item2.cn } if b a=b renzoku.unshift(a) str_a.delete_if{|item2|item2==b} end end while(b) return renzoku end while ARGF.gets if $_ =~ /^z3/ STDERR.puts "寸法値が選択されています 処理を中止します" exit end end puts "hd" str_a=[] open("temp.txt","r"){|f| while f.gets xy=$_.split if xy[0] =~ /^hq/ elsif xy[0] =~ /^cn\"/ font=$_.chomp elsif xy[0] =~ /^cn\d/ cn=$_.chomp elsif xy[0] =~ /^c[hv]/ if $_ =~ /\"/ moji=$'.chomp ch=xy[0] x1,y1=xy[1].to_f,xy[2].to_f l=hypot(xy[4].to_f,xy[3].to_f) arg=atan2(xy[4].to_f,xy[3].to_f) x2,y2=x1+l*cos(arg),y1+l*sin(arg) str_a<<Strdata.new(ch,cn,font,moji,x1,y1,x2,y2) end else print $_ end end } n=0 while str_a.size>0 renzoku=renzoku_moji(str_a,str_d) moji_a=[] renzoku.each{|item|moji_a<<item.str} string=moji_a.join puts renzoku[0].cn,renzoku[0].font ch=renzoku[0].ch x1,y1=renzoku[0].x1,renzoku[0].y1 xl=renzoku[0].x2-renzoku[0].x1 yl=renzoku[0].y2-renzoku[0].y1 printf("%s %.11f %.11f %.11f %.11f \"%s\n",ch,x1,y1,xl,yl,string) if moji_a.size>1 STDERR.puts moji_a.join(" & ")<<" → "<<moji_a.join n += 1 end end if n==0 STDERR.puts "処理した文字数:0" else STDERR.puts "↑","上記の文字を処理しました" end |
kojima 様 ありがとうございます いろいろなkojima様の外部変形を利用させていただいております。 改めて御礼申し上げます。 3万文字程度を実行しましたが少し時間がかかりますが見事に結合してくれました 今までの苦労は何だったのか 本当に有意義な外部変形を感謝しております。 今後の、益々のご活躍をお祈りして、お礼の言葉とさせていただきます。 ありがとうございました。 |