Indexへ
(32665)//【32660】→(32662)
------------------------
【タイトル】図面から座標値を読み取る方法
【記事番号】 32660 (*)
【 日時 】09/01/19 11:49
【 発言者 】RK

図面上の任意点の座標値を、図面から簡単に読み取る方法はありませんか?

具体的には道路の平面図上に任意点が多数あり、座標系は道路中心線のものに統一して読み取りたいのです。
既知点から角度や距離により算定する方法もあると思いますが、効率が悪く、時間がかかってしまいます。

JWの操作を工夫すればできそうにも思うのですが、いいやり方がないでしょうか?

または外変でいいソフトがあれば教えてください。

よろしくお願いします。


Indexへ
(32660)←【32662】→(32669)
------------------------
【タイトル】Re(1):図面から座標値を読み取る方法
【記事番号】 32662 (32660)
【 日時 】09/01/19 13:01
【 発言者 】hayabusa

こんにちは。

Jw_cadの基本機能で測量座標系の測定は出来ないこともないと思いますが
測点が多い場合が普通ですし座標北軸は必ずしも垂直方向とは限らないよ
うです。また平面直角座標系の座標値のように絶対座標として表現しなけ
ればならない場合はややこしい事になってしまうと思います。

そこで、竹下先生のP_utwのような測量座標を扱う外部変形も作成されてい
いるようです。

また座標測定の対象も実点(点マーカ)、指示点、測点名の基点、線交点と
いったものが想定されます。

私は建築関係ですので詳しい事は解りませんが、以前下記のような外部変形
を書き込んだ事がありますので参考にしてください。(一部修正箇所あり)
対象は文字数の関係で実点、指示点のみです。

