Indexへ
(3612)//【3613】→(3616)
------------------------
【タイトル】寸法数値について
【記事番号】 3613 (*)
【 日時 】05/10/05 18:34
【 発言者 】masa

寸法線と文字の間隔を後から一括で変更したいのですが
寸法設定をしたあとに変更したい寸法を選択して位置の置き直しをしましたが
間隔が修正されませんでした。
この方法は寸法小数点の修正は一括でできたのですが・・・。
何かいい方法があったら教えてください。
よろしくお願いします。


Indexへ
(3613)←【3616】→(3623)
------------------------
【タイトル】Re(1):寸法数値について
【記事番号】 3616 (3613)
【 日時 】05/10/06 09:43
【 発言者 】コジマ

▼masaさん:
>寸法線と文字の間隔を後から一括で変更したいのですが

7月頃に同じ内容の質問がありました。
以下はその時作成した、外部変形です。

いずれも実行するには、mswin32 版 Ruby  のインストールが必要です。
以下で入手できます。
http://www61.tok2.com/home2/gravelroad/libraries.html


◎バッチファイル(ファイル名 寸法値位置変更.bat)

いかの文をコピペして、全角スペースを半角スペースに一括置換してください。
ファイル名を 寸法値位置変更.bat として保存してください。

@REM 寸法値位置の一括変更
@echo off
REM #jww
REM #cd
REM #ht10
REM #zz
REM #zw
REM #c寸法値の鉛直移動距離(図寸)数式可 無指定:1/_/a
REM #h3
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 寸法値位置変更.rb temp.txt %1> jwc_temp.txt


◎スクリプトファイル(ファイル名 寸法値位置変更.rb)

いかの文をコピペして、全角スペースを半角スペースに一括置換してください。
ファイル名を 寸法値位置変更.rb として保存してください。

include Math
move=1
while ARGV.size>1
    case argument=ARGV.pop
        when /\/a/
            move=eval(argument[2..-1].gsub("/",".to_f/"))
    end
end

