WorkbenchIndexFreeCADのCAD機能はOpenCasCadeカーネルをその基礎としています。FreeCADはパートモジュールによってOpenCasCadeオブジェクトとその機能へのアクセス・利用を行なっています。OpenCascadeはプロフェッショナル用のCADカーネルでその機能は3D形状操作、3D形状オブジェクトに特化しています。オブジェクトと異なりパートオブジェクトはより複雑で、明確なブーリアン演算、変更履歴、パラメトリックな動作などのより高度な処理が可能です。FreeCADツールパートモジュールツールは全てパートモジュールを読み込んだ時点で表示されるPartメニューにあります。Export概念の説明OpenCasCadeにおける用語では幾何プリミティブと(位相)シェイプは明確に区別されます。幾何プリミティブとは点、ライン、円、平面、それにB-スプライン曲線や曲面などのより複雑なタイプのものです。シェイプは頂点、エッジ、ワイヤー、面、ソリッド、それに他のシェイプの合成物です。幾何プリミティブは3Dシーン上に直接表示されることはありませんがシェイプの形状を作成するためには重要な役割を果たします。エッジははラインまたは円の一部から作成されます。幾何プリミティブとは"形のない"構成単位であり、シェイプはその上に作られた実際の空間的な形状であると言えるでしょう。Geom_*(幾何プリミティブの場合)とTopoDS_*(シェイプの場合)を検索してください。幾何オブジェクトとシェイプの違いについてより詳しい説明を読むことができます。残念なことに公式のOCCドキュメントはオンラインで利用することができず(アーカイブをダウンロードしなければなりません)、またそのほとんどがプログラマー向けのものでエンドユーザーに向けたものではないことに注意してください。これから始めるために必要な情報についてはここで十分確認することができるはずです。実のところ幾何オブジェクトは大きく二つに分けることができます。カーブとサーフェスです。カーブ(ライン、円・・・)からはエッジを直接的に作成でき、サーフェス(平面、円筒・・・)からはフェイスを作成できます。幾何プリミティブのラインは無限の長さを持ちます。基底ベクトルと方向ベクトルによって定義されているのです。そのシェイプ表現は始点と終点によって長さを制限されなければなりません。六つの制限つき平面によって作成されます。エッジやフェイスからはその対となる幾何プリミティブに戻ることもできます。このようにしてシェイプから非常に複雑なパーツを作成したり、逆に複雑なシェイプからそれを構成するサブシェイプを全て抜き出したりすることが可能になっているのです。scriptingパートモジュールで使用されている主なデータ構造はOpenCascadeのBRep(境界表現)データ型です。現在ではパートモジュールのほとんど全ての機能とオブジェクト型がPythonスクリプトから利用可能になっています。これにはLineやCircle(あるいはArc)などの幾何プリミティブとVertexes、Edges、Wires、Faces、SolidsそしてCompoundsなどTopoShapesの全てが含まれます。これらの各オブジェクトにはいくつかの異なる作成方法があり、またオブジェクトの一部、特にTopoShapesではブーリアン演算の和集合/差集合/共通集合といったより高度な操作が可能になっています。パートモジュールの機能の詳細についてはFreeCADスクリプト処理の基礎ページを調べてください。Part,PartGuidoc=App.newDocument()パートモジュールを読み込み、新しいドキュメントを作成します。l=Part.Line()l.StartPoint=(0.0,0.0,0.0)l.EndPoint=(1.0,1.0,1.0)ラインは実際は線分なので始点と終点があります。doc.addObject("Part::Feature","Line").Shape=l.toShape()Partオブジェクト型をドキュメントに追加し、追加したオブジェクトの'Shape'プロパティに線分のシェイプ表現を代入します。ここで理解すべき重要な点は幾何プリミティブ(Part.Line)を使ってそこから位相シェイプを作成した(toShape()メソッド)ということです。ドキュメントに追加できるのはシェイプだけです。FreeCADでは幾何プリミティブはシェイプのための"作成用構造体"として使用されます。doc.recompute()ドキュメントを更新します。新しいパートオブジェクトの視覚的な表現を用意するための処理でもあります。LineはPart.Line(point1,point2)という風にその始点と終点をコンストラクタで直接指定して作成することもできますし、ここで行ったようにデフォルトのラインを作成してあとでそのプロパティを設定することもできるということを憶えておいてください。c.toShape()doc.recompute()先ほどと同様、円(幾何プリミティブ)を使ってそのシェイプを作成しました。e.Curveここではオブジェクトfのシェイプを取得した後、そのエッジのリストを取得しています。今回の場合、エッジは一つしかありません。円一つからシェイプ全体を作成しているためです。従ってEdgesリストの最初のアイテムだけ取得し、その後でそのCurve(曲線)を取得しています。Edgeは全てCurveを持ちます。これはエッジの元になっている幾何プリミティブです。詳しく知りたい場合は位相データのスクリプト処理ページを見て下さい。DocumentationDisclaimers。