Indexへ
(30728)//【30669】→(30671)
------------------------
【タイトル】座標点の読み取り
【記事番号】 30669 (*)
【 日時 】08/08/28 09:53
【 発言者 】半人前監督

.txtで敷地の座標図を作図したのですが、作図した図面上に新たな点を作りその座標値を読み取る方法はあるのでしょうか?


Indexへ
(30669)←【30671】→(30673)
------------------------
【タイトル】Re(1):座標点の読み取り
【記事番号】 30671 (30669)
【 日時 】08/08/28 10:42
【 発言者 】kubo

▼半人前監督さん:
>.txtで敷地の座標図を作図したのですが、作図した図面上に新たな点を作りその座標値を読み取る方法はあるのでしょうか?

1点だけを座標ファイルに加筆させるというのは無理で、
改めて画面上の図形を座標ファイルにすればよいです。それなら
座標ファイル>ファイル書込 でできます。

詳しくはJw_cadのヘルプをご覧下さい。
  その他/座標ファイル
  ▼図形の座標データをファイルに書込み


Indexへ
(30671)←【30673】→(30672)
------------------------
【タイトル】Re(2):座標点の読み取り
【記事番号】 30673 (30671)
【 日時 】08/08/28 10:52
【 発言者 】半人前監督

▼kuboさん:
>1点だけを座標ファイルに加筆させるというのは無理で、
>改めて画面上の図形を座標ファイルにすればよいです。それなら
>座標ファイル>ファイル書込 でできます。
>
>詳しくはJw_cadのヘルプをご覧下さい。
>  その他/座標ファイル
>  ▼図形の座標データをファイルに書込み

この方法ですと、最初に作図した敷地図を移動、回転、反転などさせてしまった場合、数字が変わってきてしまいましよね?
移動、回転、反転させた敷地図を手元の座標値と連動した座標値が取りたいのですが…無理でしょうか?


Indexへ
(30673)←【30672】→(30674)
------------------------
【タイトル】Re(1):座標点の読み取り
【記事番号】 30672 (30669)
【 日時 】08/08/28 10:51
【 発言者 】hayabusa

▼半人前監督さん:
>.txtで敷地の座標図を作図したのですが、作図した図面上に新たな点を作りその座標値を読み取る方法はあるのでしょうか?

こんにちは。

読込んだ座標データがどのような座標系なのか解りませんが
数学座標ならば測定→座標測定で測定できます。
その場合、原点(0,0)またはオフセット原点からの軸角に対
する直角座標値になります。

問題は測量座標の場合です。
具体的に書かれた方が的確なレスがあると思います。
--例--
世界測地系に基づく平面直角座標9系に於いて座標北軸の傾斜角
は既知で任意の測点からの新点の相対座標を測定したい。


Indexへ
(30672)←【30674】→(30675)
------------------------
【タイトル】Re(2):座標点の読み取り
【記事番号】 30674 (30672)
【 日時 】08/08/28 10:58
【 発言者 】半人前監督

▼hayabusaさん:
返答ありがとうございます。

>問題は測量座標の場合です。
具体的に書かれた方が的確なレスがあると思います。
--例--
世界測地系に基づく平面直角座標9系に於いて座標北軸の傾斜角
は既知で任意の測点からの新点の相対座標を測定したい。

私が質問したかったのはまさにこれです。無知ですみません。
この測量座標を読み取る事は可能でしょうか?


Indexへ
(30674)←【30675】→(30719)
------------------------
【タイトル】Re(3):座標点の読み取り
【記事番号】 30675 (30674)
【 日時 】08/08/28 11:34
【 発言者 】hayabusa

たぶん、下記のような外部変形で可能だと思います。
文字数の関係で実点、指示点のみとしています。

この外部変形はmswin32ruby1.6〜1.8系を前提にしています。
hikari様のJ_GARU Ver2.0というソフトで自動導入できます。
正常に導入された場合は|BAT 編集|項目をクリックしますと左上に
ruby 1.8.1が表示されます。


バッチファイル名は「相対座標測定.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.collect!{ |item| item.to_f }
   ele.shift; scales = ele
  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; puts "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]; puts 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へ
(30675)←【30719】→(30720)
------------------------
【タイトル】Re(4):座標点の読み取り
【記事番号】 30719 (30675)
【 日時 】08/08/31 19:45
【 発言者 】鉄人

