assoc|DXFデータから画層や色を取り出す
要点
assocで指定したグループコードのデータを探し、cdrで値を取り出します。画層名の取得から、コードが見つからない場合の扱いまでを確認します。
始める前に
先に確認すると読み進めやすい記事:
確認の手順
- 練習図形を選び、entgetで情報を取得します。
- assocで画層を表すグループコード8を探します。
- cdrで値を取り出し、プロパティの画層名と照合します。
- 存在しないコードも調べ、nilを確認してから値を使う流れを確認します。
Step 1:assocって何?
assocは、DXFデータから必要な情報を取り出す関数です。リストの中から特定のグループコードのデータを抽出できます。
たとえば、こんなリストがあったとします:
(setq info '((8 . "Layer1") (62 . 1) (10 . (100.0 200.0 0.0))))この中から「レイヤー名(コード8)」を取り出したいときは:
(assoc 8 info) ; => (8 . "Layer1")
(cdr (assoc 8 info)) ; => "Layer1"ポイント:assocは「ペアごと」返す。値だけ欲しいなら
cdrを使う!
Step 2:実際の図形からレイヤー名を取り出してみよう
AutoCAD上で、図形を選んでそのレイヤー名を表示する簡単なコマンドを作ってみます。
(defun c:show-layer (/ en ed lay)
(setq en (car (entsel "\n図形を選んでください: ")))
(setq ed (entget en)) ; 図形の情報を取得
(setq lay (cdr (assoc 8 ed))) ; レイヤー名を取り出す
(princ (strcat "\nレイヤー名は: " lay))
)実行方法:”show-layer.lsp”で保存してドラッグアンドドロップしてAutoCADのコマンドラインで
show-layerと入力して、図形を選んでみましょう!
Step 3:assocで取り出した値を使って色を変更してみよう
次は、assocで色番号(コード62)を取り出して、別の色に変更してみます。
(defun c:change-color (/ en ed old new)
(setq en (car (entsel "\n図形を選んでください: ")))
(setq ed (entget en))
(setq old (cdr (assoc 62 ed))) ; 現在の色番号
(princ (strcat "\n現在の色番号は: " (itoa old)))
(setq new (getint "\n新しい色番号を入力してください(例: 1=赤): "))
(setq ed (subst (cons 62 new) (assoc 62 ed) ed)) ; 色番号を差し替え
(entmod ed) ; 変更を反映
(princ "\n色を変更しました。")
)例:赤にしたい場合は「1」、青なら「5」、緑なら「3」などを入力!
Step 4:assocの応用テクニック
値が見つからないときの安全な書き方
(defun safe-get (code ed)
(if (assoc code ed)
(cdr (assoc code ed))
nil))同じコードが複数ある場合(例:座標コード10)
(defun get-all-10 (ed)
(mapcar 'cdr (vl-remove-if-not '(lambda (p) (= (car p) 10)) ed)))おまけ:よく使うショート関数
(defun dxf (code ed) (cdr (assoc code ed)))使い方:
(dxf 8 (entget en)) ; レイヤー名
(dxf 62 (entget en)) ; 色番号まとめ
| やったこと | 内容 |
|---|---|
| assocの基本 | 番号札つきメモから欲しい情報を探す |
| entgetとの組み合わせ | 図形の情報を取得してassocで抜き出す |
| 色の変更 | assocで取得 → substで差し替え → entmodで反映 |
| 安全な使い方 | nil対策や複数コードの処理 |
次のステップ
- 線種(コード6)や線の太さ(コード370)もassocで取り出してみよう!
- 自分の図面で、レイヤーや色を一括変更するツールを作ってみよう!
結果の確認
assocは最初に一致した項目を返します。同じコードが複数あるデータや、色コードが省略された図形を扱う場合は、戻り値を無条件に使わないでください。
参照資料
対象環境・動作確認
AutoLISP対応環境(関数・OSごとの対応は要確認)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。