Indexへ
(14083)//【14080】→(14081)
------------------------
【タイトル】外変作成の依頼
【記事番号】 14080 (*)
【 日時 】08/10/17 12:13
【 発言者 】mizuki

作成してくださる方がいればお願い出来ないでしょうか?

JWWには標準で2線コマンドがありますが
4線、6線(片側2線、3線)を「2線コマンド」のように
連続で書きたいのです。

意匠図の平面詳細図作成時などで、
LGS+PB12.5+9.5(両面)などの書込のときに
使えればと思います。

各々の線のレイヤ、線種、線色及び片側の本数(片側のみでも使いたい)
線の間隔などを指定できればと思います。

宜しくお願いいたします。


Indexへ
(14080)←【14081】→(14084)
------------------------
【タイトル】Re: 外変作成の依頼
【記事番号】 14081 (14080)
【 日時 】08/10/17 12:50
【 発言者 】外注図面屋 gaityu@yahoo.co.jp

mizukiさん、こんにちは。

そのような場合、一つ壁を書きまして、後は複写していった方が早いですよ。
壁厚寸法や寄り寸なんかも最初の一つに入れちゃうと効果的です。


Indexへ
(14081)←【14084】→(14086)
------------------------
【タイトル】Re(1):外変作成の依頼
【記事番号】 14084 (14080)
【 日時 】08/10/18 14:37
【 発言者 】hayabusa

こんにちは。
----------------------------------------------------------
先ほどのバッチファイルの中でオフセットの処理に一部不都合が
ありましたので修正しました。
----------------------------------------------------------
>各々の線のレイヤ、線種、線色及び片側の本数(片側のみでも使いたい)

上記の"片側の本数"のところが私の解釈と違うかもしれませんが
下記のような外部変形で一応可能だと思いますので試用してみて
ください。
作図設定は適宜修正してください。

※補足です。
すでに気が付かれているかと思いますがBAT編集項目から開いたこの
バッチファイルは上書き保存した時点で設定は反映されますので煩雑
に設定を変更する場合は閉じない方が良いと思います。

バッチファイル名は「複線作図.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe 複線作図.bat---修正必要)
###下記より
@REM 指示点間複線作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの67行目からです。
rem ------------------------------------------------------------
rem ※注意点
rem  1.この外部変形は指示点間に複線を作図するものです。
rem  2.作図は書込みグループの指定レイヤです。
rem  3.不必要なグループは非表示にしてください。
rem  4.図面軸角0で使用してください。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |2線両側 L|3線両側 R|2線片側|3線片側|BAT 編集|
REM #:1
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #hr
REM #e
REM #:2
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #hr
REM #e
REM #:3
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #3 複線作図方向を指示 (L)free (R)Read ※異縮尺に注意
REM #hr
REM #e
REM #:4
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #3 複線作図方向を指示 (L)free (R)Read ※異縮尺に注意
REM #hr
REM #e
REM #:5
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do5
start notepad.exe 複線作図.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
##### 設 定 ######################################################
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#   
$off1 = 100  #始点からのオフセット設定 [単位 mm]
$off2 = 100  #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定------
#
$l1 = 32.5  #中心線からの間隔     [単位 mm]
$c1 = "1"   #1線目の線色(1〜9)    [無指定:書込み線色]
$t1 = "1"   #1線目の線種(1〜9)    [無指定:書込み線種]
$y1 = "1"   #1線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
#------2線目の設定------
#
$l2 = 12.5  #2線---1線目からの間隔 [単位 mm]
$c2 = "3"   #2線目の線色(1〜9)    [無指定:書込み線色]
$t2 = "3"   #2線目の線種(1〜9)    [無指定:書込み線種]
$y2 = "2"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
#------3線目の設定------
#
$l3 = 9.5   #3線---2線目からの間隔 [単位 mm]
$c3 = "2"   #3線目の線色(1〜9)    [無指定:書込み線色]
$t3 = "1"   #3線目の線種(1〜9)    [無指定:書込み線種]
$y3 = "3"   #3線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
##################################################################
def main
 $koumoku = ARGV.pop.to_s
 include Math
 if $koumoku == "1"
  msg = "2線を指示点間の両側に作図しました。"
 elsif $koumoku == "2"
  msg = "3線を指示点間の両側に作図しました。"
 elsif $koumoku == "3"
  msg = "2線を指示点間の片側に作図しました。"
 elsif $koumoku == "4"
  msg = "3線を指示点間の片側に作図しました。"
 end
 lyct,hps = [],[]
 while ARGF.gets
  ele = split
  if ele[0] =~ /^l[yct]/
   lyct << ele[0]
  elsif ele[0] =~ /^hp[1-3]/
   ele.shift
   hps << ele.collect!{ |item| sprintf("%0.10f",item).to_f }
  end
 end
 p1,p2,p3 = hps[0],hps[1],hps[2]
 aa,bb = p2[0]-p1[0],p2[1]-p1[1]; zz = (aa**2+bb**2)**0.5
 if aa == 0 && bb == 0
  puts "he 始点と終点が同じです。"; exit
 end
 if $koumoku =~ /^[34]/
  if aa/bb > 0
   if p1[0] > p2[0]
    pxt = p1[0]; p1[0] = p2[0]; p2[0] = pxt
    pyt = p1[1]; p1[1] = p2[1]; p2[1] = pyt
    off = $off1
    $off1 = -$off2; $off2 = -off
   end
  elsif aa/bb < 0
   if p1[0] < p2[0]
    pxt = p1[0]; p1[0] = p2[0]; p2[0] = pxt
    pyt = p1[1]; p1[1] = p2[1]; p2[1] = pyt
    off = $off1
    $off1 = -$off2; $off2 = -off
   end
  end
  f1,g1 = p3[0]-p1[0],p3[1]-p1[1]
  f2,g2 = aa,bb
  $det = f1*g2-f2*g1
  if $det == 0
   puts "he 複線作図方向指示エラー。"; exit
  end
 end
 if $y1 =~ /^[0-9a-fA-F]/
  puts "ly#{$y1}"
 else
  puts lyct[0]
 end
 if $c1 =~ /^[1-9]/
  puts "lc#{$c1}"
 else
  puts lyct[1]
 end
 if $t1 =~ /^[1-9]/
  puts "lt#{$t1}"
 else
  puts lyct[2]
 end
 dx1= $l1.to_f*bb/zz; dy1=$l1.to_f*aa/zz
 fukusen(p1,p2,dx1,dy1,aa,bb,zz)
 if $koumoku =~ /^[1-4]/
  if $y2 =~ /^[0-9a-fA-F]/
   puts "ly#{$y2}"
  else
   puts lyct[0]
  end
  if $c2 =~ /^[1-9]/
   puts "lc#{$c2}"
  else
   puts lyct[1]
  end
  if $t2 =~ /^[1-9]/
   puts "lt#{$t2}"
  else
   puts lyct[2]
  end
  dx2= dx1+$l2.to_f*bb/zz; dy2=dy1+$l2.to_f*aa/zz
  fukusen(p1,p2,dx2,dy2,aa,bb,zz)
  if $koumoku =~ /^[24]/
   if $y3 =~ /^[0-9a-fA-F]/
    puts "ly#{$y3}"
   else
    puts lyct[0]
   end
   if $c3 =~ /^[1-9]/
    puts "lc#{$c3}"
   else
    puts lyct[1]
   end
   if $t3 =~ /^[1-9]/
    puts "lt#{$t3}"
   else
    puts lyct[2]
   end
   dx3= dx2+$l3.to_f*bb/zz; dy3=dy2+$l3.to_f*aa/zz
   fukusen(p1,p2,dx3,dy3,aa,bb,zz)
  end
 end
 puts lyct[0]; puts "h# #{msg}"