by=[]
puts "hd"
while ARGF.gets
    xy=split
    if xy[0]=~/^hq/
    elsif xy[0]=~/^hs/
        xy[1..-1].each{|item|by<
    elsif xy[0]=~/^lg/
        print $_
        lg=xy[0][2,1]
        zusun=by[lg.hex]
    elsif xy[0]=~/^cs/
        if $_=~/\"/
            moji=$'.chop
        end
        moji_arg=atan2(xy[4].to_f,xy[3].to_f)
        xy[1]=xy[1].to_f-move*zusun*sin(moji_arg)
        xy[2]=xy[2].to_f+move*zusun*cos(moji_arg)
        puts xy[0,5].join("\s")+"\s\""+moji

    else
        print $_

    end
end


◎バッチファイル(ファイル名 寸法値位置変更2.bat)

いかの文をコピペして、全角スペースを半角スペースに一括置換してください。
ファイル名を 寸法値位置変更2.bat として保存してください。


@REM 寸法値位置の一括変更(寸法図形)
@echo off
REM #jww
REM #cd
REM #ht10
REM #zz
REM #zw
REM #c寸法値と寸法線の距離(図寸) 無指定:1/_/a
REM #h1
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 寸法値位置変更2.rb temp.txt %1> jwc_temp.txt


◎スクリプトファイル(ファイル名 寸法値位置変更2.rb)

いかの文をコピペして、全角スペースを半角スペースに一括置換してください。
ファイル名を 寸法値位置変更2.rb として保存してください。


include Math
kyori=1
while ARGV.size>1
    case argument=ARGV.pop
        when /\/a/
            kyori=eval(argument[2..-1])
    end
end

by=[]
puts "hd"
while ARGF.gets
    xy=split
    if xy[0]=~/^hq/
    elsif xy[0]=~/^hs/
        xy[1..-1].each{|item|by<    elsif xy[0]=~/^lg/
        print $_
        lg=xy[0][2,1]
        zusun=by[lg.hex]
    elsif xy[0]=~/^msg/ or xy[0]=~/^\#/
        print $_
        msg=xy[0]
    elsif xy[0]=~/^\d|^-/
        print $_
        if msg=="msg"
            xy.collect!{|item|item.to_f}
            if xy[0]>xy[2]
                xy[0],xy[2],xy[1],xy[3]=xy[2],xy[0],xy[3],xy[1]
            elsif xy[0]==xy[2]
                if xy[1]>xy[3]
                    xy[1],xy[3]=xy[3],xy[1]
                end
            end
            sen=xy
        end
    elsif xy[0]=~/^cs/
        if msg=="msg"
            if $_=~/\"/
                moji=$'.chop
            end
            moji_arg=atan2(xy[4].to_f,xy[3].to_f)
            x=xy[1].to_f-sen[0]
            y=xy[2].to_f-sen[1]
            l=sqrt(x**2+y**2)
            moji_sen_arg=atan2(y,x)
            sen_arg=atan2(sen[3]-sen[1],sen[2]-sen[0])
            moji_x=sen[0]+(l*cos(moji_sen_arg-sen_arg))*cos(sen_arg)
            moji_y=sen[1]+(l*cos(moji_sen_arg-sen_arg))*sin(sen_arg)
            if sen_arg                xy[1]=moji_x-kyori*zusun*sin(sen_arg)
                xy[2]=moji_y+kyori*zusun*cos(sen_arg)
            end
            puts xy[0,5].join("\s")+"\s\""+moji
        else
            print $_
        end
    else
        print $_
    end
end


Indexへ
(3616)←【3623】→(3625)
------------------------
【タイトル】Re(2):寸法数値について
【記事番号】 3623 (3616)
【 日時 】05/10/06 12:39
【 発言者 】MT_ shoji@dance.ne.jp
【 リンク 】http://www.dance.ne.jp/~shoji/



コジマ様、いつも便利な外変有難うございます。

寸法図形対応の場合は、文字基点の書き出しは出来ないので仕方がありませんが、図形解除された場合は、文字基点も保護できると思いますので「寸法値位置変更.bat」につきましては、

>@REM 寸法値位置の一括変更
>@echo off
>REM #jww
>REM #cd
>REM #ht10
>REM #zz

REM #zc       ←挿入

>REM #zw
>REM #c寸法値の鉛直移動距離(図寸)数式可 無指定:1/_/a
>REM #h3
>REM #e
>copy jwc_temp.txt temp.txt > nul
>ruby -Ks 寸法値位置変更.rb temp.txt %1> jwc_temp.txt
>
では、いけませんか?

下のrubyについては、私は熟知していないのですが、elseifに指定が無いので、手を加えなくても、BATだけ変更すれば、そのまま書き出しを行ってくれるようですが・・・。


Indexへ
(3623)←【3625】→(3627)
------------------------
【タイトル】Re(3):アドバイスありがとうございます。
【記事番号】 3625 (3623)
【 日時 】05/10/06 15:31
【 発言者 】コジマ

▼MT_さん:
>コジマ様、いつも便利な外変有難うございます。
>
>寸法図形対応の場合は、文字基点の書き出しは出来ないので仕方がありませんが、図形解除された場合は、文字基点も保護できると思いますので「寸法値位置変更.bat」につきましては、
>
>>@REM 寸法値位置の一括変更
>>@echo off
>>REM #jww
>>REM #cd
>>REM #ht10
>>REM #zz
>
>REM #zc       ←挿入
>
>>REM #zw
>>REM #c寸法値の鉛直移動距離(図寸)数式可 無指定:1/_/a
>>REM #h3
>>REM #e
>>copy jwc_temp.txt temp.txt > nul
>>ruby -Ks 寸法値位置変更.rb temp.txt %1> jwc_temp.txt
>>
>では、いけませんか?
>
>下のrubyについては、私は熟知していないのですが、elseifに指定が無いので、手を加えなくても、BATだけ変更すれば、そのまま書き出しを行ってくれるようですが・・・。

私自身は、文字基点に注意を払わないので、気が付きませんでしたが、
(通常は、クロックメニュー2 で変更しています)

確かに REM #zc の記述がないと、文字基点は、左下になってしまいますね。

尚、寸法値位置変更.rb については
以下の部分を修正したほうが、確実に動作するようです。
あとは、そのままで動作します。


elsif xy[0]=~/^cs/
 ↓修正
elsif xy[0]=~/^cs|^ch/


Indexへ
(3625)←【3627】//(3617)
------------------------
【タイトル】・・だったんですか?
【記事番号】 3627 (3625)
【 日時 】05/10/06 20:35
【 発言者 】MT_ shoji@dance.ne.jp
【 リンク 】http://www.dance.ne.jp/~shoji/



elsif xy[0]=~/^cs/
 ↓修正
elsif xy[0]=~/^cs|^ch/

わざとだと思ってました。寸法解除文字だけ対象で、一般文字は処理させないようになってるものと思ってました。

どちらにしても有難うございました。

では!
このあたりでお開きにします。