AutoCAD オブジェクトのエンティティはどこまで削れるか

# AutoCAD のエンティティについて
・・・どこまで需要があるのか分かりませんが
AutoCAD のオブジェクトを、LISP で作図する際に、エンティティ情報で必須なのは何か？
何が省略できるのか？ に迷った事はありませんか？
公式サイトの[ヘルプ](https://help.autodesk.com/view/ACD/2015/JPN/?guid=GUID-235B22E0-A567-4CF6-92D3-38A2306D73F3)にあるだろう、と言う方もいるかもしれません。
しかし、ここに記載されている「省略されません」は「必須」と言う意味ではありません。
実際に作図されたオブジェクトのエンティティには必ず存在しますが、**作図する際に必ず必要という訳ではない**のです。
例えば、オブジェクトが存在する画層を定義するグループコード「8」は必ず存在しますが、エンティティにグループコード「8」が存在しなくても`entmake`でオブジェクトが作図出来てしまいます。
では、そうやって作った際のオブジェクトは、どの画層に存在するか？ と言うと「現在の画層」です。
この様に「えっ、これ省略できるの！？」というモノが沢山あります。
実際に画層を指定せずに作図する事は稀でしょうが、「このグループコードって省略できるのかな？」と迷った時に参考になればと思い、この内容を記載する事にしました。
半分以上は自分の覚書ですが・・・
こういった経緯で作成しますので、オブジェクトの種類は順次増やしていこうと思っております。
最初は種類が少ないですが、ご容赦ください。
<font color="DarkGray">従属図形および従属図形を持つ主図形のエンティティ省略調査はするつもりがありません(申し訳ない)</font>

:::note warn
<font color="Red">**AutoCAD のバージョンによって変化する可能性もありますので、ご注意ください。**</font>
:::
## 目次
+ [省略時に充てられる内容と注意点](#%E7%9C%81%E7%95%A5%E6%99%82%E3%81%AB%E5%85%85%E3%81%A6%E3%82%89%E3%82%8C%E3%82%8B%E5%86%85%E5%AE%B9%E3%81%A8%E6%B3%A8%E6%84%8F%E7%82%B9)
+ [_LINE_ [線分]](#line)
+ [_LWPOLYLINE_ [2Dポリライン]](#lwpolyline)
+ [_ARC_ [円弧]](#arc)
+ [_CIRCLE_ [円]](#circle)
+ [_INSERT_[ブロック挿入(属性なし)]](#insert)
+ ()
+ [余談](#余談)

## 省略時に充てられる内容と注意点
画層や色、線種等を省略すると、どのように作図されるのでしょうか？
| グループ<br>コード | 内容 | 省略時の動作(作図時) | 省略時の内容(作図後) |
|:-------:|:------:|:-------|:-------|
| 8 | 画層 | 現在の画層 | 省略されません |
| 6 | 線種 | 現在選択されている線種 | ByLayer |
| 62 | 色 | 現在選択されている色 | ByLayer |
| 370 | 線の太さ | 現在選択されている太さ | 既定 |
| 67<br>410 | モデル<br>レイアウト | 現在選択されている空間 | 省略されません |

注意しなければいけないのは、作図時に省略した時と、作図後の省略時の意味合いが違う事が多いという事です。
画層は作図後のエンティティで省略される事はありませんが、例えば現在の色が「ByLayer」でなく「赤(1)」だとすると
「色は省略して作図すると、ByLayer になるだろう」
と思って作図すると、思わぬ結果になります。
## _LINE_
線分です。
```LISP:LINE
(entmake
  (list
    (cons 0 "LINE")
    (list 10 -0.596035 17.1587 0.0)
    (list 11 5.61811 7.5704 0.0)
  );list
);entmake
```
## _LWPOLYLINE_
2Dポリラインです。
```LISP:LWPOLYLINE
(entmake
  (list
    (cons 0 "LWPOLYLINE")
    (cons 100 "AcDbEntity")
    (cons 100 "AcDbPolyline")
    (cons 90 5)
    (list 10 0.428275 10.4366)
    (list 10 8.75933 15.6232)
    (list 10 13.8126 16.9539)
    (list 10 20.2657 14.3607)
    (list 10 27.7773 7.19506)
  );list
);entmake
```
当然ですが、閉じたポリラインを作図したい場合は、グループコード「70」は省略できません。
驚く事に、グループコード｢90」を省略しても、エラーは出ません。
しかし、`頂点を持たない 2D ポリライン (0) に 2 つの頂点が追加されました。`というメッセージが表示され、点の様なポリラインが作図されます。
同様に、グループコード「90」の点の数が、実際にグループコード「10」で指定している座標数と違っても作図されますが、希望する形状にはなりません。
```LISP:ふくらみを持った LWPOLYLINE
(entmake
  (list
    (cons 0 "LWPOLYLINE")
    (cons 100 "AcDbEntity")
    (cons 100 "AcDbPolyline")
    (cons 90 5)
    (list 10 0.428275 10.4366)
    (list 10 8.75933 15.6232)
    (cons 42 -0.150797)
    (list 10 13.8126 16.9539)
    (cons 42 -0.171796)
    (list 10 20.2657 14.3607)
    (list 10 27.7773 7.19506)
  );list
);entmake
```
ふくらみを持ったポリラインは、上記の様にふくらみを持たせたい区間にだけグループコード「42」を記載して、直線部分は省略できます。
太さ情報のグループコード「40」「41」も同様です。
## _ARC_
円弧です。
```LISP:ARC
(entmake
  (list
    (cons 0 "ARC")
    (list 10 10.6474 2.34781 0.0)
    (cons 40 9.52678)
    (cons 50 1.07108)
    (cons 51 2.87684)
  );list
);entmake
```
## _CIRCLE_
円です。
```LISP:CIRCLE
(entmake
  (list
    (cons 0 "CIRCLE")
    (list 10 7.76916 9.51535 0.0)
    (cons 40 4.15237)
  );list
);entmake
```
円は、チェックツールなどを作成する際、エラー箇所にマークするのによく使います(私は)。
非常にシンプルですね。

## _INSERT_
ブロック挿入(属性なし)です。
```LISP:INSERT
(entmakex
  (list
    (cons 0 "INSERT")
    (cons 2 "GM100_22.5")
    (list 10 -2600.0 25.0 0.0)
  );list
);entmakex
```
属性なしのブロック挿入オブジェクトは、従属図形が無いので対象にしました。

## 余談
### グループコード 370 について
グループコード 370 番は、線の太さを示します。
DXF リファレンスには、ENTITIES セクションのグループコード 370 は「省略されません」と記載されています。
DXFファイルに出力した時は省略されないのかもしれませんが、線の太さが「BYLAYER」の場合、`(entget)`でエンティティを取得すると、省略されます。
DXF リファレンスには詳しい記載が無い為、確認してみました。
| 値 | 内容 |
|:-:|:-:|
|-3|規定|
|-2|BYBLOCK|
|-1|BYLAYER|
|0|0.00|
|5|0.05|
|211|2.11|

太さが具体的な数値の場合、その太さを100倍した整数が、グループコード 370 に記載される値となります。