※要 mswin32ruby1.6〜1.8系
バッチファイル名は「相対座標測定.bat」としてください。
######下記より
@REM 相対座標測定(座標北軸指示)
@echo off
goto do%1
rem ----------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの63行目からです。
rem ----------------------------------------------------------------
rem ※注意点
rem  1.この外部変形は座標基準点と北軸方向点を指示して他の測点の座標
rem   値を作図するものです。
rem  2.項目1は実点または点マーカ、項目2は指示点の座標を測定します。
rem  3.対象は書込みグループのみです。
rem  (念のため不必要なグループは非表示にして下さい。)
rem  4.図面軸角0で使用してください。
rem ----------------------------------------------------------------
REM #jww
REM #cd
REM #hm|実点選択型 L|測点指示型 R|BAT 編集|
REM #:1
REM #k 座標系選択|測量座標 L|数学座標 R|/_/t
REM #c 座標基準点X座標入力 [無指定: 0 ]※座標単位に注意 :/_/x
REM #c 座標基準点Y座標入力 [無指定: 0 ]※座標単位に注意 :/_/y
REM #1- 座標基準点をマウス指示(R)
REM #2 北軸方向点をマウス指示(R)
REM #h1
REM #hc 測定する実点または点マーカを範囲選択---左クリックで確定
REM #ht10 ブロック図形の書出しをしない
REM #ht20 曲線の書出しをしない
REM #ht30 寸法図形の書出しをしない
REM #ht40 ソリッドの書出しをしない
REM #hr
REM #e
REM #:2
REM #k 座標系選択|測量座標 L|数学座標 R|/_/t
REM #h0
REM #c 座標基準点X座標入力 [無指定: 0 ]※座標単位に注意 :/_/x
REM #c 座標基準点Y座標入力 [無指定: 0 ]※座標単位に注意 :/_/y
REM #1- 座標基準点をマウス指示(R)
REM #2 北軸方向点をマウス指示(R)
REM #3%d 測点をマウス指示(R) ※異縮尺の測点に注意
REM #99#
REM #hr
REM #e
REM #:3
REM #h0
REM #hr
REM #e
:do1
:do2
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 %3 %4 %5 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do3
start notepad.exe 相対座標測定.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
####### 設 定 ##############################################
$unit = "m"  #単位(mm≡ミリ; m≡メートル)
$marume="r"  #丸め方式(r≡四捨五入; d≡切捨て; u≡切上げ)
$keta1 = 2  #単位ミリの小数桁(0〜6)
$keta2 = 4  #単位メートルの小数桁(0〜6)
$comma="on"  #三桁カンマ区切り(on≡設定有; off≡設定無)
$add = "on"  #座標値にX,Y,単位付加(on≡設定有; off≡設定無)
#------------------------------------------------------------
$cc = "0"   #文字基点設定
#      ※引出線作図がonの場合は左中または右中に固定
#       |6: 左上|7: 中上|8: 右上|
#       |3: 左中|4: 中中|5: 右中|
#       |0: 左下|1: 中下|2: 右下|
$cdx = 1   #座標値文字横ずれ(-100〜100 図寸mm)
$cdy = 0   #座標値文字縦ずれ(-100〜100 図寸mm)
$cn = "2"   #座標値文字種(1〜10)  [無指定 書込み文字種]
$cy = " "   #座標値作図レイヤ(0〜f) [無指定 書込みレイヤ]
#------------------------------------------------------------
$zl = "on"  #引出線作図設定(on≡設定有; off≡設定無)
$zk = 60   #引出線角度(-180〜180 度)
$zn = 20   #引出斜め線長さ(0〜100 図寸mm)
$zh = 5    #引出水平線長さ(0〜100 図寸mm)
$zc = "1"   #引出線線色(1〜9)    [無指定:書込み線色]
$zt = "2"   #引出線線種(1〜9)    [無指定:書込み線種]
$zy = " "   #引出線作図レイヤ(0〜f) [無指定 書込みレイヤ]
#------------------------------------------------------------
#       測点指示型実点作図設定
#
$pt = "on"  #測点実点作図設定(on≡設定有; off≡設定無)
$pn = "2"   #実点点種(1〜9 )    [無指定:書込み点種]
$py = " "   #実点作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#------------------------------------------------------------
def main
 include Math
 $x0,$y0 = 0,0
 while ARGV.size > 1
  case argument = ARGV.pop
   when /^[12]/
    $koumoku = argument.to_s
   when /^\/t/
    $axis = argument[2,1].to_s
   when /^\/x/
    $x0 = argument[2..-1].to_f
   when /^\/y/
    $y0 = argument[2..-1].to_f
  end
 end
 if $koumoku == "1"
  msg1 = "実点または点マーカ"
 elsif $koumoku == "2"
  msg1 = "指示点"
  if $pt == "on"
   msg2 = "&実点"
  end
 end
 if $unit == "mm"
  keta = $keta1; lu = "mm"
 elsif $unit == "m"
  keta = $keta2; lu = "m"
 end
 lgs,lys,points = [],[],[]
 while ARGF.gets
  ele = split
  if ele[0] =~ /^hs/
   ele.shift; scales = ele.collect!{ |item| item.to_f }
  elsif ele[0] =~ /^lg/
   lgs << ele[0]
  elsif ele[0] =~ /^ly/
   lys << ele[0]
  elsif ele[0] == "hp1-"
   p0x,p0y = sprintf("%0.9f",ele[1]).to_f,sprintf("%0.9f",ele[2]).to_f
  elsif ele[0] == "hp2"
   p1x,p1y = sprintf("%0.9f",ele[1]).to_f,sprintf("%0.9f",ele[2]).to_f
   dx,dy = p1x-p0x,p1y-p0y
   if dx == 0 && dy == 0
    puts "he 原点と北軸方向点が同じです。"; exit
   elsif dx == 0 && dy > 0
    kr = 0
   elsif dx == 0 && dy < 0
    kr = PI
   else
    kr = atan2(dy,dx)-PI/2.0
   end
  elsif $_ =~ /^pt|^hp[3-9]\s|^hp[1-9][0-9]\s/
   px,py = sprintf("%0.9f",ele[1]).to_f,sprintf("%0.9f",ele[2]).to_f
   if $axis == "1"
    points << [0,0,0,py-p0y,px-p0x,px,py]
   elsif $axis == "2"
    points << [0,0,0,px-p0x,py-p0y,px,py]
   end
  end
 end
 points.uniq!; cb_data = []
 if points.size >= 1
  scale0 = scales[lgs[0][2,1].hex]; cdx,cdy = $cdx*scale0,$cdy*scale0
  if $cy =~ /^[0-9a-fA-F]/
   puts "ly"+$cy
  else
   puts lys[0]
  end
  if $zl == "on"
   znx,zny = scale0*$zn*cos($zk*PI/180.0),scale0*$zn*sin($zk*PI/180.0)
   if $zk.abs >= 0 && $zk.abs <= 90
    puts "cc3"; zhx,zhy = scale0*$zh,0
   elsif $zk.abs > 90 && $zk.abs <= 180
    puts "cc5"; cdx *= -1; zhx,zhy = -scale0*$zh,0
   end
  elsif $zl == "off"
   puts "cc"+$cc; znx,zny,zhx,zhy = 0,0,0,0
  end
  puts "cn"+$cn
  points.each{|pt|
   pz = (pt[3]**2+pt[4]**2)**0.5
   if $axis == "1"
    pkr = atan2(pt[3],pt[4]); pt[4],pt[3] = pz*cos(pkr-kr),pz*sin(pkr-kr)
   elsif $axis == "2"
    pkr = atan2(pt[4],pt[3]); pt[3],pt[4] = pz*cos(pkr-kr),pz*sin(pkr-kr)
   end
   if $unit == "m"
    pt[3],pt[4] = pt[3].to_f/1000.0+$x0,pt[4].to_f/1000.0+$y0
   elsif $unit == "mm"
    pt[3],pt[4] = pt[3].to_f+$x0,pt[4].to_f+$y0
   end
   if $marume == "r"
    pt[3],pt[4] = round_n(pt[3], keta),round_n(pt[4], keta)
   elsif $marume == "d"
    pt[3],pt[4] = round_down_n(pt[3], keta),round_down_n(pt[4], keta)
   elsif $marume == "u"
    pt[3],pt[4] = round_up_n(pt[3], keta),round_up_n(pt[4], keta)
   end
   pt[3],pt[4] = sprintf("%0.#{keta}f",pt[3]),sprintf("%0.#{keta}f",pt[4])
   if $comma=="on"
    if keta == 0
     zx=pt[3].gsub(/(\d{1,3})(?=(\d\d\d))/, '\1,')
     zy=pt[4].gsub(/(\d{1,3})(?=(\d\d\d))/, '\1,')
    else
     zx=pt[3].gsub(/(\d{1,3})(?=(\d\d\d)+($`|\.))/, '\1,')
     zy=pt[4].gsub(/(\d{1,3})(?=(\d\d\d)+($`|\.))/, '\1,')
    end
   elsif $comma=="off"
    zx,zy = pt[3].to_s,pt[4].to_s
   end
   if $add == "on"
    zz="\"X=#{zx}#{lu} Y=#{zy}#{lu}"
   elsif $add == "off"
    zz="\"#{zx} #{zy}"
   end
   puts ["ch",pt[5]+cdx+znx+zhx,pt[6]+cdy+zny+zhy,1,0,zz].join("\s")
  }
  if $koumoku == "2" && $pt == "on"
   if $py =~ /^[0-9a-fA-F]/
    puts "ly"+$py
   else
    puts lys[0]
   end
   puts "pn"+$pn
   points.each{|point|
    puts ["pt",point[5],point[6]].join("\s")
   }
  end
  if $zl == "on"
   if $zy =~ /^[0-9a-fA-F]/
    puts "ly"+$zy
   else
    puts lys[0]
   end
   puts "lc"+$zc,"lt"+$zt
   points.each{|point|
    puts [point[5],point[6],point[5]+znx,point[6]+zny].join("\s")
    puts [point[5]+znx,point[6]+zny,point[5]+znx+zhx,point[6]+zny+zhy].join("\s")
   }
  end
  puts lgs[0],lys[0]
  if $axis == "1"
   puts "h# #{points.size} ヵ所の#{msg1}に測量座標値#{msg2}を作図しました。"
  elsif $axis == "2"
   puts "h# #{points.size} ヵ所の#{msg1}に数学座標値#{msg2}を作図しました。"
  end
 else
  puts "h# 測定データが選択されていません。"
 end
