いつもお世話になっております。
最近まで使っていたキリ穴引出線のマクロが2026にバージョンアップしてから使えなくなったことによりLISPに置き換えて作成しておりました。
ブロック内の円にも対応したものを作りたいのですが、ブロック内の時のみループから抜け出せず、ESCすると操作が全て取り消しになってしまって困っております。
vlax-forを使わずに引出線を書くことはできますでしょうか?
よろしくお願いします。
使用CAD:AutoCAD2026
以下がLISPです。
(defun c:kiri ( / Diameter activeDocument utility point1 Obj CuNm activeDocument blockTable block )
(MyerrorStart)
(setq BLN (getstring "\nブロック内の円ですか? 《ESC》で終了\n[<ブロック内>(Y)/ブロック外(N)] 《ESC》で終了 "))
(if (= BLN "Y")
(progn;複数の()を使うための関数
(princ"\nブロック内の円を選択")
(setq Obj (car (entsel "\nブロックを選択: ")))
(setq CuNm (vla-get-Effectivename (vlax-ename->vla-object Obj)))
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
; ブロック テーブルを取得
(setq blockTable (vla-get-blocks activeDocument))
; CuNm という名前のブロックを取得
(setq block (vla-item blockTable CuNm))
(vlax-for vlaObject block
;直径取得&書き出し
(setq Diameter (vlax-get-property vlaObject 'Diameter))
(setq Diameter (strcat "φ" (rtos Diameter)))
(setq point1 (getpoint "引出線の1点目(円)を指示"))
(command "_mleader" point1 pause pause Diameter)
)
);progn
(progn;複数の()を使うための関数
' アクティブ ドキュメントの VLA オブジェクトを取得
(setq activeDocument (vla-get-activedocument (vlax-get-acad-object)))
' ドキュメントの Utilyti オブジェクトを取得
(setq utility (vla-get-utility activeDocument))
' 選択した図形の VLA オブジェクトを取得(変数 vlaObject に設定)
(vla-getentity utility 'vlaObject 'pickedPoint "\nオブジェクトを選択:")
(setq point1 (getpoint "引出線の1点目(円)を指示"))
' 選択した円の Diameter プロパティを取得
(setq Diameter (vlax-get-property vlaObject 'Diameter))
;文字結合
(setq Diameter (strcat "φ" (rtos Diameter)))
(command "_mleader" point1 pause pause Diameter)
);progn
);if
(princ)
(MyerrorEND)
)
キリ穴引出線
- mappy
- 2025/04/16 (Wed) 13:11:30