概要 - 拡張データを取得する(AutoLISP)

アプリケーションは、図形にアタッチされている拡張データ(Xdata)を、entget を使用して取得することができます。

entget 関数は、図形の定義データと、要求されたアプリケーションの Xdata を返すことができます。これには、追加の引数 application にアプリケーション名を指定する必要があります。entget に渡す名前は、あらかじめ regapp を呼び出して登録したアプリケーションに対応していなくてはなりません。この名前にワイルドカード文字を含めることもできます。

既定では、自動調整ハッチング パターンに Xdata が含まれています。次のサンプル コードは、その Xdata の連想リストを示しています。コードを使用する前に、閉じた境界を作成し、その境界に自動調整ハッチング オブジェクトを適用する必要があります。

(entget (car (entsel)) '("ACAD"))

オブジェクトを選択: 自動調整ハッチングを選択します

コマンド ラインに上記のコードを入力すると、たとえば次のようなリストが返されます。

((-1 . <Entity name: 7ffffb05e10>) (0 . "HATCH") (330 . <Entity name: 7ffffb039f0>) (5 . "1D9") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbHatch") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2 . "ANSI31") (70 . 0) (71 . 1) (91 . 1) (92 . 7) (72 . 0) (73 . 1) (93 . 4) (10 31.2567 17.3197 0.0) (10 7.77575 17.3197 0.0) (10 7.77575 8.83313 0.0) (10 31.2567 8.83313 0.0) (97 . 1) (330 . <Entity name: 7ffffb05d50>) (75 . 1) (76 . 1) (52 . 0.0) (41 . 3.0) (77 . 0) (78 . 1) (53 . 0.785398) (43 . 0.0) (44 . 0.0) (45 . -0.265165) (46 . 0.265165) (79 . 0) (47 . 0.0289642) (98 . 1) (10 21.1106 14.5391 0.0) (-3 ("ACAD" (1010 0.0 0.0 0.0))))

次のサンプル コードは、2 種類のアプリケーションの Xdata を取得する代表的な方法を示しています。引数 application は、アプリケーション名をリスト形式で受け入れることに注意してください。

(setq working_elist
  (entget ent_name
    '("MY_APP_1" "SOME_OTHER") ; Only xdata from "MY_APP_1"
  )                            ; and "SOME_OTHER" is retrieved.
)
(if working_elist
  (progn
    ...                        ; Updates working entity groups.
    (entmod working_elist)     ; Only xdata from registered
  )                            ; applications still in the
)                              ; working_elist list are modified.

サンプル コードで紹介しているとおり、entmod を使用して、標準の定義データを変更するのと同様に、後で entmod を呼び出すことで、entget によって取得した Xdata を変更できます。また、entmake に渡す図形リスト内で Xdata を定義することにより、拡張データを作成することもできます。 要求したアプリケーションの Xdata のみが返されるようにすることで、他のアプリケーションのデータを破損するのを防ぐことができます。これにより、アプリケーションが必要とするメモリの容量が小さくなり、またアプリケーションが実行しなければならない Xdata 処理も単純化します。

注: application によって渡される文字列にはワイルドカード文字を含めることができ、アプリケーション名として "*" を指定すると、entget は図形にアタッチされているすべての拡張データを返します。