Indexへ
(14391)//【14362】→(14364)
------------------------
【タイトル】外部変形(LGS-65.BAT)の改造
【記事番号】 14362 (*)
【 日時 】08/12/08 13:56
【 発言者 】ponpoco cxm01436@nifty.com

この会議室で頂戴した LGS-65.BATと壁線作図.BATを 大変便利に使わせてもらっております。 作者さま有難うございます。 

 欲を出して始点−終点指示でLGSと壁2線を同時に書かせようと 無謀にもスプリクト改造に挑戦してみましたが 無限ループに陥りそうなので諦めました。

 作者さま 時間の有るときで結構ですので ご指導願えれば幸いです。


Indexへ
(14362)←【14364】→(14366)
------------------------
【タイトル】Re(1):外部変形(LGS-65.BAT)の改造
【記事番号】 14364 (14362)
【 日時 】08/12/08 17:42
【 発言者 】hayabusa

▼ponpocoさん:
>この会議室で頂戴した LGS-65.BATと壁線作図.BATを 大変便利に使わせてもらっております。 作者さま有難うございます。 
>
> 欲を出して始点−終点指示でLGSと壁2線を同時に書かせようと 無謀にもスプリクト改造に挑戦してみましたが 無限ループに陥りそうなので諦めました。
>

こんにちは。

外部変形のアルゴリズムはいろいろな手法があると思いますし
私自身、rubyの仕様は詳しくありませんので更に効率的な方法が
あると思います。

間柱と壁線を同時に作図する場合、いろいろな組合せがあると思
いますが具体的な壁種類および作図方法が解ると的確な外部変形
が作成できると思います。

あとコーナー部分、開口部分の間柱の向きを如何するかまた壁材
の取り合わせ(クリアランス)等も問題になってくると思います。


Indexへ
(14364)←【14366】→(14371)
------------------------
【タイトル】Re(2):外部変形(LGS-65.BAT)の改造
【記事番号】 14366 (14364)
【 日時 】08/12/08 19:17
【 発言者 】ponpoco cxm01436@nifty.com

▼hayabusaさん:
>
>間柱と壁線を同時に作図する場合、いろいろな組合せがあると思
>いますが具体的な壁種類および作図方法が解ると的確な外部変形
>が作成できると思います。
>
>あとコーナー部分、開口部分の間柱の向きを如何するかまた壁材
>の取り合わせ(クリアランス)等も問題になってくると思います。


早速のご指導ありがとうございます。
私がやりたかったのシンプルなLGS-65.BATを改造して始点−終点の2点を指定してLGSと両側にPB12.5の複線を同時に書けたら格段に便利だなぁ と思った次第です LGSのサイズと張物の厚さは複数のBATファイルで対応しようと思います
端部の処理はオフセットを指定出来れば良いです。

 急ぎませんので宜しくお願い致します。


Indexへ
(14366)←【14371】→(14372)
------------------------
【タイトル】Re(3):外部変形(LGS-65.BAT)の改造
【記事番号】 14371 (14366)
【 日時 】08/12/09 13:45
【 発言者 】hayabusa

こんにちは。

下記はLGS-65のスタッドと壁線を作図する外部変形です。

ある程度汎用性を持たせていますので適宜変更してください。
また指示点連続作図になっていますので二点間のみの場合は
該当部分を下記のように修正してください。

REM #1- 作図始点を指示 (L)free (R)Read ※異縮尺に注意
REM #2 作図終点を指示 (L)free (R)Read ※異縮尺に注意

