「Entmod」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成: ; 構文 : (entmod ''elist'') ; 機能 : オブジェクト(図形)の定義データを更新する。 : entmod 関数は、elist 引数のグループ 1 で指定された図…)
 
編集の要約なし
17行目: 17行目:
; サンプル
; サンプル
: 次のコマンド シーケンスは、図形のプロパティを取得し、その図形を修正する。
: 次のコマンド シーケンスは、図形のプロパティを取得し、その図形を修正する。
: en1 変数に、図面内の最初の図形の名前を代入する。
<pre class="brush:autolisp;">
; en1 変数に、図面内の最初の図形の名前を代入する。
  (setq en1 (entnext))
  (setq en1 (entnext))
<Entity name: 2c90520>
> <Entity name: 2c90520>
: ed という名前の変数に、図形 en1 の図形データを代入する。
 
; ed という名前の変数に、図形 en1 の図形データを代入する。
  (setq ed (entget en1))
  (setq ed (entget en1))
((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))
> ((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))
: ed 内の画層グループを、画層 0 から画層 1 に変更する。
 
; ed 内の画層グループを、画層 0 から画層 1 に変更する。
  (setq ed (subst (cons 8 "1") (assoc 8 ed) ed ))
  (setq ed (subst (cons 8 "1") (assoc 8 ed) ed ))
((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))
> ((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))
: 図面内の en1 図形の画層を変更する。
 
; 図面内の en1 図形の画層を変更する。
  (entmod ed)
  (entmod ed)
'''((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))'''
> ((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))'''
 
</pre>
; entmod 関数使用の制限
; entmod 関数使用の制限
: entmod 関数で行える変更の制限は、次のとおり。
: entmod 関数で行える変更の制限は、次のとおり。

2012年6月20日 (水) 12:40時点における版

構文
(entmod elist)


機能
オブジェクト(図形)の定義データを更新する。
entmod 関数は、elist 引数のグループ 1 で指定された図形名のデータベース情報を更新する。LISP でデータベースを更新するときの基本的な手順は、entget 関数で図形を取得し、図形の定義リストを修正し、次に entmod 関数を使用してデータベース内の図形を更新するというもの。entmod 関数は、グラフィカル図形と非グラフィカル図形のどちらも更新できる。
引数
  • elist : entget 関数が返すのと同じ形式の図形定義データリスト。
浮動小数点値の図形フィールド(厚さなど)に整数値を与えた場合、entmod 関数はその値を受け入れて浮動小数点値に変換する。同様に、整数の図形フィールド(色番号など)に浮動小数点値を与えた場合は、その値を受け入れ、小数部を切り捨てて整数に変換する。
戻り値
成功した場合、与えられた elist を返す。図形が更新できなかった場合は、nil を返す。


サンプル
次のコマンド シーケンスは、図形のプロパティを取得し、その図形を修正する。
; en1 変数に、図面内の最初の図形の名前を代入する。
 (setq en1 (entnext))
> <Entity name: 2c90520>

; ed という名前の変数に、図形 en1 の図形データを代入する。
 (setq ed (entget en1))
> ((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))

; ed 内の画層グループを、画層 0 から画層 1 に変更する。
 (setq ed (subst (cons 8 "1") (assoc 8 ed) ed ))
> ((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))

; 図面内の en1 図形の画層を変更する。
 (entmod ed)
> ((-1 . <Entity name: 2c90520>) (0 . "CIRCLE") (5 . "4C") (100 . "AcDbEntity") (67 . 0) (8 . "1") (100 . "AcDbCircle") (10 3.45373 6.21635 0.0) (40 . 2.94827) (210 0.0 0.0 1.0))'''
entmod 関数使用の制限
entmod 関数で行える変更の制限は、次のとおり。
  • 図形のタイプとハンドルを変更することはできない。どうしても変更したい場合は、entdel 関数を使用してその図形を削除し、次に、command 関数または entmake 関数を使用して新しい図形を作成する。
  • entmod 関数は、SEQEND(シーケンス終了)オブジェクトの -2 グループの図形名のような内部フィールドを変更することはできない。 変更しようとしても、無視される。
  • entmod 関数を使用して、ビューポート図形を変更することはできない。図形の空間表示フィールドを 0(ゼロ)または 1 に変更することは可能(ただし、ビューポート オブジェクトを除く)。ブロック定義内で entmod 関数を使用して図形を変更すると、その変更は図面内のそのブロックのすべてのインスタンスに影響する。
  • 頂点図形に対して entmod 関数を使用する場合は、あらかじめポリライン図形のヘッダの読み込みか書き出しを行わなければならない。 直前に処理されたポリライン図形と、頂点が属するポリライン図形とが異なっていると、幅情報(グループ 40 と 41)が失われる可能性がある。
  • 警告: entmod 関数を使用してブロック定義内の図形を変更することは可能。 ただし、これを行うと自己参照ブロックが作成される可能性があり、そうなった場合には CAD が停止する。
  • 注: AutoCAD 2004 以降のAutoCADでは、entmod 関数には、色操作に関する新しい機能がある。DXF グループ コード 62 は AutoCAD カラー インデックス(ACI)値を保持するが、グループ コード 420 は True Color 値を保持する。True Color 値と ACI 値が矛盾する場合、AutoCAD は 420 の値を使用する。そのため、コード 62 の値を使用する場合は、その前にコード 420 の値を削除する必要がある。詳細は、AutoCAD の完全インストールを実行し、¥Sample¥VisualLISP フォルダ内の color-util.lsp ファイルを参照。

関連事項