end
def fukusen(p1,p2,dx,dy,aa,bb,zz)
 t0,t1 = p1[0]+$off1.to_f*aa/zz,p1[1]+$off1.to_f*bb/zz
 t2,t3 = p2[0]-$off2.to_f*aa/zz,p2[1]-$off2.to_f*bb/zz
 if $koumoku =~ /^[12]/
  printf("%0.10f %0.10f %0.10f %0.10f\n", t0-dx,t1+dy,t2-dx,t3+dy)
  printf("%0.10f %0.10f %0.10f %0.10f\n", t0+dx,t1-dy,t2+dx,t3-dy)
 elsif $koumoku =~ /^[34]/
  if $det < 0
   printf("%0.10f %0.10f %0.10f %0.10f\n", t0-dx,t1+dy,t2-dx,t3+dy)
  elsif $det > 0
   printf("%0.10f %0.10f %0.10f %0.10f\n", t0+dx,t1-dy,t2+dx,t3-dy)
  end
 end
end
main()
:END
#####以上です。


Indexへ
(14084)←【14086】→(14087)
------------------------
【タイトル】Re(2):外変作成の依頼
【記事番号】 14086 (14084)
【 日時 】08/10/18 16:38
【 発言者 】mizuki

▼hayabusaさん:
こんにちは。mizukiです。
「間柱作図」の際はお世話になりました。
また今回も有り難うございます。

作図出来ました。

前回と同じで申し訳ありませんが、

lgs = [100,90,75,65,50]  #9種類まで可能(REM #hmの項目記述順)

をお願いできないでしょうか?大変便利です。

REM #hm |PB9.5|PB12.5|12.5+9.5|12.5+12.5|15+15|21+21|
で仕上げを選択し

    |W=100|W=90|W=75|W=65|W=50|
を選択し、作図に出来ればと思います。

if $koumoku == " "の関係で "9" 以上が出来ないときは
PB9.5、12.5、12.5+9.5、・・とそれぞれのバッチファイルを
作ろうと思います。
(REM #h/***.BATとする方法もあるのでしょうが良くわかりません)


それと現在は2点間ですが、3、4、5点と連続は出来ないでしょうか?
L型に直角になっている壁、Z型になっている壁を一度に作図したいと
思っています。

厚かましいとは思いますがお願いできれば幸いです。


Indexへ
(14086)←【14087】→(14090)
------------------------
【タイトル】Re(3):外変作成の依頼
【記事番号】 14087 (14086)
【 日時 】08/10/18 19:23
【 発言者 】hayabusa

こんにちは。

連続指示点間に壁線を作図する外部変形です。
各項目とも両側複線です。
※片側のみはできませんので前のバッチファイルを併用してください。

バッチファイル名は「壁線連続作図.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe 壁線連続作図.bat---修正必要)
######下記より
@REM 壁線連続作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの48行目からです。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |PB9.5|PB12.5|12.5+9.5|12.5+12.5|15+15|21+21|BAT 編集|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:7
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
:do5
:do6
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do7
start notepad.exe 壁線連続作図.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
##### 設 定 ######################################################
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#   
$off1 = 100  #始点からのオフセット設定 [単位 mm]
$off2 = 100  #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定------
#
$l1 = 32.5  #中心線からの間隔     [単位 mm]
$c1 = "1"   #1線目の線色(1〜9)    [無指定:書込み線色]
$t1 = "1"   #1線目の線種(1〜9)    [無指定:書込み線種]
$y1 = "1"   #1線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
##################################################################
def main
 kabe_type = [9.5,12.5,[12.5,9.5],[12.5,12.5],[15,15],[21,21]] #種類(REM #hmの項目記述順)
 $no = ARGV.pop.to_i-1
 if $no.to_s =~ /^[01]/
  $koumoku = "1"
  $l2 = kabe_type[$no].to_f
  $c2 = "2"   #2線目の線色(1〜9)    [無指定:書込み線色]
  $t2 = "1"   #2線目の線種(1〜9)    [無指定:書込み線種]
  $y2 = "3"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
 elsif $no.to_s =~ /^[2-5]/
  $koumoku = "2"
  $l2 = kabe_type[$no][0].to_f
  $c2 = "3"   #2線目の線色(1〜9)    [無指定:書込み線色]
  $t2 = "3"   #2線目の線種(1〜9)    [無指定:書込み線種]
  $y2 = "2"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]

  $l3 = kabe_type[$no][1].to_f
  $c3 = "2"   #3線目の線色(1〜9)    [無指定:書込み線色]
  $t3 = "1"   #3線目の線種(1〜9)    [無指定:書込み線種]
  $y3 = "3"   #3線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
 end
 include Math
 if $koumoku == "1"
  msg = "2線を指示点間の両側に作図しました。"
 elsif $koumoku == "2"
  msg = "3線を指示点間の両側に作図しました。"
 end
 lyct,hps = [],[]
 while ARGF.gets
  ele = split
  if ele[0] =~ /^l[yct]/
   lyct << ele[0]
  elsif ele[0] =~ /^hp[1-9]/
   ele.shift
   hps << ele.collect!{ |item| sprintf("%0.10f",item).to_f }
  end
 end
 for idx in 1..hps.size-1
  p1,p2 = hps[idx-1],hps[idx]
  aa,bb = p2[0]-p1[0],p2[1]-p1[1]; zz = (aa**2+bb**2)**0.5
  if aa == 0 && bb == 0
   puts "he 始点と終点が同じです。"; exit
  end
  if $y1 =~ /^[0-9a-fA-F]/
   puts "ly#{$y1}"
  else
   puts lyct[0]
  end
  if $c1 =~ /^[1-9]/
   puts "lc#{$c1}"
  else
   puts lyct[1]
  end
  if $t1 =~ /^[1-9]/
   puts "lt#{$t1}"
  else
   puts lyct[2]
  end
  dx1= $l1.to_f*bb/zz; dy1=$l1.to_f*aa/zz
  fukusen(p1,p2,dx1,dy1,aa,bb,zz)
  if $koumoku =~ /^[1-2]/
   if $y2 =~ /^[0-9a-fA-F]/
    puts "ly#{$y2}"
   else
    puts lyct[0]
   end
   if $c2 =~ /^[1-9]/
    puts "lc#{$c2}"
   else
    puts lyct[1]
   end
   if $t2 =~ /^[1-9]/
    puts "lt#{$t2}"
   else
    puts lyct[2]
   end
   dx2= dx1+$l2.to_f*bb/zz; dy2=dy1+$l2.to_f*aa/zz
   fukusen(p1,p2,dx2,dy2,aa,bb,zz)
   if $koumoku =~ /^2/
    if $y3 =~ /^[0-9a-fA-F]/
     puts "ly#{$y3}"
    else
     puts lyct[0]
    end
    if $c3 =~ /^[1-9]/
     puts "lc#{$c3}"
    else
     puts lyct[1]
    end
    if $t3 =~ /^[1-9]/
     puts "lt#{$t3}"
    else
     puts lyct[2]
    end
    dx3= dx2+$l3.to_f*bb/zz; dy3=dy2+$l3.to_f*aa/zz
    fukusen(p1,p2,dx3,dy3,aa,bb,zz)
   end
  end
 end
 puts lyct[0]; puts "h# #{msg}"