バッチファイル名は「LGS_65.bat」とし動作確認後に適当な名前に
変更してください。(start notepad.exe LGS_65.bat---修正必要)
######下記より
@REM LGS-65壁作図
@echo off
goto do%1
rem ------------------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存してください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの47行目からです。
rem ------------------------------------------------------------------------
rem ※注意点
rem  1.作図オフセットが正の場合は指示点間の内側負の場合は外側に作図します。
rem   オフセットが無指定の場合の自動計算値は98行目を参照してください。
rem   間柱の向きは指示点方向に対応して変化します。
rem  2.作図は書込みグループの指定レイヤです。
rem  3.不必要なグループは非表示にしてください。
rem  4.図面軸角0で使用してください。
rem ------------------------------------------------------------------------
REM #jww
REM #cd
REM #hm |LGS-65 L|BAT 編集 R|
REM #:1
REM #h0
REM #k 終点反転処理選択|反転無 L|反転有 R|/_/r
REM #c 始点からの作図オフセット入力(単位 mm) [ 無指定 自動計算 ] :/_/a
REM #c 終点からの作図オフセット入力(単位 mm) [ 無指定 自動計算 ] :/_/b
REM #1- 作図点を順番にマウス指示(R) ※異縮尺に注意
REM #99#
REM #hr
REM #e
REM #:2
REM #h0
REM #hr
REM #e
:do1
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt %1 %2 %3 %4 > jwc_temp.txt
del temp.txt
rem pause
exit
goto END
:do2
start notepad.exe LGS_65.bat
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
##### 間柱設定 #####################################################
#
$sa = 65   #スタッドの高さ  [単位 mm] ※LGS-50,65,75,90,100
$sb = 45   #スタッドの辺   [単位 mm]
$sc = 7   #スタッドのリップ [単位 mm]
$sp = 303  #スタッドの間隔  [単位 mm] ※300〜455
$cl = 0   #クリアランス   [単位 mm] ※オフセット自動計算加算値
#
$pl = "on"  #スタッドの曲線属性化設定(on≡設定有; off≡設定無)
#
$lc = "5"  #スタッドの線色(1〜9) [無指定:書込み線色]
$lt = "1"  #スタッドの線種(1〜9) [無指定:書込み線種]
$ly = " "  #作図レイヤ(0〜f)   [無指定:書込みレイヤ]
#
##### 壁線設定 ####################################################
#
$kabe = "2" #壁線数( 1≡1線; 2≡2線; 3≡3線 )
#
#------1線目の設定------
#
$l1 = 32.5  #中心線からの間隔    [単位 mm]
$c1 = "1"  #1線目の線色(1〜9)   [無指定:書込み線色]
$t1 = "1"  #1線目の線種(1〜9)   [無指定:書込み線種]
$y1 = " "  #1線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
#------2線目の設定------
#
$l2 = 12.5  #2線---1線目からの間隔 [単位 mm]
$c2 = "2"  #2線目の線色(1〜9)   [無指定:書込み線色]
$t2 = "1"  #2線目の線種(1〜9)   [無指定:書込み線種]
$y2 = " "  #2線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
#------3線目の設定------
#
$l3 = 9.5  #3線---2線目からの間隔 [単位 mm]
$c3 = "4"  #3線目の線色(1〜9)   [無指定:書込み線色]
$t3 = "1"  #3線目の線種(1〜9)   [無指定:書込み線種]
$y3 = " "  #3線目作図レイヤ(0〜f) [無指定:書込みレイヤ]
#
##################################################################
def main
 include Math
 while ARGV.size > 1
  case argument = ARGV.pop
   when /^\/r/
    $rev = argument[2,1].to_s
   when /^\/a/
    $off1 = argument[2..-1].to_f
   when /^\/b/
    $off2 = argument[2..-1].to_f
  end
 end
#----------------------------------------------------------
 if $off1 == nil #始点オフセット無指定の場合の自動計算式
  $off1 = $sa/2.0+$sb/2.0+$cl.to_f
 end
 if $off2 == nil #終点オフセット無指定の場合の自動計算式
  $off2 = $sa/2.0+$sb/2.0+$cl.to_f
 end
