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