Sponsored links

【AutoLISP ドリル】図形のプロパティ1 解答編

Sponsored links
ドリル
Sponsored links
Jagaimo
Jagaimo

図形のプロパティ情報を得る練習問題の解答編です。

Sponsored links

解答

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