図面にどのような画層、線種、保存されたUCS設定などが含まれているかを知りたいことがあります。画層ならコマンドラインの画層コマンドの一覧オプション( -LAYER ? * )で表形式で表示できますが、コマンドラインの線種コマンドの一覧オプションは線種定義ファイルに定義された線種を表示します。ダイアログボックスの線種コマンドでは線種名をコピー&ペーストできません。

画層名などを一覧表示する(TABLERECORDSコマンド)

;|
TABLERECORDS.LSP

tablerecords
シンボルテーブルレコード名を表示する

拡張データ名を表示
tablerecords appid
他に指定できるもの
"block" "layer" "ltype" "style" "dimstyle" "ucs" "view" "vport"
|;
(defun C:TABLERECORDS ( / name flag l )
(setq name (getstring "\n名前を入力"))
(setq flag T)
(princ "\n----------------")
(while (setq l (tblnext name flag))
(princ (strcat "\n" (cdr (assoc 2 l))))
(setq flag nil)
)
(princ "\n----------------")
(princ)
)

TABLERECORDS コマンドを使うと、図面に存在するブロック、画層、線種、文字スタイル(フォント)、寸法スタイル、UCS、ビュー、タイルビュー、拡張データ名の一覧を表示できます。

レイアウト名などを一覧表示する(DICTRECORDSコマンド)

;|
dictrecords
ディクショナリのレコード名を表示する

レイアウト名を表示
dictrecords LAYOUT
他に指定できるもの
"DETAILVIEWSTYLE" "GROUP" "MATERIAL" "MLEADERSTYLE" "MLINESTYLE" "PLOTSETTINGS"
"PLOTSTYLENAME" "SECTIONVIEWSTYLE" "TABLESTYLE" "VISUALSTYLE" "COLOR"
注意
"SCALELIST" は尺度を返さない
|;
(defun C:DICTRECORDS ( / name i l )
(setq name (getstring "\n名前を入力"))
(setq l (dictsearch (namedobjdict) (strcat "ACAD_" name)))
(princ "\n----------------")
(foreach i l
(if (= 3 (car i))
(princ (strcat "\n" (cdr i)))
)
)
(princ "\n----------------")
(princ)
)

DICTRECORDS コマンドを使うと、図面に存在するレイアウト、グループ、印刷スタイル、印刷設定、マルチラインスタイル、マルチ引き出し線スタイル、表スタイル、マテリアル、表示スタイルなどの一覧を表示できます。

図形に割り当て済みの拡張データ名を一覧表示する(XDATANAMESコマンド)

;|
xdatanames
図形の拡張データ名を表示する
|;
(defun C:XDATANAMES ( / l )
(if (setq l (entget (car (entsel )) '("*")))
(progn
(setq l (cdr (assoc -3 l)))
(princ "\n----------------")
(foreach i l
(princ (strcat "\n" (car i)))
)
(princ "\n----------------")
)
)
(princ)
)

XDATANAMES コマンドを使うと、選択した図形に割り当て済みの拡張データ名の一覧を表示できます。

プログラムのポイント

tblnext 関数

(tblnext テーブル名 巻き戻し)

ブロック、画層、線種、... といったシンボルテーブルの要素を一つずつ取り出すのに使用します。

namedobjdict 関数

(namedobjdict)

レイアウト、グループ、印刷スタイル、...といった名前の付いたオブジェクトを管理するディクショナリ オブジェクトの図形名を返します。

個別のデータベースオブジェクトが持つ拡張ディクショナリにアクセスするには、 (cdr (assoc 360 図形リスト) が使えます。

dictsearch 関数

(dictsearch ディクショナリの図形名 キー)

レイアウトを管理しているディクショナリは、(dictsearch (namedobjdict) "ACAD_LAYOUT") で、グループを管理しているディクショナリは、(dictsearch (namedobjdict) "ACAD_GROUP") でアクセスします。戻り値は図形リストになります。

entget 関数

(entget 図形名 [拡張データ名のフィルタ])

entget 関数は図形名から図形リストを取得するための関数ですが、オプションの拡張データ名のフィルタを追加すると、拡張データを含む図形リストを返します。

拡張データのグループコードは -3 で、拡張データ名別のリストが含まれます。

拡張データは CADシステムまたはアプリケーション作成者が自由に定義できます。

foreach 関数

(foreach 要素 リスト 複数の式)

リストから要素を一つずつ取り出し、複数の式を繰り返し実行します。

ARES の LISP には、条件を満たすうちは式を繰り返し実行する while と、式を指定した回数だけ繰り返し実行する repeat と、この foreach が主な繰り返しの関数になります。

回答が見つかりましたか?