hayabusaさんお世話様です。
早速使わせてもらおうと、やってみましたが一瞬チャカっとしますが・・・・
だめでした。
>
>正常に導入された場合は|BAT 編集|項目をクリックしますと左上に
>ruby 1.8.1が表示されます。
>
上記は表示されてます。
他の外変は、動作してます。
jww6.01 XP
全角スペースを半角スペースに・・・・は何もしてません。
半角スペースにしなければならない所があるのでしょうか?
よろしくお願いします


Indexへ
(30719)←【30720】→(30721)
------------------------
【タイトル】Re(5):座標点の読み取り
【記事番号】 30720 (30719)
【 日時 】08/08/31 21:41
【 発言者 】kubo

▼鉄人さん:
>上記は表示されてます。
>他の外変は、動作してます。
>jww6.01 XP
>全角スペースを半角スペースに・・・・は何もしてません。
>半角スペースにしなければならない所があるのでしょうか?
>よろしくお願いします


基本的に指示されている範囲は全てです。

理由は、元のテキストデータをコピー&貼付(コピペ)して投稿画面に貼り付けると、
元々半角のスペースが、全て全角のスペースに変換されてしまうようです。
なので、全角のスペースを半角に復元しなければ、元のプログラムファイルとして
有効にならないみたいです。


Indexへ
(30720)←【30721】→(30722)
------------------------
【タイトル】Re(6):座標点の読み取り
【記事番号】 30721 (30720)
【 日時 】08/08/31 21:52
【 発言者 】鉄人

▼kuboさん:
>▼鉄人さん:
>>上記は表示されてます。
>>他の外変は、動作してます。
>>jww6.01 XP
>>全角スペースを半角スペースに・・・・は何もしてません。
>>半角スペースにしなければならない所があるのでしょうか?
>>よろしくお願いします
>
>
>基本的に指示されている範囲は全てです。
>
>理由は、元のテキストデータをコピー&貼付(コピペ)して投稿画面に貼り付けると、
>元々半角のスペースが、全て全角のスペースに変換されてしまうようです。
>なので、全角のスペースを半角に復元しなければ、元のプログラムファイルとして
>有効にならないみたいです。

kuboさん、ありがとうございます。
一括で変換する方法はあるのでしょうか?


Indexへ
(30721)←【30722】→(30729)
------------------------
【タイトル】Re(7):座標点の読み取り
【記事番号】 30722 (30721)
【 日時 】08/08/31 22:24
【 発言者 】kubo

▼鉄人さん:
>一括で変換する方法はあるのでしょうか?


「メモ帳」画面の上の 編集>すべて選択>編集>置換>
「置換」画面の「検索する文字列」に全角スペースを記入。
「置換後の文字列」に半角のスペースを記入。
「すべて置換」をクリック。

で一括変換できます。


Indexへ
(30722)←【30729】→(30723)
------------------------
【タイトル】Re(8):座標点の読み取り
【記事番号】 30729 (30722)
【 日時 】08/09/01 21:57
【 発言者 】鉄人

▼kuboさん:
>▼鉄人さん:
>>一括で変換する方法はあるのでしょうか?
>
>
>「メモ帳」画面の上の 編集>すべて選択>編集>置換>
>「置換」画面の「検索する文字列」に全角スペースを記入。
>「置換後の文字列」に半角のスペースを記入。
>「すべて置換」をクリック。
>
>で一括変換できます。

kuboさん、hayabusaさん変事が遅くなりました。
できました!
ありがとうございます。
「全角スペースを記入」これで少し戸惑いました。
上記文字を入力するのでなく、スペースキーを押すだけなんですね。
勉強になりました。
これからも、よろしくお願いします。


Indexへ
(30729)←【30723】//(30676)
------------------------
【タイトル】Re(7):座標点の読み取り
【記事番号】 30723 (30721)
【 日時 】08/09/01 09:39
【 発言者 】hayabusa

鉄人さん、こんにちは。

kuboさん、ご苦労さまです。

全角半角置換の方法はkudoさんの方法で出来ます。
|BAT編集|項目でメモ帳が起動できるようですのでそのまま
置換して上書き保存すればすぐ使用できます。

上記項目は作図設定の他、個人的な使用の範囲内であれば
スクリプト自体を修正できます。

尚、公共座標の北軸方向点は原点の子午線以外の測点において
は真北を意味するものではありませんので注意が必要です。