####下記より[メモ帳]にコピペして全角空白→半角空白の置換をしてください。
@REM 三斜計算CB出力
@echo off
goto do%1
rem
rem ----------------------------------------------------------------
rem ※このファイルを編集した場合は上書き保存して閉じてください。
rem ※ファイルを閉じなくても編集は反映されます。
rem ※作図設定はこのバッチファイルの82行目からです。
rem ----------------------------------------------------------------
rem ※概要
rem 1.この外部変形はJWW_SMPL.EXEと連携して三斜計算データをクリップ
rem ボードにコピーするものです。
rem タブ区切りですのでエクセル側に於いて右クリックからセル単位で
rem 貼付できます。(他の表計算ソフトでも可能)
rem 2.全てのオプションをコマンドラインに設定してありますので環境に
rem 応じて適宜修正して下さい。
rem ----------------------------------------------------------------
REM #jww
REM #cd
REM #hm |三斜計算 L|Excel 起動 R|BAT 編集|
REM #:1
REM #h1
REM #g0 書込みグループのみ選択対象
REM #hc 【 三 斜 計 算 】 三角形を選択(三角形の辺 200 まで)
REM #0 数値書き込み位置指示 (L)free (R)Read
REM #f 敷地名称(無指定 無) : /_$1"
REM #c 番号の前に追加する文字(無指定 無) : /_$2"
REM #ht10 ブロック図形の書出しをしない
REM #ht40 ソリッドの書出しをしない
REM #hr
REM #e
REM #:2
REM #:3
REM #h0
REM #hr
REM #e
rem ---------------------------------------------------------------------------
rem ※JWW_SMPL.EXEオプション(JWW_SMPL.BATより抜粋)※
rem
rem 起動オプション(IME ON)
rem #f 敷 地 名 称 : /_$1"
rem 起動オプション(IME OFF)
rem #c 番号の前に追加する文字 : /_$2"
rem
rem オプション説明(指定レイヤに作図)
rem /N* :初期番号指定 「*」 は初期No[1〜8001] (無指定:1)
rem /L* :レイヤ指定 「*」 はレイヤNo[0〜F] (無指定:書込レイヤ)
rem /M* :文字種類を指定 「*」 は文字種類No[1〜10] (無指定:2)
rem /K* :小数点以下有効桁数を指定 「*」 は桁数No[1〜3] (無指定:2)
rem /T* :三角形頂点に点を作図 「*」 は点種類No[1〜6] (無指定:1)
rem /E*.*:三角形頂点に円を作図 「*.*」 は円半径[図寸 mm] (無指定:1.0)
rem /H* :三角形の辺を作図 「*」 は線色No[1〜6] (無指定:1)
rem
rem /C :指定小数点以下桁数未満を切捨で寸法値作図 (無指定:四捨五入)
rem /S :敷地面積(小数点以下3桁を切捨)を作図
rem
rem ※頂点点種、辺線色はNo[1〜9]の範囲内で再設定できます。
rem ----------------------------------------------------------------------------
:do1
JWW_SMPL.EXE /N1 /LF /M3 /K3 /T /E1.5 /C /S %1 %2 %3
copy jwc_temp.txt temp.txt > nul
ruby -x %~f0 temp.txt > jwc_temp.txt
del temp.txt
rem pause
goto END
:do2
start excel.exe > jwc_temp.txt
rem ※コマンドラインにファイルを設定する場合
rem ---カレントの場合---
rem start excel.exe sample.xls > jwc_temp.txt
rem ---絶対パスの場合(パスに空白がある場合は""で囲む)---
rem start excel.exe "C:\my excel\sample.xls" > jwc_temp.txt
goto END
:do3
start notepad.exe 三斜計算.BAT
ruby -e 'puts "h# ruby #{RUBY_VERSION} "' > jwc_temp.txt
goto END
#!ruby -Ks
def main
#============= 設 定 =============================================
#
waku_en = "1" #番号枠種類(楕円枠 → 0 : 円枠 → 1 : 枠無 → 2)
waku_lc = "0" #番号枠線色(1〜9) 0の場合は既定線色
waku_lt = "0" #番号枠線種(1〜9) 0の場合は既定線種
waku_br = "0.8" #番号枠半径補正倍率(0.5〜2) 1の場合は元半径
#
line_lc = "0" #高さ垂直線線色(1〜9) 0の場合は既定線色
line_lt = "0" #高さ垂直線線種(1〜9) 0の場合は既定線種
#
apex_lc = "0" #頂点円線色(1〜9) 0の場合は既定線色
apex_lt = "0" #頂点円線種(1〜9) 0の場合は既定線種
#
apex_pn = "0" #頂点点種(1〜9) 0の場合は既定点種
#
shen_lc = "0" #三角形の辺線色(1〜9) 0の場合は既定線色
shen_lt = "0" #三角形の辺線種(1〜9) 0の場合は既定線種
#
hyou_lc = "0" #面積表線色(1〜9) 0の場合は既定線色
hyou_lt = "0" #面積表線種(1〜9) 0の場合は既定線種
#
#=================================================================
if waku_br.to_f < 0.5 or waku_br.to_f > 2.0
puts "he 番号枠半径補正値設定エラー。"; exit
end
msg0 = "区画の三斜データをClipboardにコピーしました。"
datas,hens,all,lcs,lts,msg = [],[],[],[],[],""
while ARGF.gets
datas << $_
end
(datas.reverse).each{|data|
if data =~ /^h#/
msg = data
elsif data =~ /^\s[0-9-]/
hens << data
else
break
end
}
datas -= hens
datas.each{|data|
all << data
if data =~ /^ci/
en = data.split; en[3] = waku_br.to_f*en[3].to_f
if en.size == 8
if waku_lc == "0"
puts lcs[-1]
else
puts "lc"+waku_lc
end
if waku_lt == "0"
puts lts[-1]
else
puts "lt"+waku_lt
end
if waku_en == "1"
puts en[0,4].join("\s")
elsif waku_en == "0"
puts en.join("\s")
elsif waku_en == "2"
else
puts "he 枠種類設定エラー"; exit
end
else
if apex_lc == "0"
puts lcs[-1]
else
puts "lc"+apex_lc
end
if apex_lt == "0"
puts lts[-1]
else
puts "lt"+apex_lt
end
puts data
end
elsif data =~ /^pt/
if apex_pn != "0"
puts "pn"+apex_pn
end
puts data
elsif data =~ /^\s[0-9-]/
if all[-2] =~ /^z3/
if line_lc == "0"
puts lcs[-1]
else
puts "lc"+line_lc
end
if line_lt == "0"
puts lts[-1]
else
puts "lt"+line_lt
end
else
if hyou_lc == "0"
puts lcs[-1]
else
puts "lc"+hyou_lc
end
if hyou_lt == "0"
puts lts[-1]
else
puts "lt"+hyou_lt
end
end
puts data
elsif data =~ /^lc/
puts data
lcs << data
elsif data =~ /^lt/
puts data
lts << data
else
puts data
end
}
if hens.size >= 3
if shen_lc != "0"
puts "lc"+shen_lc
end
if shen_lt != "0"
puts "lt"+shen_lt
end
hens.each{|hen|
puts hen
}
end
henms = []; ii,ll = 0,datas.size-1
for idx in ii .. ll
if datas[idx] =~ /^cs/
iidx = idx + 1
ele = []
while datas[iidx] =~ /^ch/
no = datas[iidx].index(/\"/)
ele << datas[iidx][no+1..-1].strip
iidx += 1
end
if ele.size == 5
henms << ele.join("\t")
end
ii = iidx
end
end
setValue(henms.join("\n"))
puts "h# #{henms.size} #{msg0}#{msg}\n"
end
def setValue(string)
require 'Win32API'
openClipboard = Win32API.new('user32','OpenClipboard',['I'],'I')
emptyClipboard = Win32API.new('user32','EmptyClipboard',[],'I')
setClipboardData = Win32API.new('user32','SetClipboardData',['I','I'],'I')
closeClipboard = Win32API.new('user32','CloseClipboard',[],'I')
globalAlloc = Win32API.new('kernel32','GlobalAlloc',['I','I'],'I')
globalLock = Win32API.new('kernel32','GlobalLock',['I'],'I')
globalUnlock = Win32API.new('kernel32','GlobalUnlock',['I'],'I')
lstrlen = Win32API.new('kernel32','lstrlenA',['P'],'I')
lstrcpy = Win32API.new('kernel32','lstrcpyA',['I','P'],'P')
if openClipboard.Call(0) != 0
emptyClipboard.Call()
ll = lstrlen.Call(string)
gMEM = globalAlloc.Call(0x2000, ll+1)
pMEM = globalLock.Call(gMEM)
lstrcpy.Call(pMEM, string)
setClipboardData.Call(1, gMEM)
globalUnlock.Call(gMEM)
closeClipboard.Call
end
end
main()
__END__
:END
########以上です。