end
def fukusen(p1,p2,dx,dy,aa,bb,zz)
 t0,t1 = p1[0]+$off1.to_f*aa/zz,p1[1]+$off1.to_f*bb/zz
 t2,t3 = p2[0]-$off2.to_f*aa/zz,p2[1]-$off2.to_f*bb/zz
 printf("%0.10f %0.10f %0.10f %0.10f\n", t0-dx,t1+dy,t2-dx,t3+dy)
 printf("%0.10f %0.10f %0.10f %0.10f\n", t0+dx,t1-dy,t2+dx,t3-dy)
end
main()
:END
####以上です。


Indexへ
(14087)←【14090】→(14091)
------------------------
【タイトル】Re(4):外変作成の依頼
【記事番号】 14090 (14087)
【 日時 】08/10/19 11:21
【 発言者 】mizuki

▼hayabusaさん:
こんにちは。mizukiです。

ご多忙のところ有り難うございました。
連続して書けます。

もう一つお願いがあります。

REM #k |W=100|W=90|W=75|W=65|W=50|

として、エディタでLGSの厚みを指定するのではなく
クリックして選択したいのです。
(恥ずかしいのですがエディタを知らない所員がいる。)

時間のあるときで構いません。
お願いできればと思います。


Indexへ
(14090)←【14091】→(14094)
------------------------
【タイトル】Re(5):外変作成の依頼
【記事番号】 14091 (14090)
【 日時 】08/10/19 12:19
【 発言者 】hayabusa

こんにちは。
▼mizukiさん:
>
>REM #k |W=100|W=90|W=75|W=65|W=50|
>
>として、エディタでLGSの厚みを指定するのではなく
>クリックして選択したいのです。

####下記より
@REM 壁線連続作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの49行目からです。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |PB9.5 L|PB12.5 R|12.5+9.5|12.5+12.5|15+15|21+21|BAT 編集|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #h0
REM #k LGS選択|W=100 L|W=90 R|W=75|W=65|W=50|/_/a
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:7
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
:do5
:do6
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do7
start notepad.exe 壁線連続作図.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
##### 設 定 ######################################################
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#   
$off1 = 50  #始点からのオフセット設定 [単位 mm]
$off2 = 50  #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定------
#
$c1 = "1"   #1線目の線色(1〜9)    [無指定:書込み線色]
$t1 = "1"   #1線目の線種(1〜9)    [無指定:書込み線種]
$y1 = "1"   #1線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
##################################################################
def main
 kabe_type = [9.5,12.5,[12.5,9.5],[12.5,12.5],[15,15],[21,21]] #壁種類(REM #hmの項目記述順)
 lgs_w = [100,95,75,65,50]  #LGS種類(REM #k LGS選択順)
 while ARGV.size > 1
  case argument = ARGV.pop
   when /^[1-9]/
    $no = argument.to_i-1
   when /^\/a/
    $wno = argument[2,1].to_i-1
  end
 end
 $l1 = lgs_w[$wno].to_f/2.0
#############以上です。


----以下は参考です。
外部変形は各個人により設定や使用法は様々だと思いますので一つの
外部変形で全ての状況に対応するのは不可能とは言いませんが極めて
困難だと思います・・

そこで外部変形の連携が必要になってきます。
以下はREM #/hによる具体的な参考例です。

各作業フォルダの階層例
平面作図--------------------C:\平面作図(ここにmain.batを置く)
-1-平面用図形フォルダ-------C:\平面作図\図形
-2-平面用OPTフォルダ--------C:\平面作図\OPT
-3-テンプレートフォルダ-----C:\平面作図\TMPL
-4-平面用外部変形-----------C:\平面作図\外変
--4.1 柱作図.bat------------C:\平面作図\外変\柱作図.bat
--4.2 間柱作図.bat----------C:\平面作図\外変\間柱作図.bat
--4.3 壁線作図.bat----------C:\平面作図\外変\壁線作図.bat
--4.4 建具枠作図.bat--------C:\平面作図\外変\建具枠作図.bat

※#h/以降のファイル名はフルパスで指定した方が良いと思います。
慣れてきましたら相対パスも試してみると違いが解ります。

######main.bat
@REM 平面用外部変形(main)
@echo off
goto do%1
REM #jww
REM #cd
REM #hm |柱作図|間柱作図|壁線作図|建具枠作図|BAT 編集|
REM #:1
REM #h/C:\平面作図\外変\柱作図.bat
REM #e
REM #:2
REM #h/C:\平面作図\外変\間柱作図.bat
REM #e
REM #:3
REM #h/C:\平面作図\外変\壁線作図.bat
REM #e
REM #:4
REM #h/C:\平面作図\外変\建具枠作図.bat
REM #e
REM #:5
REM #hr
REM #e
:do1
echo h# 柱作図.batに移動しました。 > jwc_temp.txt
goto END
:do2
echo h# 間柱作図.batに移動しました。 > jwc_temp.txt
goto END
:do3
echo h# 壁線作図.batに移動しました。 > jwc_temp.txt
goto END
:do4
echo h# 建具枠作図.batに移動しました。 > jwc_temp.txt
goto END
:do5
start notepad.exe main.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
:END
######以上main.bat

