図形のプロパティ情報を得る練習問題の解答編です。
解答
DXF図形情報を使った場合
(defun c:test (/ Obj Ent LyNm)
(setq Obj (car(entsel)))
(setq Ent (entget Obj))
(setq LyNm (cdr (assoc 8 Ent)))
(alert (strcat "画層名: " LyNm))
(princ)
)
(setq Obj (car(entsel)))
(car(entsel)) で図形名を変数Objに入れました。
(setq Ent (entget Obj))
entgetを使い、 Obj(図形名)のDXF図形情報を得て変数Entに入れました。
(setq LyNm (cdr (assoc 8 Ent)))
画層名のグループコードは8なので、(cdr (assoc 8 を使い、Entに入れた情報から画層名だけを得て、変数LyNmに入れました。
(alert (strcat “画層名: ” LyNm))
関数strcat で文字列「画層名:」と LyNm に入れた画層名をつなげ、alert でメッセージボックス表示させます。
処理を分けて変数に入れながらコードを書きました。
しかし、今回の場合はどの変数も一度しか使わないので、変数を使わずにひとまとめにして書いてもいいと思います。
ひとまとめに書いた場合の例がこちらです。
(defun c:test ()
(alert
(strcat "画層名: "
(cdr
(assoc 8
(entget
(car
(entsel)
)
)
)
)
)
)
(princ)
)
Visual Lisp: ActivX図形情報を使った場合
(defun c:test (/ Obj VlObj LyNm)
(setq Obj (car(entsel)))
(setq VlObj (vlax-ename->vla-object Obj))
(setq LyNm (vla-get-layer VlObj))
(alert (strcat "画層名: " LyNm))
(princ)
)
(setq Obj (car(entsel)))
(car(entsel)) で図形名を変数Objに入れました。
(setq VlObj (vlax-ename->vla-object Obj))
vlax-ename->vla-objectを使いObj(図形名)をVLISP用に変更し、変数VlObjに入れました。
(setq LyNm (vla-get-layer VlObj))
関数vla-get-layerを使い、VlObjに入った図形名から画層名を得て変数LyNmに入れました。
(alert (strcat “画層名: ” LyNm))
関数strcat で文字列「画層名:」と LyNm に入れた画層名をつなげ、alert でメッセージボックス表示させます。
処理を分けて変数に入れながらコードを書きました。
しかし、今回の場合はどの変数も一度しか使わないので、変数を使わずにひとまとめにして書いてもいいと思います。
ひとまとめに書いた場合の例がこちらです。
(defun c:test ()
(alert
(strcat "画層名: "
(vla-get-layer
(vlax-ename->vla-object
(car
(entsel)
)
)
)
)
)
(princ)
)
以上です。
Comments