end
def round_n(num, nth)
 num = num.to_f; nth = nth.to_i; num = num*(10**nth)
 return num.round()*(10**(-nth))
end
def round_down_n(num, nth)
 num = num.to_f; nth = nth.to_i; num = num*(10**nth)
 return num.floor()*(10**(-nth))
end
def round_up_n(num, nth)
 num = num.to_f; nth = nth.to_i; num = num*(10**nth)
 return num.ceil()*(10**(-nth))
end
main()
:END
######以上です。


Indexへ
(32662)←【32669】→(32672)
------------------------
【タイトル】Re(2):図面から座標値を読み取る方法
【記事番号】 32669 (32662)
【 日時 】09/01/19 21:05
【 発言者 】RK

ありがとうございました。

早速、このプログラムを試してみましたが、バッチファイルが起動し、正常に入力は進むのですが、最後に計算しているような黒い画面が一瞬ひらき、そのまま何の変化もなく、最初の入力状態に戻ってしまいます。
何がいけないのでしょうか。
解決方法が分かれば教えていただけないでしょうか。


Indexへ
(32669)←【32672】→(32705)
------------------------
【タイトル】Re(3):図面から座標値を読み取る方法
【記事番号】 32672 (32669)
【 日時 】09/01/19 22:37
【 発言者 】hayabusa