######壁線作図.bat
@REM 壁線作図
@echo off
goto do%1
REM #jww
REM #cd
REM #hm |PB9.5|PB12.5|12.5+9.5|12.5+12.5|15+15|21+21|BAT 編集|mainに戻る|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:7
REM #hr
REM #e
REM #:8
REM #h/C:\平面作図\main.bat
REM #e
:do1
:do2
:do3
:do4
:do5
:do6
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do7
start notepad.exe 壁線作図.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
:do8
echo h# main.batに移動しました。 > jwc_temp.txt
goto END
#####以上壁線作図


Indexへ
(14091)←【14094】→(14505)
------------------------
【タイトル】Re(6):外変作成の依頼
【記事番号】 14094 (14091)
【 日時 】08/10/19 16:07
【 発言者 】mizuki

▼hayabusaさん:
こんにちは。mizukiです。

休日にもかかわらず有り難うございました。
思い通りに動きました。

>
>そこで外部変形の連携が必要になってきます。
>以下はREM #/hによる具体的な参考例です。
>
>各作業フォルダの階層例
>平面作図--------------------C:\平面作図(ここにmain.batを置く)
>-1-平面用図形フォルダ-------C:\平面作図\図形
>-2-平面用OPTフォルダ--------C:\平面作図\OPT

>※#h/以降のファイル名はフルパスで指定した方が良いと思います。
>慣れてきましたら相対パスも試してみると違いが解ります。
>

おっしゃる事は理解出来ます。
「メニューのバッチファイルが多すぎて選ぶのが大変だ。」
と所員に言われています。

勉強して整理出来るようがんばります。
本当に有り難うございました。


Indexへ
(14094)←【14505】→(14514)
------------------------
【タイトル】Re(7):外変作成の依頼
【記事番号】 14505 (14094)
【 日時 】09/01/04 21:29
【 発言者 】rkj seiwa@wf7.so-net.ne.jp

あけましておめでとうございます。
hayabusaさん外変ありがとうございます。
さて、Re(3)までのBATは動いたのですが、Re(5)のBATが動きません。
なんとなく両方の合算だと思い、あれやこれややってみたのですが上手くいきません。 どうすればよいのでしょうか?


Indexへ
(14505)←【14514】→(14523)
------------------------
【タイトル】Re(8):外変作成の依頼
【記事番号】 14514 (14505)
【 日時 】09/01/06 08:52
【 発言者 】mizuki

▼rkjさん:おはようございます。

>さて、Re(3)までのBATは動いたのですが、Re(5)のBATが動きません。
>なんとなく両方の合算だと思い、あれやこれややってみたのですが上手くいきません。 どうすればよいのでしょうか?

私はRe(1),(3),(5)を合算しました。
先に仕上げを選択します。

REM #hm |PB12|PB9|PB12+9|PB9+12|PB12+12|PB15+15|PB21+21|K8+8|
REM #:1
REM #h/C:\JWW\外部変形\ruby\間仕切\PB12.BAT
REM #e

次にLGSの巾を選択します。
PB12.BATが下記です。

REM #hc【壁厚】 ボタンを選択して下さい。
REM #hm【壁厚】|W100|W90|W75|W65|W50|W45|
REM #:1
REM #h/C:\JWW\外部変形\ruby\間仕切\100+12.BAT
REM #e
REM #:2
REM #h/C:\JWW\外部変形\ruby\間仕切\90+12.BAT
REM #e


100+12.BATが下記です。
Re(1)を修正しました。

@REM 指示点間複線作図
@echo off
REM #jww
REM #cd

REM #h0
REM #1- 【作図始点を指示】
REM #99#
REM #hr
REM #e

copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
goto END

Re(1)の
def main
 $koumoku = ARGV.pop.to_s
 include Math
を両側1本のときは
def main
 $koumoku = "1"
 include Math

を両側2本のときは
def main
 $koumoku = "2"
 include Math

素人なので恥ずかしく、笑われそうですが
試行錯誤で組み合わせたら無事動きました。
hayabusaさんには丁寧な御指導で感謝致します。


Indexへ
(14514)←【14523】→(14528)
------------------------
【タイトル】Re(8):外変作成の依頼
【記事番号】 14523 (14505)
【 日時 】09/01/06 20:49
【 発言者 】hayabusa

rkjさん、こんにちは。

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

Re(1)のスクリプトは両側、片側の複線を作図するもので汎用性は高い
ですが、設定を頻繁に変更する場合は使いづらいかもしれません。
そこで、mizukiさんが記述されたように項目から選択したり
#h/を使用して分岐させる手法により効率良い作図が可能となります。

尚、Re(5)はRe(3)を修正したもので念の為、再度書き込みます。

バッチファイル名は「LGS壁線作図.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe LGS壁線作図.bat---修正必要)
######下記より
@REM LGS壁線連続作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの49行目からです。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |PB9.5 L|PB12.5 R|12.5+9.5|12.5+12.5|15+15|21+21|BAT 編集|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #h0
REM #k LGS選択|W=100 L|W=90 R|W=75|W=65|W=50|/_/a
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:7
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
:do5
:do6
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do7
start notepad.exe LGS壁線作図.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
##### 設 定 ######################################################
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#
$off1 = 50  #始点からのオフセット設定 [単位 mm]
$off2 = 50  #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定------
#
$c1 = "1"   #1線目の線色(1〜9)    [無指定:書込み線色]
$t1 = "1"   #1線目の線種(1〜9)    [無指定:書込み線種]
$y1 = "1"   #1線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
##################################################################
def main
 kabe_type = [9.5,12.5,[12.5,9.5],[12.5,12.5],[15,15],[21,21]] #壁種類(REM #hmの項目記述順)
 lgs_w = [100,95,75,65,50]  #LGS種類(REM #k LGS選択順)
 while ARGV.size > 1
  case argument = ARGV.pop
   when /^[1-9]/
    $no = argument.to_i-1
   when /^\/a/
    $wno = argument[2,1].to_i-1
  end
 end
 $l1 = lgs_w[$wno].to_f/2.0
#############2線目、3線目設定
 if $no.to_s =~ /^[01]/
  $koumoku = "1"
  $l2 = kabe_type[$no].to_f
  $c2 = "2"   #2線目の線色(1〜9)    [無指定:書込み線色]
  $t2 = "1"   #2線目の線種(1〜9)    [無指定:書込み線種]
  $y2 = "3"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
 elsif $no.to_s =~ /^[2-5]/
  $koumoku = "2"
  $l2 = kabe_type[$no][0].to_f
  $c2 = "3"   #2線目の線色(1〜9)    [無指定:書込み線色]
  $t2 = "3"   #2線目の線種(1〜9)    [無指定:書込み線種]
  $y2 = "2"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]

  $l3 = kabe_type[$no][1].to_f
  $c3 = "2"   #3線目の線色(1〜9)    [無指定:書込み線色]
  $t3 = "1"   #3線目の線種(1〜9)    [無指定:書込み線種]
  $y3 = "3"   #3線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
 end
