この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

ブロック名をマルチ引出線記入
いつもお世話になっております。

ブロック名をマルチ引出線として記入するマクロですが、作成は可能でしょうか?
AutoCAD2016 LTです。

動作としては、
1.対象となるブロックを選択(例:ブロック名→abc)
2.引出線の矢印位置を指定
3.引出参照線の位置を指定
↑これで"abc"というマルチ引出線が作成される。

です。
宜しくお願いします。
  • kgw
  • 2020/01/06 (Mon) 10:34:55
Re: ブロック名をマルチ引出線記入
残念ながらマクロではブロックの名前を取得できない
というよりマクロでは文字の内容を取得できないですよね

文字の内容を取得できるといろんなことがマクロで可能になるのですけどねぇ

  • chibi-tom
  • 2020/01/06 (Mon) 11:09:54
Re: ブロック名をマルチ引出線記入
そうなんですね、、、
勉強になりました!

ありがとうございます。
  • kgw
  • 2020/01/06 (Mon) 17:36:06
Re: ブロック名をマルチ引出線記入
マルチ引出線を使用しないので使えないかもしれませんが
参考でLEADER[引出線記入]使用
insertコマンドで選択したいブロックを仮に挿入しておけば
システム変数:insnameがブロックの名称になるので

マクロ1(仮ブロック挿入用)
^C^C-insert;『ブロック名称』;\;;;erase;l;;^Z
ブロック名称の部分を修正してください
マクロ2(引出線用)
*^C^C_leader;\\;$M=$(getvar,insname);^M

1.マクロ1を起動
2.マクロ2を起動
3.引出線の矢印位置を指定
4.引出参照線の位置を指定

終了はESCキーです

ブロック選択では出来ないからあんまり意味ないかなぁ
あくまでも参考です
  • chibi-tom
  • 2020/01/07 (Tue) 13:34:12
Re: ブロック名をマルチ引出線記入
マクロと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
Re: ブロック名をマルチ引出線記入
マクロ1(仮ブロック挿入用)
^C^C-insert;『ブロック名称』;\;;;erase;l;;^Z
ブロック名称の部分を修正してください

マクロ2(マルチ引出線用)
*^C^C$M=mleader;\'mtexted;internal;\;$(getvar,insname);mtexted;$(getvar,mtexted);^M
マルチ引出線のオプションが引出線の矢印の位置を指定になっている前提で
マルチ引出線でもできました

結局ブロック選択ではできないのであくまでも参考です
  • chibi-tom
  • 2020/01/08 (Wed) 09:15:45
Re: ブロック名をマルチ引出線記入
chibi-tom 様
Lon 様
ありがとうございます!
VBSの知識が無かったので時間のある時に調べて挑戦してみようと思います!
  • kgw
  • 2020/01/08 (Wed) 11:19:30
Re: ブロック名をマルチ引出線記入
試してみたのですが、画像のようなエラーが出てしまいました、、、。
原因は解りますでしょうか?
  • kgw
  • 2020/01/10 (Fri) 14:49:57
Re: ブロック名をマルチ引出線記入
すみません。
保存する際の文字コードをUTF8にしていました。
ANSIにしたら正常に動きました!

ありがとうございました。
  • kgw
  • 2020/01/10 (Fri) 15:13:46
Re: ブロック名をマルチ引出線記入
動いてなによりです。

[ANSIにしたら正常に動きました!] ここに気が付くなんてスゴイです。

ところでそのVBSを保存している場所ですが、(そこでも別に問題は無いのですが、)
「AutoCADのサポートフォルダに保存。」をそのまま実行してしまったのですね。

保存するのはどこでも良いのです。
例えばDドライブに「VBS」というフォルダを作って、そこに保存しても良いです。
そして、AutoCADのオプションを開いたら、「ファイル」タブをクリックし、
ツリーの中の「サポートファイルの検索パス」をクリックし、
右の「追加」ボタンを押し、そのまま「参照」ボタンを連続して押す。
Dドライブの「VBS」フォルダを指定すると、ツリーの中にそのフォルダのアドレスが追加されます。

これで、この「VBS」フォルダがサポートフォルダに指定された訳です。

この一連の操作が「AutoCADのサポートフォルダに保存。」の意図するところでした。
  • Lon
  • 2020/01/10 (Fri) 15:35:43
Re: ブロック名をマルチ引出線記入
そうだったんですね、、
勉強不足でした、、

ご丁寧にありがとうございました!
  • kgw
  • 2020/01/10 (Fri) 16:38:34

返信フォーム






プレビュー (投稿前に内容を確認)