▼RKさん:
>
>早速、このプログラムを試してみましたが、バッチファイルが起動し、正常に入力は進むのですが、最後に計算しているような黒い画面が一瞬ひらき、そのまま何の変化もなく、最初の入力状態に戻ってしまいます。
>何がいけないのでしょうか。
>解決方法が分かれば教えていただけないでしょうか。

こんばんは。

たぶん、掲示板からコピーしてバッチファイルを作成する時に全角空白→半角空白の置換をしてない為だと思います。
(掲示板に書き込むと半角空白が一部全角空白に変換されてしまうようです。)

置換はメモ帳の場合
1.編集(E)→置換(R)と進み
2.置換する文字列(N)に全角でスペースキーを押して入力
3.置換後の文字列(P)に半角でスペースキーを押して入力
4.全て置換(A)して「相対座標測定.bat」で保存


Indexへ
(32672)←【32705】→(32707)
------------------------
【タイトル】Re(4):図面から座標値を読み取る方法
【記事番号】 32705 (32672)
【 日時 】09/01/21 18:19
【 発言者 】RK

ありがとうございます。
ご指導いただいたやり方で正常に使用できるようになりました。
お礼が遅くなりすみませんでした。

今後ともよろしくお願いします。


Indexへ
(32705)←【32707】→(32711)
------------------------
【タイトル】Re(5):参考です。
【記事番号】 32707 (32705)
【 日時 】09/01/21 18:52
【 発言者 】hayabusa

こんにちは。

Jw_cad座標ファイル機能を使用して座標リストみたいなものを作成
管理したいのであれば外部エディタにエクセル等の表計算ソフトを
設定した方が便利だと思います。

測量座標の場合は条件設定にm単位、YX座標書込み、書込み数値の
区切りを[Tab]にするにそれぞれチェックをしておきます。
また絶対座標の場合は基準点においてオフセットを使用します。
北軸が傾斜している場合はあらかじめ修正しておかないと予期せぬ
結果となりますので注意してください。

ファイル編集からファイルを開いてデータを自由に加工できます。
またエクセルの場合は土器手さんのExcel to jw_win(アドイン)使用
させて頂きますとクリップボード経由でJw_cad側に座標リストを簡単
に貼り付けられます。


Indexへ
(32707)←【32711】→(32713)
------------------------
【タイトル】Re(6):参考です。
【記事番号】 32711 (32707)
【 日時 】09/01/21 22:05
【 発言者 】RK ois@ncn.ne.jp

度々ありがとうございます。
挑戦してみます!!

もう少々おつき合いいただけないでしょうか。

空白を『半角』に置き換えることで、職場のPCは正常に使用できたのですが、自宅のPCでは同様な処理をしてもできませんでした。

現象は、最初に記載したものと全く同じで、正常に入力は進むのですが、最後に計算しているような黒い画面が一瞬ひらき、そのまま何の変化もなく、最初の入力状態に戻ってしまいます。

mswin32ruby1.6〜1.8系が必要とのことですが、これが原因かなあとも思うのですが、これが入っているのかどうかさえよくわかりません。


原因が分かれば教えていただけないでしょうか?


Indexへ
(32711)←【32713】→(32735)
------------------------
【タイトル】Re(7):参考です。
【記事番号】 32713 (32711)
【 日時 】09/01/21 22:36
【 発言者 】hayabusa

▼RKさん:
>
>空白を『半角』に置き換えることで、職場のPCは正常に使用できたのですが、自宅のPCでは同様な処理をしてもできませんでした。
>
>現象は、最初に記載したものと全く同じで、正常に入力は進むのですが、最後に計算しているような黒い画面が一瞬ひらき、そのまま何の変化もなく、最初の入力状態に戻ってしまいます。
>
>mswin32ruby1.6〜1.8系が必要とのことですが、これが原因かなあとも思うのですが、これが入っているのかどうかさえよくわかりません。
>
>
>原因が分かれば教えていただけないでしょうか?