#----------------------------------------------------------
 if (($pl!="on")&&($pl!="off"))|($sa<=0)|($sb<=0)|($sc<=0)|($sp<=0)
  puts "he 間柱作図設定エラー。"; exit
 end
 if $kabe !~/^[1-3]/
  puts "he 壁線数設定エラー。"; exit
 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.size == 1
  puts "he 作図できません。"; exit
 end
 count = 0
 for idx in 1..hps.size-1
  @p1,@p2 = hps[idx-1],hps[idx]
  aa,bb = @p2[0]-@p1[0],@p2[1]-@p1[1]
  if aa == 0 && bb == 0
   puts "he 同じ点が指示されています。"; exit
  end
  zz,zk = sprintf("%0.9f",(aa**2+bb**2)**0.5).to_f,atan2(bb,aa)
  fukusen(aa,bb,zz)
  ln,zp = $sp,data()
  lx,ly = $off1*aa/zz+@p1[0],$off1*bb/zz+@p1[1]
  draw(lx,ly,zk,zp); count += 1
  while ln < zz-100.0
   lx,ly = ln*aa/zz+@p1[0],ln*bb/zz+@p1[1]
   draw(lx,ly,zk,zp); ln += $sp; count += 1
  end
  if $rev == "2"
   zk += PI
  end
  lx,ly = -$off2*aa/zz+@p2[0],-$off2*bb/zz+@p2[1]
  draw(lx,ly,zk,zp); count += 1
 end
 puts @lyct[0],"h# 指示点間に #{count} 本のLGSスタッドと壁線を作図しました。"
end
def draw(lx,ly,zk,zp)
 if $ly =~ /^[0-9a-fA-F]/
  puts "ly#{$ly}"
 else
  puts @lyct[0]
 end
 if $lc =~ /^[1-9]/
  puts "lc#{$lc}"
 else
  puts @lyct[1]
 end
 if $lt =~ /^[1-9]/
  puts "lt#{$lt}"
 else
  puts @lyct[2]
 end
 if $pl == "on"
  puts "pl"
 end
 zp.each{|d|
  jp1x,jp1y = henkan(zk,d[0],d[1]); jp2x,jp2y = henkan(zk,d[2],d[3])
  printf( "%0.11f %0.11f %0.11f %0.11f\n", lx+jp1x,ly+jp1y,lx+jp2x,ly+jp2y)
 }
end
def henkan(zk,px,py)
 jpx,jpy = px*cos(zk)-py*sin(zk),px*sin(zk)+py*cos(zk)
 return jpx,jpy
end
def data
 a,b,c = $sa*0.5,$sb*0.5,$sc
 d3,d4,d5 = [b,a,-b,a],[-b,a,-b,-a],[-b,-a,b,-a]
 d1,d2 = [b-5.5,a-c,b,a-c],[b,a-c,b,a]
 d6,d7 = [b,-a,b,-a+c],[b,-a+c,b-5.5,-a+c]
 zp = [d1,d2,d3,d4,d5,d6,d7]
 return zp
end
def fukusen(aa,bb,zz)
 if $kabe =~ /^[1-3]/
  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,dy1,off = $l1.to_f*bb/zz,$l1.to_f*aa/zz,$l1.to_f
  darw(dx1,dy1,aa,bb,zz,off)
 end
 if $kabe =~ /^[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
  dx2,dy2,off = dx1+$l2.to_f*bb/zz,dy1+$l2.to_f*aa/zz,$l1.to_f+$l2.to_f
  darw(dx2,dy2,aa,bb,zz,off)
 end
 if $kabe =~ /^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
  dx3,dy3,off = dx2+$l3.to_f*bb/zz,dy2+$l3.to_f*aa/zz,$l1.to_f+$l2.to_f+$l3.to_f
  darw(dx3,dy3,aa,bb,zz,off)
 end
end
def darw(dx,dy,aa,bb,zz,off)
 t0,t1 = @p1[0]+off.to_f*aa/zz,@p1[1]+off.to_f*bb/zz
 t2,t3 = @p2[0]-off.to_f*aa/zz,@p2[1]-off.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へ
(14371)←【14372】//(14363)
------------------------
【タイトル】Re(4):外部変形(LGS-65.BAT)の改造
【記事番号】 14372 (14371)
【 日時 】08/12/09 16:00
【 発言者 】ponpoco cxm01436@nifty.com

▼hayabusaさん:

 完璧です! 端部のLGSの反転まで対応していただき感激しています。
  本当は後でこっそりお願いしようと思っていました。
 
 又お願いすることも有ると思いますがが 宜しくお願い致します。
  
  お忙しい中本当にありがとうございました。