シンボル テーブルは、図面のデータベース内の非グラフィカル情報を格納するために使用されます。
図面データベースに存在するシンボル テーブルは、次のとおりです。
|
各図面データベース内のシンボル テーブル |
|
|---|---|
|
シンボル テーブル名 |
説 明 |
|
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 にまったく影響を与えませんが、setnext が nil 以外の場合、次に 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.
)