Indexへ
(10926)//【10899】→(10976)
------------------------
【タイトル】座標について
【記事番号】 10899 (*)
【 日時 】06/04/17 13:33
【 発言者 】いぶき

此方のページは大変勉強になって良く覗かせていただいてます

ここで一点皆様に教えていただきたく書込みさせていただきます。

現在座標を求める時は
1. 測定→座標測定
2. 原点を決定して座標点を右クリック
3. 測定結果書込みで任意の場所で表示
4. 次の座標点を右クリック
5. 3.と同じ
6. 4.と5.をずっと繰り返し
↑のような仕方で表を作成しているのですが
原点を決めて後は一括でできないものかと思いまして
書込みさせていただきました。

分かり難い質問で申し訳御座いません


Indexへ
(10899)←【10976】→(10979)
------------------------
【タイトル】Re(1):座標について
【記事番号】 10976 (10899)
【 日時 】06/04/18 22:54
【 発言者 】コジマ

▼いぶきさん:
>1. 測定→座標測定
>2. 原点を決定して座標点を右クリック
>3. 測定結果書込みで任意の場所で表示
>4. 次の座標点を右クリック
>5. 3.と同じ
>6. 4.と5.をずっと繰り返し
>↑のような仕方で表を作成しているのですが
>原点を決めて後は一括でできないものかと思いまして
>書込みさせていただきました。

レスがつきませんね。
2年位前に同様の質問があり、外部変形を作成していたのを思い出しました。
標準機能では出来ません。

外部変形を使った経験があるのならば、以下のスクリプトで可能です。
表も一括で作成します。

この外部変形の実行には mswin32 版 Ruby のインストールが必要です。
以下で入手できます。
http://www61.tok2.com/home2/gravelroad/libraries.html

◎バッチファイル(ファイル名 点座標取得.bat)
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。

@REM 複数の点座標を一気に取得
@echo off
REM #jww
REM #cd
REM #c書込文字種を入力・・・無指定:3/_/a
REM #c行間を入力・・・無指定:5/_/b
REM #k長さの単位を選択・・・無指定:1|1)MM(L)|2)M(R)|/_/c
REM #c小数点以下有効桁数・・・無指定:3/_/d
REM #0原点を指示してください。
REM #1リスト記入点を指示してください。
REM #2測定点を指示してください。
REM #99#
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -Ks 点座標取得.rb temp.txt %1 %2 %3 %4 > jwc_temp.txt


◎スクリプトファイル(ファイル名 点座標取得.rb)
以下の文をコピペ後、全角スペースを半角スペースに一括置換してください。

include Math
$no=1
$moji="3"
$gyo=5
$tani="1"
$keta="3"
while ARGV.length > 1
    case argument = ARGV.pop
        when /^\/a/
            $moji=argument[ 2 .. -1]
        when /^\/b/
            $gyo=argument[ 2 .. -1].to_f
        when /^\/c/
            $tani=argument[ 2 .. -1]
        when /^\/d/
            $keta=argument[ 2 .. -1]
    end
end
def ika(x)
    if $keta=="0"
        a=((x.to_f).round).to_s
    else
        keta=$keta.to_i
        a=(((x.to_f)*(10**keta)).round/(10**keta).to_f).to_s
        if a=~ /\./
            size=$'.split('').size
        end
        a=a+("0"*(keta-size)) if keta>size
    end
    return a
end