##################################################################
 include Math
 if $koumoku == "1"
  msg = "2線を指示点間の両側に作図しました。"
 elsif $koumoku == "2"
  msg = "3線を指示点間の両側に作図しました。"
 end
 lyct,hps = [],[]
 while ARGF.gets
  ele = split
  if ele[0] =~ /^l[yct]/
   lyct << ele[0]
  elsif ele[0] =~ /^hp[1-9]/
   ele.shift
   hps << ele.collect!{ |item| sprintf("%0.10f",item).to_f }
  end
 end
 for idx in 1..hps.size-1
  p1,p2 = hps[idx-1],hps[idx]
  aa,bb = p2[0]-p1[0],p2[1]-p1[1]; zz = (aa**2+bb**2)**0.5
  if aa == 0 && bb == 0
   puts "he 始点と終点が同じです。"; exit
  end
  if $y1 =~ /^[0-9a-fA-F]/
   puts "ly#{$y1}"
  else
   puts lyct[0]
  end
  if $c1 =~ /^[1-9]/
   puts "lc#{$c1}"
  else
   puts lyct[1]
  end
  if $t1 =~ /^[1-9]/
   puts "lt#{$t1}"
  else
   puts lyct[2]
  end
  dx1= $l1.to_f*bb/zz; dy1=$l1.to_f*aa/zz
  fukusen(p1,p2,dx1,dy1,aa,bb,zz)
  if $koumoku =~ /^[1-2]/
   if $y2 =~ /^[0-9a-fA-F]/
    puts "ly#{$y2}"
   else
    puts lyct[0]
   end
   if $c2 =~ /^[1-9]/
    puts "lc#{$c2}"
   else
    puts lyct[1]
   end
   if $t2 =~ /^[1-9]/
    puts "lt#{$t2}"
   else
    puts lyct[2]
   end
   dx2= dx1+$l2.to_f*bb/zz; dy2=dy1+$l2.to_f*aa/zz
   fukusen(p1,p2,dx2,dy2,aa,bb,zz)
   if $koumoku =~ /^2/
    if $y3 =~ /^[0-9a-fA-F]/
     puts "ly#{$y3}"
    else
     puts lyct[0]
    end
    if $c3 =~ /^[1-9]/
     puts "lc#{$c3}"
    else
     puts lyct[1]
    end
    if $t3 =~ /^[1-9]/
     puts "lt#{$t3}"
    else
     puts lyct[2]
    end
    dx3= dx2+$l3.to_f*bb/zz; dy3=dy2+$l3.to_f*aa/zz
    fukusen(p1,p2,dx3,dy3,aa,bb,zz)
   end
  end
 end
 puts lyct[0]; puts "h# #{msg}"
end
def fukusen(p1,p2,dx,dy,aa,bb,zz)
 t0,t1 = p1[0]+$off1.to_f*aa/zz,p1[1]+$off1.to_f*bb/zz
 t2,t3 = p2[0]-$off2.to_f*aa/zz,p2[1]-$off2.to_f*bb/zz
 printf("%0.10f %0.10f %0.10f %0.10f\n", t0-dx,t1+dy,t2-dx,t3+dy)
 printf("%0.10f %0.10f %0.10f %0.10f\n", t0+dx,t1-dy,t2+dx,t3-dy)
end
main()
:END
######以上です。


Indexへ
(14523)←【14528】→(14536)
------------------------
【タイトル】Re(9):外変作成の依頼
【記事番号】 14528 (14523)
【 日時 】09/01/07 16:56
【 発言者 】rkj seiwa@wf7.so-net.ne.jp

mizuki様、hayabusa様ご返答有難うございます。
この外変は大変助かります。 今後使用される方も多いのではないかと思います。
そこで、お忙しい処ご迷惑でしょうが、コーナー処理も出来る様になればと思っております。 この外変がさらなる発展を切望いたします。


Indexへ
(14528)←【14536】→(14538)
------------------------
【タイトル】Re(10):コーナー処理簡易版
【記事番号】 14536 (14528)
【 日時 】09/01/09 11:43
【 発言者 】hayabusa

▼rkjさん:
>mizuki様、hayabusa様ご返答有難うございます。
>この外変は大変助かります。 今後使用される方も多いのではないかと思います。
>そこで、お忙しい処ご迷惑でしょうが、コーナー処理も出来る様になればと思っております。 この外変がさらなる発展を切望いたします。

こんにちは。

コーナーは外部変形実行後、Jw_cad包絡機能により処理するという事が前提
ですが確かにコーナーも含めて処理できれば便利だと思います。

ある程度のコーナー処理は可能だと思いますが全ての状況に対処できるかと
いうと厄介な場合が多々あります。
取りあえず、屈折点コーナー処理のオプションを追加しました。
交差点のコーナー処理はできません。

バッチファイル名は「LGS壁線作図02.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe LGS壁線作図02.bat---修正必要)
######下記より
@REM LGS壁線連続作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの47行目からです。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |PB9.5 L|PB12.5 R|12.5+9.5|12.5+12.5|15+15|21+21|BAT 編集|
REM #:1
REM #:2
REM #:3
REM #:4
REM #:5
REM #:6
REM #h0
REM #k LGS選択|W=65 L|W=75 R|W=90|W=100|W=50|/_/a
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:7
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
:do5
:do6
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do7
start notepad.exe LGS壁線作図02.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
##### 設 定 ######################################################
#
$corn = "on" #屈折点コーナー処理設定(on≡設定有; off≡設定無)
#       ※ on の場合は下記オフセットは無効です。
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#
$off1 = 32.5  #始点からのオフセット設定 [単位 mm]
$off2 = 32.5  #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定------
#
$c1 = "1"   #1線目の線色(1〜9)    [無指定:書込み線色]
$t1 = "1"   #1線目の線種(1〜9)    [無指定:書込み線種]
$y1 = "1"   #1線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
#
##################################################################
def main
 kabe_type = [9.5,12.5,[12.5,9.5],[12.5,12.5],[15,15],[21,21]] #壁種類(REM #hmの項目記述順)
 lgs_w = [65,75,90,100,50]  #LGS種類(REM #k LGS選択順)
 while ARGV.size > 1
  case argument = ARGV.pop
   when /^[1-9]/
    $no = argument.to_i-1
   when /^\/a/
    $wno = argument[2,1].to_i-1
  end
 end
 $l1 = lgs_w[$wno].to_f/2.0
