物理的なパーツまたはアセンブリを表すモデル要素を配置する方法は 2 つあります。拘束による配置、または座標フレームによる配置です。拘束は、Inventor などの拘束ベースの位置をサポートするホストに対してのみ使用できます。フレーム ベースの配置は、すべてのホストに使用できます。このセクションでは、フレーム ベースの配置の背後にある概念と、コンポーネントを配置しやすくする Intent 言語で使用できるツールの一部について説明します。
フレーム ベースの配置の基本的な概念は、Intent の最初のクラスのデータ型である座標「フレーム」です。フレームは、実際上は X、Y、および Z 座標の「ワールド」に対する 3D 座標系の位置および方向を表す行列変換です。"WorldFrame " は、恒等変換です。worldFrame の座標 X、Y、Z を持つ点は、実際にはそれらの座標の点です。内部的には、すべての点(およびベクトル)はワールド座標に格納されます。これらの座標は、イミディエイト ウィンドウまたはプロパティ パネルの点の値のリプレゼンテーションなど、特定の出力で表示できる場合もあります。
Intent の位置と方向の処理の基本は、フレームに関するすべてのパラメータやその他のルールを提供する FrameMixin デザインです。デザインが FrameMixin にミックスされているすべてのコンポーネントは、フレーム ベースの配置をサポートします。FrameMixin の主要な属性は、フレーム タイプの localFrame であり、ワールドに対する相対的なローカル コンポーネントの座標系の変換を保持します。コンポーネントを配置するには、いくつかの代替方法があり、すべて最終的な結果は localFrame の設定になります。
ほとんどの Intent デザインは既に FrameMixin にミックスされています。物理的なボディ(レポート、BOM など)を表さないものだけがこれを含みません。これは、Intent に含まれる基本的なデザインである BasePart にミックスされます。
点またはベクトルは、Point()または Vector()関数を使用して作成され、これらの関数は localFrame に対する点またはベクトルを自動的に作成します。これについて単純な例を示します。
Design myRoot : BasePart Rule p1 As Point = Point(1,2,3) Child c1 As :myChild Origin = p1 End Child End Design Design myChild : BasePart Rule p2 As Point = Point(10,0,0) End Design
ここで、点の値をチェックします。
Intent >Root.p1 --> Point_(1.0, 2.0, 3.0, WorldFrame()) Intent >Root.c1.p2 --> Point_(11.0, 2.0, 3.0, WorldFrame())
これらの参照の出力は、Point_()関数の呼び出しです。この関数は、座標が解釈されるフレームが明示的に要求される点を除いて Point()関数と同一です。ベクトルには、同様の関数 Vector_()があります。
myRoot の Point()関数の呼び出しは、常に worldFrame である、ルートの localFrame を使用します。そのため点 p1 ワールド座標は入力したとおり正確に使用されますし、localFrame は恒等変換です。子 c1 は、この点に配置されます。これは、その localFrame は原点が p<1,2,3> になるように変換されることを意味します。
子の Point()関数の呼び出しは、c1 の localFrame を使用することで、指定された座標を変換します。c1 に対して相対的な点 <10,0,0> は、ワールドの点 p<11,2,3> になります。
ユーザは実際には Intent によって使用される座標を知る必要はありません。デザイン myRoot は、ルートでない場合でも同様に機能します。子 c1 は、親がどこにあるかにかかわらず、その親と相対的にまったく同じ場所にあります。得られるすべての座標は変更されますが、ルールはそのままです。さらに、c1.p2 への参照は修正され、呼び出し元は c1 の位置に注意を払う必要がありません。
さらに、Intent はモデル内のすべてのフレームを管理します。この例のように、ルールの作成者は "ローカル" 座標でのみルールを記述する必要があります。Intent のアセンブリ モデリングの動作は、常に評価が正しく実行されることを確認します。上位アセンブリが再配置されると、すべてのサブアセンブリが自動的に更新されます。
フレーム ベースの配置でパーツを配置するための一般的なテクニックの 1 つは、Intent 言語に組み込まれた幾何代数機能を使用することです。システムはデータ型を認識しているため、これらの型の代数は正しく実行されます。たとえば、システムは点 + ベクトル操作で点が生成されることを認識します。ベクトルにスカラー量(数値)をかけると、同じ方向の長さが異なるベクトルが生成されます。点にスカラー量をかけると、エラーが発生します。点に点を加算してもエラーになります。
ルールの作成者は、これらの機能を使用して、基礎になる座標やそれを含むフレームを無視することができます。Intent は詳細を管理します。これは、"座標がない" ジオメトリと呼ばれます。
次の Inventor の例では、3 つの球を作成し、それらを積み重ねて単純な雪だるまを形成します。
Design Snowman : Office IvAssemblyDocument Parameter Rule baseSize As Number = 50 Child base As :IvSphere radius = baseSize ' you can specify an offset of a point by ' adding a scaled vector to a point origin = Me.origin + unitY * child.radius ' align the X axis of this sphere with the assembly X axis xDirection = unitX ' align the Y axis with the negative Z axis of the assembly yDirection = -unitZ color = "White" ignorePosition? = False grounded? = True ' position the part and ground it End Child Child body As :IvSphere radius = baseSize * 0.75 origin = base.origin + base.unitZ * (child.radius + base.radius) xDirection = base.unitX yDirection = base.unitY color = "White" ignorePosition? = False grounded? = True End Child Child head As :IvSphere radius = baseSize * 0.50 origin = body.origin + body.unitZ * (child.radius + body.radius) xDirection = body.unitX yDirection = body.unitY color = "White" ignorePosition? = False grounded? = True End Child End Design
ignorePosition? パラメータは、Inventor の既定の動作が拘束ベースの配置を使用するため、Inventor でのみ必要です。grounded? パラメータも、Inventor でのみ必要です。
原点、xDirection、yDirection、unitX、unitY、および unitZ ルールは、すべて FrameMixin によって提供されています。
origin = Me.origin + unitY * child.radius
アセンブリの原点(Me .origin)から開始し、Y 軸のベクトル(unitY は Y 軸に位置合わせされた 1 つの単位ベクトル)と基部の半径の積を加えます。
origin = base.origin + base.unitZ * (child.radius + base.radius)
ボディ上へのヘッドの配置は、基部にボディを配置するのと同様です。
ここまで、FrameMixin の原点のパラメータについて説明してきました。原点を単独で使用すると、変換のみ行われます。その他のパラメータが指定されている場合、完全に全体的な方向を定義できます。全体的な方向を実行する最も簡単な方法は、xDirection と yDirection パラメータを使用します。その名前が示すように、xDirection はベクトル パラメータであり、localFrame の X 軸の方向を指定します。名前からすると少し変ですが、yDirection は実際には Y 軸を指定しません。軸は直交している必要があり、独立したパラメータの制限はないため、システムは平面と Y 軸の全体的な方向の判定に yDirection の値だけを使用します。したがって、xDirection が優先されます。
これらの 3 つのパラメータを使用して、コンポーネントの任意の位置および方向を完全に指定することができます。上記の雪だるまの例ではこれも示しており、xDirection と yDirection を設定しています。球の方向の変更を確認するのが難しいときに、何か他のものをこれに相対的に配置したときの方向を把握することが重要です。