print "cn"+$moji+"\n";puts "cc1"
gyo=$gyo
by=[];tendeta=[];hcw=[];hcd=[];hp=[]
while ARGF.gets
    xy = split
    if xy[0] =~/^hs/
        xy[1..-1].each{|item| by << item.to_i}
    end
    if xy[0] =~/^lg/
        lg=xy[0][2,1]
        zusun=by[lg.hex]
    end
    if xy[0] =~/^hcw/
        xy.each{|item|hcw<    end
    if xy[0] =~/^hcd/
        xy.each{|item|hcd<    end
    if xy[0] == "hp1"
        ax=xy[1].to_f
        ay=xy[2].to_f
    end
    if xy[0] =~/^hp/ && xy[0] !="hp1"
        xy.collect!{|item| item.to_f}
        $xy=sqrt(xy[1]**2+xy[2]**2)
        $kakudo=(atan2(xy[2],xy[1]))*360/(2*PI)
        if $tani=="2"
            xyl=$xy/1000
            x=xy[1]/1000
            y=xy[2]/1000
            word="(m)"
        else
            xyl=$xy
            x=xy[1]
            y=xy[2]
            word="(mm)"
        end
        hp<<[xy[1],xy[2]]
        tendeta << ["点#{$no}",ika(x),ika(y),ika(xyl),ika($kakudo)]
        $no+=1
    end
end
$no=1
hp.each{|item|
    printf("ch %f %f %f %f\"点%s\n",item[0],item[1]+1*zusun, 1, 0,$no)
    $no+=1
}

tendeta.unshift(["点名","X#{word}","Y#{word}","距離#{word}","角度(°)"])
no_size=[];x_size=[];y_size=[];xyl_size=[];kakudo_size=[]
no_size[0]=4;x_size[0]=5;y_size[0]=5;xyl_size[0]=8;kakudo_size[0]=8
tendeta.each{|item|
    no_size<    x_size<    y_size<    xyl_size<    kakudo_size<}
no_max=(no_size.max+4)*hcw[$moji.to_i]/2+(no_size.max+3)*hcd[$moji.to_i]/2
x_max=(x_size.max+4)*hcw[$moji.to_i]/2+(x_size.max+3)*hcd[$moji.to_i]/2
y_max=(y_size.max+4)*hcw[$moji.to_i]/2+(y_size.max+3)*hcd[$moji.to_i]/2
xyl_max=(xyl_size.max+4)*hcw[$moji.to_i]/2+(xyl_size.max+3)*hcd[$moji.to_i]/2
kakudo_max=(kakudo_size.max+4)*hcw[$moji.to_i]/2+(kakudo_size.max+3)*hcd[$moji.to_i]/2

tendeta.each_with_index{|item,i|
printf("ch %f %f %f %f \"%s\n",
    ax+no_max/2*zusun,ay-(gyo*i-1)*zusun,1,0,item[0])
printf("ch %f %f %f %f \"%s\n",
    ax+(no_max+x_max/2)*zusun,
    ay-(gyo*i-1)*zusun,1,0,item[1])
printf("ch %f %f %f %f \"%s\n",
    ax+(no_max+x_max+y_max/2)*zusun,
    ay-(gyo*i-1)*zusun,1,0,item[2])
printf("ch %f %f %f %f \"%s\n",
    ax+(no_max+x_max+y_max+xyl_max/2)*zusun,
    ay-(gyo*i-1)*zusun,1,0,item[3])
printf("ch %f %f %f %f \"%s\n",
    ax+(no_max+x_max+y_max+xyl_max+kakudo_max/2)*zusun,
    ay-(gyo*i-1)*zusun,1,0,item[4])

printf("%f %f %f %f \n",ax,ay-gyo*zusun*i,ax+(no_max+x_max+y_max+xyl_max+kakudo_max)*zusun,ay-gyo*zusun*i)
}
printf("%f %f %f %f \n",ax,ay+gyo*zusun,ax+(no_max+x_max+y_max+xyl_max+kakudo_max)*zusun,ay+gyo*zusun)

array=[0,no_max,x_max,y_max,xyl_max,kakudo_max]
i=tendeta.size-1
l=ax
0.upto(array.size-1){|n|
    l+=array[n]*zusun
    printf("%f %f %f %f \n",l,ay+gyo*zusun,l,ay-gyo*zusun*i)
}
printf("ch %f %f %f %f\"0,0\n",0,0,1,0)


Indexへ
(10976)←【10979】→(10989)
------------------------
【タイトル】Re(1):座標について
【記事番号】 10979 (10899)
【 日時 】06/04/19 03:42
【 発言者 】Den
【 リンク 】http://www.geocities.jp/been_den/



▼いぶきさん:
>現在座標を求める時は
>1. 測定→座標測定
>2. 原点を決定して座標点を右クリック
>3. 測定結果書込みで任意の場所で表示
>4. 次の座標点を右クリック
>5. 3.4.の繰り返し

3の所で、キーボードーの「8」を押すと少しは早くなりそうな・・・・
       (右側のテンキーではありません)
「9」を押すと原点がクリアするので注意してください。


Indexへ
(10979)←【10989】//(10903)
------------------------
【タイトル】Re(2):座標について
【記事番号】 10989 (10979)
【 日時 】06/04/19 09:58
【 発言者 】いぶき

▼コジマさん▼Denさん:
お答え頂きありがとう御座います

コジマさんの言われた通り外部変形で思った通りの作業ができました。
自分初めて外部変形使ったのですが、こんなのあるんだと感動いたしました。

Denさんの方法でもかなり楽ですね
ちょっとした座標はDenさんの言われた方法がいいですね。

もう少し外部変形勉強したいと思います。
どうも有難う御座いました<(_ _)>