#############2線目、3線目設定
 if $no.to_s =~ /^[01]/
  $koumoku = "1"
  $l2 = kabe_type[$no].to_f
  $c2 = "2"   #2線目の線色(1〜9)    [無指定:書込み線色]
  $t2 = "1"   #2線目の線種(1〜9)    [無指定:書込み線種]
  $y2 = "3"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
 elsif $no.to_s =~ /^[2-5]/
  $koumoku = "2"
  $l2 = kabe_type[$no][0].to_f
  $c2 = "3"   #2線目の線色(1〜9)    [無指定:書込み線色]
  $t2 = "3"   #2線目の線種(1〜9)    [無指定:書込み線種]
  $y2 = "2"   #2線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]

  $l3 = kabe_type[$no][1].to_f
  $c3 = "2"   #3線目の線色(1〜9)    [無指定:書込み線色]
  $t3 = "1"   #3線目の線種(1〜9)    [無指定:書込み線種]
  $y3 = "3"   #3線目作図レイヤ(0〜f)  [無指定:書込みレイヤ]
 end
##################################################################
 if $koumoku == "1"
  msg = "2線を指示点間の両側に作図しました。"
 elsif $koumoku == "2"
  msg = "3線を指示点間の両側に作図しました。"
 end
 if $corn == "on"
  $off1,$off2 = 0,0
 end
 lyct,hps = [],[]
 while ARGF.gets
  ele = split
  if ele[0] =~ /^l[yct]/
   lyct << ele[0]
  elsif ele[0] =~ /^hp[1-9]/
   ele.shift
   hps << ele.collect!{ |item| sprintf("%0.10f",item).to_f }
  end
 end
 if hps[0] == hps[-1]
  $hp_flag = 1
 end
 lns1,lns2,lns3 = [],[],[]
 for idx in 1..hps.size-1
  p1,p2 = hps[idx-1],hps[idx]
  aa,bb = p2[0]-p1[0],p2[1]-p1[1]; zz = (aa**2+bb**2)**0.5
  if aa == 0 && bb == 0
   puts "he 始点と終点が同じです。"; exit
  end
  dx1,dy1 = $l1.to_f*bb/zz,$l1.to_f*aa/zz
  lns1 << fukusen(p1,p2,dx1,dy1,aa,bb,zz)
  if $koumoku =~ /^[1-2]/
   dx2,dy2 = dx1+$l2.to_f*bb/zz,dy1+$l2.to_f*aa/zz
   lns2 << fukusen(p1,p2,dx2,dy2,aa,bb,zz)
   if $koumoku =~ /^2/
    dx3,dy3 = dx2+$l3.to_f*bb/zz,dy2+$l3.to_f*aa/zz
    lns3 << fukusen(p1,p2,dx3,dy3,aa,bb,zz)
   end
  end
 end
 if $y1 =~ /^[0-9a-fA-F]/
  puts "ly#{$y1}"
 else
  puts lyct[0]
 end
 if $c1 =~ /^[1-9]/
  puts "lc#{$c1}"
 else
  puts lyct[1]
 end
 if $t1 =~ /^[1-9]/
  puts "lt#{$t1}"
 else
  puts lyct[2]
 end
 draw(lns1)
 if $koumoku =~ /^[1-2]/
  if $y2 =~ /^[0-9a-fA-F]/
   puts "ly#{$y2}"
  else
   puts lyct[0]
  end
  if $c2 =~ /^[1-9]/
   puts "lc#{$c2}"
  else
   puts lyct[1]
  end
  if $t2 =~ /^[1-9]/
   puts "lt#{$t2}"
  else
   puts lyct[2]
  end
  draw(lns2)
 end
 if $koumoku =~ /^2/
  if $y3 =~ /^[0-9a-fA-F]/
   puts "ly#{$y3}"
  else
   puts lyct[0]
  end
  if $c3 =~ /^[1-9]/
   puts "lc#{$c3}"
  else
   puts lyct[1]
  end
  if $t3 =~ /^[1-9]/
   puts "lt#{$t3}"
  else
   puts lyct[2]
  end
  draw(lns3)
 end
 puts lyct[0]; puts "h# #{msg}"
end
def fukusen(p1,p2,dx,dy,aa,bb,zz)
 t0,t1 = p1[0]+$off1.to_f*aa/zz,p1[1]+$off1.to_f*bb/zz
 t2,t3 = p2[0]-$off2.to_f*aa/zz,p2[1]-$off2.to_f*bb/zz
 fl1=[t0-dx,t1+dy,t2-dx,t3+dy]
 fl2=[t0+dx,t1-dy,t2+dx,t3-dy]
 return fl1,fl2
end
def draw(lns)
 if $corn == "on"
  pts = []
  if $hp_flag == 1
   lns.unshift(lns[-1])
  else
   pts << lns[0][0][0,2]+lns[0][1][0,2]
  end
  for idx in 1..lns.size-1
   x1,y1 = linepoint_keisan(lns[idx-1][0],lns[idx][0])
   x2,y2 = linepoint_keisan(lns[idx-1][1],lns[idx][1])
   pts << [x1,y1,x2,y2]
  end
  if $hp_flag == 1
   ii = 0
  else
   pts << lns[-1][0][2,2]+lns[-1][1][2,2]
   ii = 1
  end
  for idx in ii..pts.size-1
   pts[idx-1].collect!{ |item| sprintf("%0.10f",item).to_f }
   pts[idx].collect!{ |item| sprintf("%0.10f",item).to_f }
   puts [pts[idx-1][0,2],pts[idx][0,2]].join("\s")
   puts [pts[idx-1][2,2],pts[idx][2,2]].join("\s")
  end
 elsif $corn == "off"
  for idx in 0..lns.size-1
   lns[idx][0].collect!{ |item| sprintf("%0.10f",item).to_f }
   lns[idx][1].collect!{ |item| sprintf("%0.10f",item).to_f }
   puts [lns[idx][0]].join("\s")
   puts [lns[idx][1]].join("\s")
  end
 end
end
def linepoint_keisan(axy,bxy)
 x1,y1,x2,y2 = axy[0],axy[1],axy[2],axy[3]
 x3,y3,x4,y4 = bxy[0],bxy[1],bxy[2],bxy[3]
 if axy != bxy
  f1,g1 = x2-x1,y2-y1
  f2,g2 = x4-x3,y4-y3
  det = f2*g1-f1*g2
  if det != 0.0
   dx,dy = x3-x1,y3-y1
   t1,t2 = (f2*dy-g2*dx)/det,(f1*dy-g1*dx)/det
   x0,y0 = x1+f1*t1,y1+g1*t1
  else
   x0,y0 = x3,y3
  end
 end
 return x0,y0
end
main()
:END
#####以上です。


