マクロとvbs(with AcadRemocon)の合わせ技です。
(LT2020で確認済み)
①AcadRemoconのセッティングについては省略
②マクロボタンに下記マクロを登録
*^C^C$M=setenv;to;0;$(nth,$(getenv,to),list;si;\copyhist;graphscr;AI_STARTAPP;"ブロック名取得.vbs";setenv;注釈;\;to;1,)$(nth,$(getenv,to),,mleader;h;\'mtexted;internal;\$(getenv,注釈);mtexted;$(getvar,mtexted))^M
(R版の場合は、AI_STARTAPPでエラーになるので、R版用のマクロに改変してください)
③下記VBS(Dim Acad 以降)を「ブロック名取得.vbs」という名前でAutoCADのサポートフォルダに保存。
これで準備ok
マクロを実行して、ブロックをクリック(ブロックじゃない物を選択したらどうなるか知りません)
そんでマルチ引出線を引く。
繰り返しモードになってるので、終了はEsc
但し、
A$○○○のブロックは、マクロ中で「$」がエラーを起こすので、全角の「$」に変換して記入します。
後で、文字置換えコマンド等で書き戻してください。
それから、
*○○のブロックは未対応です。選んだらエラーになると思います。
Dim Acad
'========== ***** ***** ==========
'極楽鳥さんに感謝!!
If MustRun Then WScript.Quit
'========== ***** ***** ==========
Call Main
Sub Main()
Set Acad = CreateObject("AcadRemocon.Body")
WScript.Sleep 100
Dim s
s=Acad.GetClipboardText()
s = mid(s , InStrRev(s , "list"))
If InStr(s , "ブロック名:") = 0 Then
s = "ブロックではありません"
Else
s = mid(s , InStr(s , "ブロック名:") + 6)
s = mid(s , InStr(s , Chr(34)) + 1)
s = mid(s , 1 , InStr(s , Chr(34)) - 1)
s = Replace(s , "$" , "$")
End If
Acad.acPostCommand s & "^M"
End Sub
Public Function MustRun()
'実行している環境が64ビット環境か、32ビット環境か判断し、
'64ビット環境であれば、32ビット環境で自身の再起動を試みる。
'そして、Trueを返す。32ビット環境であれば、Falseを返す。
Const WSHOST = "wscript.exe"
Dim objWshShell 'WshShell オブジェクト
Dim ExecCmd '実行するコマンドライン
Set objWshShell = WScript.CreateObject("WScript.Shell")
If objWshShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then
ExecCmd = objWshShell.ExpandEnvironmentStrings("%WINDIR%") & _
"\SysWOW64\" & WSHOST & " " & _
Chr(34) & WScript.ScriptFullName & Chr(34)
objWshShell.Exec(ExecCmd)
MustRun = True
Else 'x86
MustRun = False
End If
Set objWshShell = Nothing
Set ExecCmd = Nothing
End Function
- Lon
- 2020/01/07 (Tue) 17:21:55