概要 - シンボル テーブル(AutoLISP)

シンボル テーブルは、図面のデータベース内の非グラフィカル情報を格納するために使用されます。

図面データベースに存在するシンボル テーブルは、次のとおりです。

各図面データベース内のシンボル テーブル

シンボル テーブル名

説 明

APPID[アプリケーション ID]

登録アプリケーション

BLOCK[ブロック登録]

ブロック(名前の付いたブロックと名前のないブロック)

DIMSTYLE[寸法スタイル管理]

寸法スタイル

LAYER[画層管理]

画層

LTYPE[線種]

線種

STYLE[文字スタイル管理]

文字スタイル

UCS

名前の付いたユーザ座標系(UCS)

VIEW[ビュー管理]

名前の付いたビュー

VPORT[ビューポート]

名前の付いたビューポート

シンボル テーブルの項目は、次の関数を使用して操作することができます。

シンボル テーブルの制限事項

シンボル テーブルには、次の規則が適用されます。

シンボル テーブル項目にアクセスする

tblnext 関数は、シンボル テーブルの項目を順次走査し、tblsearch 関数は特定の項目を取得します。シンボル テーブル名は文字列で指定します。どちらの関数も、entget が返す図形データと同様の DXF グループ コードのリストを返します。

tblnext の最初の呼び出しでは、指定されたシンボル テーブルの最初の項目が返されます。同じテーブルを指定する 2 回目以降の呼び出しでは、その後に続く項目が返されます。ただし、tblnext の 2 番目の引数(rewind)が nil でない場合、tblnext は再び最初の項目を返します。

次のサンプル コードでは、GETBLOCK 関数は、現在の図面内の最初のブロック(ブロックが存在する場合)のシンボル テーブル項目を返し、次にその項目をリスト形式で表示します。

(defun C:GETBLOCK (/ blk ct)
  (setq blk (tblnext "BLOCK" 1))      ; Gets the first BLOCK entry.
  (setq ct 0)                         ; Sets ct (a counter) to 0.
  (textpage)                          ; Switches to the text screen.
  (princ "\nResults from GETBLOCK: ")
  (repeat (length blk)                ; Repeats for the number of
                                      ; members in the list.
    (print (nth ct blk))              ; Prints a new line, then each
                                      ; list member.
    (setq ct (1+ ct))                 ; Increments the counter by 1.
  )
 (princ)                              ; Exits quietly.
)

BLOCK テーブルから取得した項目には、ブロック定義内の最初の図形の名前を含む -2 グループ コードがあります。 ブロックが空の場合、これはブロックの Endblk 図形の名前になります。このような名前は、使用されているブロックには表示されません。BOX という名前の 1 つのブロックを持つ図面では、GETBLOCK を呼び出すと次のように表示されます(名前の値はセッションによって異なります)。

Results from GETBLOCK:
(0 . "BLOCK")
(2 . "BOX")
(70 . 0)
(10 9.0 2.0 0.0)
(-2 . <Entity name: 40000126>)

tblnext の場合と同様、tblsearch の最初の引数はぢんぼる テーブルの名前を指定する文字列ですが、2 番目の引数はテーブル内の特定のシンボル テーブル項目の名前を指定する文字列です。シンボル テーブル項目が見つかると、tblsearch はそのデータを返します。この関数には 3 番目の引数 setnext を指定でき、この引数を使用して tblnext での処理を調整できます。setnext が nil の場合、tblsearch の呼び出しは tblnext にまったく影響を与えませんが、setnextnil 以外の場合、次に tblnext 関数を呼び出したとき、tblsearch が検出したシンボル テーブル項目の次のシンボル テーブル項目が返されます。

ビューポートの設定では、どのビューポートも同じ名前(*ACTIVE など)なので、setnext オプションは、VPORT シンボル テーブルを扱うときに便利です)。TILEMODE をオフにしているときに VPORT シンボル テーブルにアクセスした場合には、AutoCAD のシステム変数 TILEMODE をオンにするまで変更が表示されません。 VPORT シンボル テーブルに格納される VPORTS をペーパー空間図形のビューポート図形 と混同しないでください。

次のコードは、4VIEW 設定のすべてのビューポートを処理します。

(setq v (tblsearch "VPORT" "4VIEW" T))         ; Finds first VPORT entry.
  (while (and v (= (cdr (assoc 2 v)) "4VIEW"))
  ..
                                               ; ... Processes entry ...
  .
  (setq v (tblnext "VPORT"))                   ; Gets next VPORT entry.
)