概要 - command 関数を使用せずに図形を修正する(AutoLISP)

図形リストを変更してその変更をデータベースに戻すことにより、図形を直接修正することができます。

entmod 関数は、entget が返すリストと同じ形式のリストを渡すことによって図形を修正しますが、このときアプリケーションは一部の図形グループ コードの値を変更することができます。この関数は entget を補完する関数です。AutoLISP のアプリケーションは、entget を使用して図形を取得し、その図形リストを変更し、entmod を使用してリストをデータベースに戻すことでデータベースを更新します。

次のサンプル コードは、図面内の最初の図形の定義データを取得し、その画層のプロパティを MYLAYER に変更します。

(setq en (entnext))         ; Sets en to first entity name in the drawing.
(setq ed (entget en))       ; Sets ed to the entity data for entity name en.
(setq ed
  (subst (cons 8 "MYLAYER")
    (assoc 8 ed)            ; Changes the layer group in ed.
    ed                      ; to layer MYLAYER.
  )
)
(entmod ed)                 ; Modifies entity en's layer in the drawing.

entmod を使用してデータベースに加えられる変更には制限があります。entmod は、次のものは変更できません。

寸法やハッチング パターンを変更する場合は、上記以外にも制限がいくつかあります。

AutoCAD は、図形リストが参照するすべてのオブジェクト(画層は除く)を認識しなくてはなりません。図形リストを entmod に渡す前に、図形リストに含まれる文字スタイル、線種、シェイプ、およびブロックの名前が、現在の図面内で定義されていなければなりません。これには、1 つ例外があります。 entmod は新しい画層名を受け入れます。図形リストが現在の図面で定義されていない画層名を参照していると、entmod は新しい画層を作成します。新しい画層の属性は、AutoCAD の LAYER[画層管理]コマンドの[新規作成]オプションに適用される標準の既定値です。

entmod 関数は、ポリラインの頂点やブロックの属性などの従属図形も変更できます。entmod を使用してブロック定義内の図形を変更すると、モデル空間とペーパー空間に存在するそのブロックのすべてのブロック参照が影響を受けます。定数として定義されていない限り、図面内に存在する各ブロック参照の属性は更新されます。また、ブロック定義内の図形は entdel で削除することはできません。