Plolyline(ポリライン)をそのまま訳せば「折れ線」ですが、AutoCAD でポリラインを説明する際には、「連続線」としたほうが適切です。図面で利用する図形のなかでは、よく利用されるオブジェクトと言えます。
このポリライン、AutoCAD の歴史とともに変化してきています。今回は、その成り立ちや多様性をご紹介します。
まず、4 辺が線分で補間されている矩形を考えてみましょう。この矩形は、LINE[線分] コマンドを使って 4 辺の辺(セグメント)の始点と終点をそれぞれ重複させて作図することが出来ます。ただ、辺 1 の終点を辺 2 の始点に、辺 2 の終点を辺 3 の始点に、辺 3 の終点を辺 4 の始点に、そして、辺 4 の終点を辺 1 の始点に、といった具合に配置することになるので、矩形を表現するには冗長です。(必ずしも線分の方向を同じにして配置する必要はありませんが。)
X、Y、Z 座標のデータ量を考えると、頂点座標をもっと効果的に保持する方法があります。そこで登場するのがポリラインです。前述の矩形の場合、一筆書き状に頂点座標を共有することで、データの冗長性を抑止出来ます。また、矩形ポリラインの始点と終点は同じなので、PLINE[ポリライン] コマンドには「閉じる(C)」オプションが用意されていて、連続線の始点座標と頂点座標を重複して保持することも防いでいます。
矩形の例のように、特定の形状を効率的に表現することが可能なポリラインですが、AutoCAD の初期には、現在と違ったデータ構造をしていました。ここで、システム変数 PLINETYPE に触れる必要があります。このシステム変数は、AutoCAD R14 以前の形式で図面保存されている旧ポリラインの新ポリラインへの変換と、ポリラインの新規作図時に新旧、どちらのポリラインを使用するかを決定します。
ここでいう旧ポリラインとは、AutoCAD R13 以前に使用されていたポリラインのことです。また、新ポリラインとは、AutoCAD R14 で導入された最適化ポリラインを指しています。それでは、何が最適化されたのか、ご紹介しましょう。
システム変数 PLINETYPE を 0(ゼロ)に変更して、PLINE コマンドでポリラインを作図してみます。頂点は、0,0 - 100,100 - 200,0 としてみます。次に、作図したポリラインを LISTオブジェクト情報] コマンドで選択すると、例えば、下記のように表示されます。オブジェクト タイプを示す「ポリライン」とは別に、「頂点」と書かれた情報が複数表示されることがわかります。最後には、「シーケンス終了」という情報も表示されています。
コマンド: LIST
認識された数: 1ポリライン 画層: "0"
空間: モデル空間
ハンドル = 2a6
開く
始点での幅 0.0000
終点での幅 0.0000
面積 10000.0000
長さ 282.8427頂点 画層: "0"
空間: モデル空間
ハンドル = 2a8
点の位置、 X= 0.0000 Y= 0.0000 Z= 0.0000
始点での幅 0.0000
終点での幅 0.0000頂点 画層: "0"
空間: モデル空間
ハンドル = 2a9
点の位置、 X= 100.0000 Y= 100.0000 Z= 0.0000
続けるには[Enter]キーを押してください:
始点での幅 0.0000
終点での幅 0.0000頂点 画層: "0"
空間: モデル空間
ハンドル = 2aa
点の位置、 X= 200.0000 Y= 0.0000 Z= 0.0000
始点での幅 0.0000
終点での幅 0.0000シーケンス終了 画層: "0"
空間: モデル空間
ハンドル = 2a7
続いて、同じ PLINETYPE を 2 に変更して、PLINE コマンドで同じく 0,0 - 100,100 - 200,0 頂点座標を持つポリラインを作図後、 LISTオブジェクト情報] コマンドで情報表示すると、次のように表示されるはずです。
コマンド: LIST
オブジェクトを選択: 認識された数: 1
オブジェクトを選択:
LWPOLYLINE 画層: "0"
空間: モデル空間
ハンドル = 2d9
開く
一定幅 0.0000
面積 10000.0000
長さ 282.8427
点の位置 X= 0.0000 Y= 0.0000 Z= 0.0000
点の位置 X= 100.0000 Y= 100.0000 Z= 0.0000
点の位置 X= 200.0000 Y= 0.0000 Z= 0.0000
後者の最適化ポリライン(新ポリライン)では、「頂点」や「シーケンス終了」は現れず、座標値が連続して表示されていることがわかります。ここでデータ構造をご紹介すると、新旧ポリラインのデータ構造は次のようになります。
旧ポリライン:POLYLINE - VERTEX - VERTEX - VERTEX - ... - SEQEND
新ポリライン:LWPOLYLINE
旧ポリラインの場合、ポリラインの情報が複数の図形タイプで保持されています。主エンティティと呼ばれる POLYLINE オブジェクトに続いて、従属エンティティと呼ばれる VERTEX オブジェクトが、SEQEND オブジェクトが現れるまで、頂点数分続いて保持されています。一方、新ポリラインでは、LWPOLYLINE オブジェクト 1 つに全ての頂点情報を保持されています。
つまり、新ポリラインでは頂点情報が「最適化」されて、より小さなデータ量ですべてが保持されていることになります。オブジェクト タイプが LWPOLYLINE(Light Weiht Polyline、軽量ポリライン)となっているのは、このためです。旧ポリラインでは、VERTEX オブジェクトが画層情報まで持っていたことを考えると、かなりの軽量化が実現されていることがわかります。
では、なぜ初期の AutoCAD は、ポリラインに LWPOLYLINE のデータ構造を持ち込まなかったのでしょう?
理由は 3D への対応を考慮していたためです。LWPOLYLINE も Z 座標を保持しますが、この場合、ポリラインの「高度」設定によって、全頂点の Z 値が一律に変わるだけで、頂点毎に異なる Z 値を持つことは考えられていません。これは、旧ポリラインも同様です。
ここで、「連続線」として利用されるポリラインが、主に 2D 図面で使われていることに注意してください。旧ポリラインも、3D 環境の到来を考えてデータ構造が策定されましたが、2D 上での連続線の表現には、データ量が冗長です。そこで、3D に特化して、頂点毎に異なる Z 座標を設定出来る 3D ポリラインが登場することになります。データ構造は、2D の旧ポリラインと同じです。
旧ポリラインのデータ構造は、他の 3D オブジェクト表現にも活用されていきます。3D 上の単一平面である PFACE[ポリメッシュ] コマンド、3DMESH[3D メッシュ] コマンドで作成されるポリメッシュ(ポリゴン メッシュ)です。これらは、旧ポリラインと同じく、オブジェクト タイプを表す主エンティティと、構成面(小さな平面)の頂点を保持する従属エンティティで構成されることになります。
このポリメッシュは、現在では旧形式とされていて、AutoCAD 雑学:ソリッドカーネルと AutoCAD API でご紹介したソリッド カーネル Autodesk Shape Manager を使用しません。AutoCAD が Windows に移行する前、当時のコンピュータの演算能力に合わせて 3D CAD 化を目指した「痕跡」と捉えることも出来るかと思います。
※ここでいうポリメッシュは AutoCAD 2010 で導入されたフリーフォーム デザインを実現する 3D メッシュ オブジェクトとは異なります。
さて、3D ポリラインは サーフェスやソリッド パスに使用されることがありますが、旧 2D ポリラインやポリメッシュは、今では利用する機会も少ないものと思います。ただ、API でポリラインを扱う場合には、ここでご紹介した内容は知識として持ち合わせておいたほうがいいでしょう。
なお、PLINETYPE システム変数を 0(ゼロ)に設定して作図した旧ポリラインは、図面を 2000 図面形式以降で保存してしまうと、PLINETYPE システム変数値を 2 に設定して開いても、新ポリラインには変換されませんので注意してください。旧ポリラインが新ポリラインに変換されるのは、R14 形式以前の図面を開いた場合のみです。
最後に、新ポリラインを作図する場合には、各辺(セグメント)毎に太さや補間タイプを変更することが出来ます。AutoCAD .NET API でそれらを指定する方法は、次の Autodesk Knowledge Network 記事でご案内していますので、興味をお持ちの方は覗いてみてください。
AutoCAD .NET API :ポリラインの円弧セグメントの指定方法
By Toshiaki Isezaki
コメント