こんにちは。

一般的に外部変形が動作するには下記の条件が必要です。(2000,XP)

1.jww(Jw_win.exe)および外部変形(batファイル)のパスが空白を含まない事。
※よくある事例としてデスクトップやマイドキュメントに置いています。
2.awkやrubyなどのクスリプト系はインタプリタやライブラリが必要です。
 VBの場合はランタイムが必要です。
 EXE系の場合は通常はそのまま使用できます。
3.外部変形選択ソフトによっては修正しないと動作しない場合があるようです。
 よって最初は[外変]コマンドより動作確認した方が良いと思います。

この外部変形は場合は[BAT編集]項目をクリックしますと左上にruby1.8.1等
表示されればrubyインタプリタは導入されています。
表示されない場合は下記、hikariさんのHPより導入してください。

http://officehikari.art-studio.cc/
JWW外変環境設定支援ソフト J_GARU Ver2.0

但しHPの注意事項必ず確認してください。
特にActiveScriptRubyの重複インストールはトラブルの元になるようです。
またwin32-Vistaについて未検証との事です。

最後に98系の場合機種によっては動作しない事例が報告されています。


Indexへ
(32713)←【32735】→(32673)
------------------------
【タイトル】Re(8):参考です。
【記事番号】 32735 (32713)
【 日時 】09/01/22 21:57
【 発言者 】RK ois@ncn.ne.jp

ありがとうございます。
挑戦してみたのですが、どうもうまくいきません。
ファイル名やJGARUのインストールなど試みたのですが、ダメでした。
PCについて十分な知識がないため、教えていただいたことがきちんと生かせていないのかもしれません。

とりあえず、職場では問題なく使えているので、今回は断念します。

本当に親切丁寧なご指導ありがとうございました。


Indexへ
(32735)←【32673】→(32706)
------------------------
【タイトル】Re(1):図面から座標値を読み取る方法
【記事番号】 32673 (32660)
【 日時 】09/01/20 09:20
【 発言者 】mirror

▼RKさん:
読み取ったデータ(座標値)をどのように扱いたいのかが判らないので、違うかも知れませんが

例えば、図面上の2箇所に点を作図し
座標ファイルコマンドにより、どちらかの点を基準点として指定して書出します。

その他→座標ファイル→ファイル書込み→(作図領域内)範囲始点→(作図領域内)範囲終点→
基準点変更→どちらかの点(基準点)指示→選択確定

上記の操作で、ztemp.txt(別途に指定していなければjwwのインストールフォルダ内)に

pt 0 0
pt xxxx.xx -yyyy.yy

等のようにして、基準点(0,0)から見た座標値(x,y)が書き出されていますが
このような事では・・・・・


Indexへ
(32673)←【32706】→(32728)
------------------------
【タイトル】Re(2):図面から座標値を読み取る方法
【記事番号】 32706 (32673)
【 日時 】09/01/21 18:27
【 発言者 】RK

ありがとうございました。
このような操作方法もあるんですね。
今後の作業で活用したいと思います。

今後ともよろしくお願いします。


Indexへ
(32706)←【32728】→(32736)
------------------------
【タイトル】Re(3):図面から座標値を読み取る方法
【記事番号】 32728 (32706)
【 日時 】09/01/22 17:51
【 発言者 】mirror

▼RKさん:
行おうとする目的にもよりますが
・・・基準点からの、座標値(x,y)形式の表示及び作図領域への書込みであれば

その他→測定→座標測定→(作図領域内)基準点指示→(作図領域内)測定点指示→
測定結果書込→(作図領域内)書込み位置指示

と操作する事で、座標値(x,y)が其々独立した文字列で指示した位置に作図されます。
フェーザ形式で座標値が必要な時があれば、線コマンド時のステータスバーの表示を
私の場合は・・(○○変換して)利用します。


Indexへ
(32728)←【32736】//(32661)
------------------------
【タイトル】Re(4):図面から座標値を読み取る方法
【記事番号】 32736 (32728)
【 日時 】09/01/22 22:04
【 発言者 】RK ois@ncn.ne.jp

ありがとうございます。

今回は座標値を作図するというより、実点の座標値が何かを簡単に知りたいという思いです。

いままで指導いただいた内容で基本的には目標が達成できました。

ありがとうございました。

また、当CADをはじめ、いろいろな外変を提供してくださる皆様にお礼申し上げます。