Indexへ
(14536)←【14538】→(14543)
------------------------
【タイトル】Re(11):コーナー処理簡易版
【記事番号】 14538 (14536)
【 日時 】09/01/12 09:36
【 発言者 】mizuki

▼hayabusaさん:
こんにちは。mizukiです。
コーナー処理簡易版有り難うございます。

大変便利なので使わせていただきたいのですが
お願いがあります。

連続して作図したいのです。
今回のは
仕上→LGS巾→始点→終点→作図→仕上→LGS巾→始点→終点→作図ですが
1つの物件では仕上、LGS巾とも同じ事が多いので

仕上→LGS巾→始点→終点→作図→始点→終点→作図だと
もっと短縮されます。

REM #h/***.BATで仕上を選択し
REM #h/***.BATでLGS巾を選択し

次の100+12.BATを
REM #h0
REM #1- 【作図始点を指示】
REM #99#
REM #hr
REM #e
で繰り返すように出来ればと思いました。

がんばってみましたが無理でした。
前回のは仕上、LGSの巾を指定しましたが今回のは
仕上、LGSの巾を選択した時点で自動で決定されるようです。
玄人的には当然なのだと思いますが。

出来れば前のタイプでコーナー処理が出来るタイプを
お願いできないでしょうか?

それと2線と3線と片側のタイプを別々にしていただくと助かります。
($koumoku のところで挫折します。)
コーナー処理はオプションでなくてもよいのでは無いでしょうか?

宜しくお願い致します。


Indexへ
(14538)←【14543】→(14544)
------------------------
【タイトル】Re(12):最終基本形です。
【記事番号】 14543 (14538)
【 日時 】09/01/12 18:20
【 発言者 】hayabusa

こんにちは。
当初の複線作図からLGSの壁線作図に特化していく間にオプションが入り組んで
ややこしい事になってしまったようです。

そこでコーナー処理を追加した最終基本形を書込みますので此れを元に
バッチファイルを作成してください。

---例---
@REM LGS100PB12.5両側作図(コーナー処理)
@echo off
REM #jww
REM #cd
REM #h0
REM #1- 【作図始点を指示】
REM #99#
REM #hr
REM #e
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
#スクリプトの下記箇所を修正
$11=50
$l2=12.5
$koumoku = ARGV.pop.to_s → $koumoku = "1"に修正

このスレッドも長くなりましたので私の書込みはこれで終わりにしたいと思います。

バッチファイル名は「複線作図02.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe 複線作図02.bat---修正必要)
######下記より
@REM 指示点間複線作図
@echo off
goto do%1
rem ------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの66行目からです。
rem ------------------------------------------------------------
rem ※注意点
rem  1.この外部変形は指示点間に複線を作図するものです。
rem  2.作図は書込みグループの指定レイヤです。
rem  3.不必要なグループは非表示にしてください。
rem  4.図面軸角0で使用してください。
rem ------------------------------------------------------------
REM #jww
REM #cd
REM #hm |2線両側 L|3線両側 R|2線片側|3線片側|BAT 編集|
REM #:1
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:2
REM #h0
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:3
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #3 複線作図方向を指示 (L)free
REM #hr
REM #e
REM #:4
REM #h0
REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意
REM #3 複線作図方向を指示 (L)free
REM #hr
REM #e
REM #:5
REM #h0
REM #hr
REM #e
:do1
:do2
:do3
:do4
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do5
start notepad.exe 複線作図02.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
def main
##### 設 定 ######################################################
#
$corn = "on" #屈折点コーナー処理設定(on≡設定有; off≡設定無)
#       ※"on"および両側複線 の場合は下記オフセットは無効です。
#
# オフセットが正の場合は指示点間の内側、負の場合は外側に作図します。
#   
$off1 = 54.5 #始点からのオフセット設定 [単位 mm]
$off2 = 54.5 #終点からのオフセット設定 [単位 mm]
#
#------1線目の設定-----------
#
$l1 = 32.5  #中心線からの間隔    [単位 mm]
$c1 = "1"   #1線目の線色(1〜9)   [無指定:書込み線色]
$t1 = "1"   #1線目の線種(1〜9)   [無指定:書込み線種]
$y1 = "1"   #1線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
#-----------------------------
$koumoku = ARGV.pop.to_s
if $koumoku == "1"
 @line_type = ["2","W"] # W≡複線両側
 msg = "2線を指示点間の両側に作図しました。"
elsif $koumoku == "2"
 @line_type = ["3","W"]
 msg = "3線を指示点間の両側に作図しました。"
elsif $koumoku == "3"
 @line_type = ["2","S"] # S≡複線片側
 msg = "2線を指示点間の片側に作図しました。"
elsif $koumoku == "4"
 @line_type = ["3","S"]
 msg = "3線を指示点間の片側に作図しました。"
end
#
#------2線の場合------------
#
if @line_type[0] == "2"
 $l2 = 12.5  #2線---1線目からの間隔 [単位 mm]
 $c2 = "2"   #2線目の線色(1〜9)   [無指定:書込み線色]
 $t2 = "1"   #2線目の線種(1〜9)   [無指定:書込み線種]
 $y2 = "3"   #2線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
#------#3線の場合-----------
#
elsif @line_type[0] == "3"
 $l2 = 12.5  #2線---1線目からの間隔 [単位 mm]
 $c2 = "3"   #2線目の線色(1〜9)   [無指定:書込み線色]
 $t2 = "3"   #2線目の線種(1〜9)   [無指定:書込み線種]
 $y2 = "2"   #2線目作図レイヤ(0〜f) [無指定:書込みレイヤ]

 $l3 = 9.5   #3線---2線目からの間隔 [単位 mm]
 $c3 = "2"   #3線目の線色(1〜9)   [無指定:書込み線色]
 $t3 = "1"   #3線目の線種(1〜9)   [無指定:書込み線種]
 $y3 = "3"   #3線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
