Page 250 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼仮点消去 ケンジ 16/04/15(金) 16:26 ┗Re(1):仮点消去 kubo 16/04/15(金) 18:33 ┗Re(2):仮点消去 ケンジ 16/04/16(土) 11:03 ┗Re(3):仮点消去 kojima 16/04/17(日) 11:45 ┗補助色の実点を仮点に変更 kojima 16/04/17(日) 11:53 ─────────────────────────────────────── ■題名 : 仮点消去 ■名前 : ケンジ ■日付 : 16/04/15(金) 16:26 -------------------------------------------------------------------------
お世話になります。 仮点消去について教えてください。 普通では、点コマンド→仮点消去または、全仮点消去になります。 希望は、範囲選択→属性選択→仮点指定→実点、指定線色に変更したい。 要は、仮点を範囲選択で補助線色の実点にしたい。 外部変形とかで、ありますか? 範囲選択で、仮点が指定できないのは意味がある? |
▼ケンジさん: >要は、仮点を範囲選択で補助線色の実点にしたい。 > >外部変形とかで、ありますか? こちらにあるようです。ご参考まで。 http://afsoft.jp/program/p06.html |
▼kuboさん: 返信ありがとうございます。 ファイル単独の仮点変換だけなら、これで問題ありません。 JW作業中に、範囲選択して仮点も一緒に移動したり消去したりしたかったのです。 現状は、範囲全選択しか仮点が指定できないので。 |
▼ケンジさん: >ファイル単独の仮点変換だけなら、これで問題ありません。 >JW作業中に、範囲選択して仮点も一緒に移動したり消去したりしたかったのです。 仮点を補助色の実点に変更すれば、 範囲選択して仮点(補助色の実点)も一緒に移動したり消去したりできます。 以下は、batファイルにrubyスクリプトを記述するタイプの外部変形。 コピペ後、全角スペースを半角スペースに一括置換してください。 ※行頭に余分なスペースが追加される場合があります。 batの部分だけ、行頭のスペースを削除してください。 @REM 仮点を補助色の実点に変換 @echo off REM #jww REM #cd REM #hf REM #h0 REM #e copy jwc_temp.txt temp.txt>nul ruby -x %~f0 temp.txt pause goto end #!ruby -Ks include Math #data_mojiとdata_noをarray2(二重配列)に収集する。 def data_no_collect(data,i,array2,data_moji,no,hash,j) data_no=no+j array2<<[data_moji,data_no] i=data_next(data,i,data_moji,hash) return i end #data_mojiのバイト数の分だけiを次へ進める。 def data_next(data,i,data_moji,hash) if data_moji=="CDataMoji" f_i=data[i+83,1].unpack("C")[0] m_i=data[i+84+f_i,1].unpack("C")[0] if m_i==255 m_i=data[i+85+f_i,2].unpack("S")[0] m_byte=83+f_i+m_i+4 else m_byte=83+f_i+m_i+2 end hash[data_moji]=m_byte i += hash[data_moji] elsif data_moji=="CDataSunpou" f_i=data[i+145,1].unpack("C")[0] m_i=data[i+146+f_i,1].unpack("C")[0] m_byte=147+f_i+m_i+236 hash[data_moji]=m_byte i += hash[data_moji] elsif data_moji=="CDataSolid" if data[i+5,1].unpack("C")[0] == 10 i += hash[data_moji]+4 else i += hash[data_moji] end elsif data_moji=="CDataTen" if data[i+4,1].unpack("C")[0] == 100 i += hash[data_moji]+20 else pt_change(data,i) i += hash[data_moji] end else i += hash[data_moji] end return i end #仮点を補助色の実点に変更 def pt_change(data,i) pl,lt,lc,lw,ly,lg,z=data[i,15].unpack("LCSSSSS") flg=data[i+31,4].unpack("L")[0] if flg==1 data[i+5,2]=[9].pack("S") data[i+31,4]=[0].pack("L") end end #以降メインルーチン file="" while ARGF.gets if $_=~/^file=/ file=$'.chomp end end begin i=0 data="" open(file,"rb"){|f|data=f.read} i=data.index("CData") if data[i-12,2].unpack("S")[0]==255*256+255 i -= 12 else i -= 8 end #◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)の総数 int1=data[i,1].unpack("C")[0];int2=data[i+1,1].unpack("C")[0] if int1==255 && int2==255 i += 2 n2=data[i,4].unpack("L")[0] i += 4 else n2=data[i,2].unpack("S")[0] i += 2 end #◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)のデータNOの検出 hash={"CDataSen"=>47,"CDataTen"=>35,"CDataEnko"=>75,"CDataSolid"=>79,"CDataBlock"=>59} data_moji="";array2=[];no=0;j=0 while no<n2 no += 1 int=data[i,2].unpack("S")[0] if int==255*256+255 i += 4 n=data[i,2].unpack("S")[0] i += 2 data_moji=data[i,n] i += n i=data_no_collect(data,i,array2,data_moji,no,hash,j) j += 1 elsif int==127*256+255 i += 2 n=data[i,4].unpack("L")[0]-(128*256*256*256) i += 4 array2.each{|item| if item[1] == n data_moji=item[0] break end } i=data_next(data,i,data_moji,hash) else n=data[i,2].unpack("S")[0]-(128*256) i += 2 array2.each{|item| if item[1] == n data_moji=item[0] break end } i=data_next(data,i,data_moji,hash) end end file2=file+".jww" open(file2,"wb"){|f|f.write data} system("start c:\\jww\\jw_win #{file2}") rescue STDERR.puts "エラーが発生しました" end __END__ :end |
以下は、補助色の実点を仮点に変更する外部変形です。 仮点を補助色の実点に変更→範囲選択して、移動or消去→補助色の実点を仮点に変更。 まわりくどい方法ですが、仮点を範囲選択して移動or消去と同じ。 @REM 補助色の実点を仮点に変換 @echo off REM #jww REM #cd REM #hf REM #h0 REM #c点色 無指定:2/_/a REM #e copy jwc_temp.txt temp.txt>nul ruby -x %~f0 temp.txt %1 goto end #!ruby -Ks include Math $pn=2 while ARGV.size>1 case argument=ARGV.pop when /\/a/ $pn=argument[2..-1].to_i end end #data_mojiとdata_noをarray2(二重配列)に収集する。 def data_no_collect(data,i,array2,data_moji,no,hash,j) data_no=no+j array2<<[data_moji,data_no] i=data_next(data,i,data_moji,hash) return i end #data_mojiのバイト数の分だけiを次へ進める。 def data_next(data,i,data_moji,hash) if data_moji=="CDataMoji" f_i=data[i+83,1].unpack("C")[0] m_i=data[i+84+f_i,1].unpack("C")[0] if m_i==255 m_i=data[i+85+f_i,2].unpack("S")[0] m_byte=83+f_i+m_i+4 else m_byte=83+f_i+m_i+2 end hash[data_moji]=m_byte i += hash[data_moji] elsif data_moji=="CDataSunpou" f_i=data[i+145,1].unpack("C")[0] m_i=data[i+146+f_i,1].unpack("C")[0] m_byte=147+f_i+m_i+236 hash[data_moji]=m_byte i += hash[data_moji] elsif data_moji=="CDataSolid" if data[i+5,1].unpack("C")[0] == 10 i += hash[data_moji]+4 else i += hash[data_moji] end elsif data_moji=="CDataTen" if data[i+4,1].unpack("C")[0] == 100 i += hash[data_moji]+20 else pt_change(data,i) i += hash[data_moji] end else i += hash[data_moji] end return i end #仮点を補助色の実点に変更 def pt_change(data,i) pl,lt,lc,lw,ly,lg,z=data[i,15].unpack("LCSSSSS") if lc==9 && lt != 100 data[i+5,2]=[$pn].pack("S") data[i+31,4]=[1].pack("L") end end #以降メインルーチン file="" while ARGF.gets if $_=~/^file=/ file=$'.chomp end end begin i=0 data="" open(file,"rb"){|f|data=f.read} i=data.index("CData") if data[i-12,2].unpack("S")[0]==255*256+255 i -= 12 else i -= 8 end #◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)の総数 int1=data[i,1].unpack("C")[0];int2=data[i+1,1].unpack("C")[0] if int1==255 && int2==255 i += 2 n2=data[i,4].unpack("L")[0] i += 4 else n2=data[i,2].unpack("S")[0] i += 2 end #◎図形(線・円・点・文字・ソリッド・寸法図形・ブロック図形)のデータNOの検出 hash={"CDataSen"=>47,"CDataTen"=>35,"CDataEnko"=>75,"CDataSolid"=>79,"CDataBlock"=>59} data_moji="";array2=[];no=0;j=0 while no<n2 no += 1 int=data[i,2].unpack("S")[0] if int==255*256+255 i += 4 n=data[i,2].unpack("S")[0] i += 2 data_moji=data[i,n] i += n i=data_no_collect(data,i,array2,data_moji,no,hash,j) j += 1 elsif int==127*256+255 i += 2 n=data[i,4].unpack("L")[0]-(128*256*256*256) i += 4 array2.each{|item| if item[1] == n data_moji=item[0] break end } i=data_next(data,i,data_moji,hash) else n=data[i,2].unpack("S")[0]-(128*256) i += 2 array2.each{|item| if item[1] == n data_moji=item[0] break end } i=data_next(data,i,data_moji,hash) end end file2=file+".jww" open(file2,"wb"){|f|f.write data} system("start c:\\jww\\jw_win #{file2}") rescue STDERR.puts "エラーが発生しました" end __END__ :end |