end
#################################################################
 lyct,hps = [],[]
 while ARGF.gets
  ele = split
  if ele[0] =~ /^l[yct]/
   lyct << ele[0]
  elsif ele[0] =~ /^hp[1-9]/
   ele.shift
   hps << ele.collect!{ |item| sprintf("%0.10f",item).to_f }
  end
 end
 if @line_type[1] == "W"
  if hps.size == 1
   puts "he 2点以上指示してください。"; exit
  else
   if hps[0] == hps[-1]
    $hp_flag = 1
   end
  end
  if $corn == "on"
   $off1,$off2 = 0,0
  end
 elsif @line_type[1] == "S"
  p3 = hps.pop
 end
 lns1,lns2,lns3 = [],[],[]
 for idx in 1..hps.size-1
  p1,p2 = hps[idx-1],hps[idx]
  aa,bb = p2[0]-p1[0],p2[1]-p1[1]; zz = (aa**2+bb**2)**0.5
  if aa == 0 && bb == 0
   puts "he 同一点が連続して指示されています。"; exit
  end
  if @line_type[1] == "S"
   if aa/bb > 0
    if p1[0] > p2[0]
     pxt = p1[0]; p1[0] = p2[0]; p2[0] = pxt
     pyt = p1[1]; p1[1] = p2[1]; p2[1] = pyt
     off = $off1
     $off1 = -$off2; $off2 = -off
    end
   elsif aa/bb < 0
    if p1[0] < p2[0]
     pxt = p1[0]; p1[0] = p2[0]; p2[0] = pxt
     pyt = p1[1]; p1[1] = p2[1]; p2[1] = pyt
     off = $off1
     $off1 = -$off2; $off2 = -off
    end
   end
   f1,g1 = p3[0]-p1[0],p3[1]-p1[1]
   f2,g2 = aa,bb
   @det = f1*g2-f2*g1
   if @det == 0
    puts "he 複線作図方向指示エラー。"; exit
   end
  end
  dx1,dy1 = $l1.to_f*bb/zz,$l1.to_f*aa/zz
  lns1 << fukusen(p1,p2,dx1,dy1,aa,bb,zz)
  if @line_type[0] =~ /^[23]/
   dx2,dy2 = dx1+$l2.to_f*bb/zz,dy1+$l2.to_f*aa/zz
   lns2 << fukusen(p1,p2,dx2,dy2,aa,bb,zz)
   if @line_type[0] =~ /^3/
    dx3,dy3 = dx2+$l3.to_f*bb/zz,dy2+$l3.to_f*aa/zz
    lns3 << fukusen(p1,p2,dx3,dy3,aa,bb,zz)
   end
  end
 end
 if $y1 =~ /^[0-9a-fA-F]/
  puts "ly#{$y1}"
 else
  puts lyct[0]
 end
 if $c1 =~ /^[1-9]/
  puts "lc#{$c1}"
 else
  puts lyct[1]
 end
 if $t1 =~ /^[1-9]/
  puts "lt#{$t1}"
 else
  puts lyct[2]
 end
 draw(lns1)
 if @line_type[0] =~ /^[23]/
  if $y2 =~ /^[0-9a-fA-F]/
   puts "ly#{$y2}"
  else
   puts lyct[0]
  end
  if $c2 =~ /^[1-9]/
   puts "lc#{$c2}"
  else
   puts lyct[1]
  end
  if $t2 =~ /^[1-9]/
   puts "lt#{$t2}"
  else
   puts lyct[2]
  end
  draw(lns2)
 end
 if @line_type[0] =~ /^3/
  if $y3 =~ /^[0-9a-fA-F]/
   puts "ly#{$y3}"
  else
   puts lyct[0]
  end
  if $c3 =~ /^[1-9]/
   puts "lc#{$c3}"
  else
   puts lyct[1]
  end
  if $t3 =~ /^[1-9]/
   puts "lt#{$t3}"
  else
   puts lyct[2]
  end
  draw(lns3)
 end
 puts lyct[0],"h# #{msg}"
end
def fukusen(p1,p2,dx,dy,aa,bb,zz)
 t0,t1 = p1[0]+$off1.to_f*aa/zz,p1[1]+$off1.to_f*bb/zz
 t2,t3 = p2[0]-$off2.to_f*aa/zz,p2[1]-$off2.to_f*bb/zz
 fl1=[t0-dx,t1+dy,t2-dx,t3+dy]
 fl2=[t0+dx,t1-dy,t2+dx,t3-dy]
 return fl1,fl2
end
def draw(lns)
 if $corn == "on" && @line_type[1] == "W"
  pts = []
  if $hp_flag == 1
   lns.unshift(lns[-1])
  else
   pts << lns[0][0][0,2]+lns[0][1][0,2]
  end
  for idx in 1..lns.size-1
   x1,y1 = linepoint_keisan(lns[idx-1][0],lns[idx][0])
   x2,y2 = linepoint_keisan(lns[idx-1][1],lns[idx][1])
   pts << [x1,y1,x2,y2]
  end
  if $hp_flag == 1
   ii = 0
  else
   pts << lns[-1][0][2,2]+lns[-1][1][2,2]
   ii = 1
  end
  for idx in ii..pts.size-1
   pts[idx-1].collect!{ |item| sprintf("%0.10f",item).to_f }
   pts[idx].collect!{ |item| sprintf("%0.10f",item).to_f }
   puts [pts[idx-1][0,2],pts[idx][0,2]].join("\s")
   puts [pts[idx-1][2,2],pts[idx][2,2]].join("\s")
  end
 elsif $corn == "off" or @line_type[1] == "S"
  for idx in 0..lns.size-1
   lns[idx][0].collect!{ |item| sprintf("%0.10f",item).to_f }
   lns[idx][1].collect!{ |item| sprintf("%0.10f",item).to_f }
   if @line_type[1] == "W"
    puts [lns[idx][0]].join("\s")
    puts [lns[idx][1]].join("\s")
   elsif @line_type[1] == "S"
    if @det < 0
     puts [lns[idx][0]].join("\s")
    elsif @det > 0
     puts [lns[idx][1]].join("\s")
    end
   end
  end
 end
end
def linepoint_keisan(axy,bxy)
 x1,y1,x2,y2 = axy[0],axy[1],axy[2],axy[3]
 x3,y3,x4,y4 = bxy[0],bxy[1],bxy[2],bxy[3]
 if axy != bxy
  f1,g1 = x2-x1,y2-y1
  f2,g2 = x4-x3,y4-y3
  det = f2*g1-f1*g2
  if det != 0.0
   dx,dy = x3-x1,y3-y1
   t1,t2 = (f2*dy-g2*dx)/det,(f1*dy-g1*dx)/det
   x0,y0 = x1+f1*t1,y1+g1*t1
  else
   x0,y0 = x3,y3
  end
  return x0,y0
 end
end
main()
:END
########以上です。


Indexへ
(14543)←【14544】→(14560)
------------------------
【タイトル】Re(13):最終基本形です。
【記事番号】 14544 (14543)
【 日時 】09/01/13 05:26
【 発言者 】mizuki

▼hayabusaさん:
おはようございます。
御多忙のところ何度も作成していただき
有り難う御座いました。
無事、動作しました。
本当にお世話になりました。


Indexへ
(14544)←【14560】//(14089)
------------------------
【タイトル】Re(14):最終基本形です。
【記事番号】 14560 (14544)
【 日時 】09/01/13 20:08
【 発言者 】rkj seiwa@wf7.so-net.ne.jp

hayabusaさん:
色々注文をお聞きいただき有難う御座いました。
外変の中で一番多様するかと思います。