ユーザ部品の定義方法 / 形状ファイル(MDP)の作成

形状ファイル(MDP)の作成
[部品作成モード]でソリッドコマンドを実行した場合、パラメトリックに再計算できる情報が付加されたソリッドが作成されます。 この要素を総称して[フィーチャ]と呼びます。 フィーチャは、各パラメータ(高さや半径など)の値に数式を記述することができます。 数式を計算した結果の値に連動して実際の形状([フィーチャ形状]と呼びます)が変化します。 このフィーチャを組み合わせてユーザ部品用の形状をモデリングします。
■フィーチャの種類について
単純なソリッド形状として以下のフィーチャが定義されています。
[部品作成モード]では、上記コマンドを実行して通常の操作でソリッドを作成すると、自動的にパラメトリック情報が付加されます。 作成されたフィーチャは[パーツツリー]で確認することができます。 このパラメトリック情報が付加された単純ソリッド形状のことを[プリミティブ・フィーチャ]と呼びます。
形状処理用のフィーチャとして以下のフィーチャが定義されています。
形状処理用のフィーチャのことを、[手続きフィーチャ]と呼びます。 いくつかのコマンドについて、一部の操作に対してフィーチャが作成されない制限があります。詳細はそれぞれのフィーチャの説明の項を参照してください。
手続きフィーチャに対応するコマンドをソリッドに対して適用すると、パーツツリー上でフィーチャが階層化されて表示されます。 その際、[子フィーチャ](形状処理対象となったフィーチャ)はチェックがオフにされて非表示になります。 チェックをオンにすることで、子フィーチャを表示させることができます。 手続きフィーチャに対してさらに手続きフィーチャを適用すると、パーツツリー上での階層がさらに深くなります。[上図]
この時、ツリー階層中の一番上位のフィーチャを特別に[最上位フィーチャ]と呼びます。 削除コマンドは最上位フィーチャしか対象にできないなど、子フィーチャにはいくつかの操作制限があります。
■フィーチャのパラメータ変更と再計算について
フィーチャは種類によってそれぞれ固有のパラメータ(半径、高さ、座標など)を保持しています。 パーツツリーから[パラメータの変更]コマンドを実行すると[パラメータ変更ダイアログ]が表示されます。 そのダイアログ上で値を変更することでフィーチャのパラメータを変更することができます。
パラメータを変更すると、そのフィーチャを参照しているすべてのフィーチャが[再計算必要状態]になります。 パーツツリーの下層のフィーチャのパラメータを変更した場合は、その親ノードのフィーチャすべての状態が変更になり、ツリー上でのアイコン(右図中の黄色い丸の!マーク)が変化します。
再計算が必要なフィーチャに対して、パーツツリーから[再計算]コマンドを実行します。 親ノードで再計算コマンドを実行すると、子ノードすべてを自動的に再計算します。
未定義の変数を参照していたなどの記述ミスをしていたり、パラメータが不適切な場合には再計算が失敗してしまいます。 計算に失敗した場合も、パーツツリー上でアイコン(右図中の赤い三角形の!マーク)が変化しますので、どのフィーチャの再計算が失敗したのかを確認することができます。 また、失敗したフィーチャのノードにマウスカーソルを持って行くと、失敗した理由がツールチップとして表示されますので、修正の参考にしてください。
ユーザ部品を配置する場合は、配置時に作業者が指定した寸法に従ってフィーチャの再計算が自動で行われます。                             

ユーザ部品の配置・編集時にエラーが発生した場合、具体的なエラー内容が表示されます。

以下は、計算時の注意事項になります。これらを考慮に入れて、計算に失敗しない形状を作成してください。
■手続きフィーチャの再計算についての注意事項
・形状エンティティのID付け
形状が変化しても、R掛けなどの手続きフィーチャを再計算できるようにするために、フィーチャ形状のすべてのフェイス、エッジ、バーテックスには、IDが設定されています。 フィーチャを再計算した時は、一時的に新旧2つの形状が存在します。 この時に、古い形状に設定されているIDを、新しい形状へと引き継ぐ処理を行っています。 プリミティブ フィーチャの場合は、形状が単純ですのでほぼ問題なく正しいIDの引き継ぎを行うことができます。
しかし、多角柱フィーチャの頂点数が変更された場合や、手続きフィーチャなどによって形状変更が起こった場合は、「同じ箇所と判断」してIDを引き継ぐことが非常に難しくなります。 ソリッドを構成するエッジやフェイスが増減するので、IDが失われてしまったり、エッジやフェイスが増えることでループを構成する順番等が変化するためです。
R掛けなどの手続きフィーチャは、ブレンド対象となるエッジなどを ID で記憶しています。 パラメータが変更されて再計算するときは、処理対象となる形状中から、記憶しているIDを持ったエッジやフェイスを検索し、見つかった要素に対して処理を行います。 そのため、上記のような理由からIDが失われて処理できなくなったり、予期しない箇所にブレンドが適用されてしまうことが発生します。
ブレンドなどの各手続きフィーチャが保持している、処理対象となるエッジやフェイスのIDは、パラメータ変更ダイアログで確認することができます。 しかし現在、ソリッドのエッジやフェイスにどのIDが設定されているのかを確認する方法はサポートされていません。 また、ブレンドなどの対象エッジのIDを変更する方法もサポートされていません。
そのため、ユーザ部品の形状を定義する際は、プリミティブ フィーチャを極力使用した方がパラメータ変更による再計算に成功しやすくなります。 また、ブーリアン フィーチャはフィーチャ単位の処理なので、IDを記憶していません。そのため、再計算に失敗することはほとんどありません。
・ブーリアン時のIDの引き継ぎについて
下図(A,B)のモデルにおいて、どちらの場合も、ブロックから円柱を切削(差)した結果の形状は同じになります(図C)。
切削(差)
しかし、結果の形状の図Cの緑色のエッジに引き継がれているIDの値は、AのモデルとBのモデルでは異なります。
Aのモデルに対して切削(差)を実行したときは、緑のエッジは、円柱の上面のエッジのIDが引き継がれます。
一方、Bのモデルに対して切削(差)を実行したときは、緑のエッジは、ブーリアンによって新しく生成されたエッジとして、新規のIDが設定されます。 もし、緑のエッジにブレンドを適用するような形状が定義されている場合、パラメータの変更によって、モデルAの状態からモデルBの状態へ変化することがあると、緑のエッジのIDが変化してしまうので、ブレンド対象エッジが見つけられなくなり、計算に失敗してしまいます。
ですので、ブーリアン演算の対象となるフィーチャは、上記のような点に注意して形状を作成しておくと、再計算の成功率を高めることができます
■パーツについて
フィーチャは、データ構造上、常にどれかの[パーツ]に所属している必要があります。 後述する[変数]は、パーツ単位で定義されます。 通常のコマンド操作でフィーチャを作成した場合は、モデルで必ず定義されている最上位のパーツ(図では「パーツ-1」)の子供要素として登録されます。
パーツはパーツ同士で階層構造を構成することができますが、ユーザが特定の操作でパーツを作成することはできません。 [部品作成モード]の時に、フィーチャを含む別のモデルファイルを[モデルコピー][カタログドロップ]した場合のみ、読み込んだモデルに含まれていたパーツが、現在のモデルのパーツの下に子供パーツとして取り込まれます。
フィーチャのパラメータの式中に変数を記述した場合、その変数は、フィーチャが所属しているパーツで定義されたものが参照されます。 もし、フィーチャが所属しているパーツで目当ての変数が定義されていない場合は、その親パーツを参照します。 変数が見つかるまで親パーツを順番にたどって検索されます。兄弟パーツは検索対象となりません。
■変数について
フィーチャとは別に値や式を保持するための[変数]を定義することができます。
変数は、上述した[パーツ]単位で定義されます。 パーツが異なれば、同じ名前の変数をいくつでも定義することができます。
フィーチャの各パラメータにはこの変数を使った式を記述することができます。 変数が他の変数を使って式を定義することもできます。 ユーザ部品を定義する際は、部品の寸法名と同じ変数を定義し、各フィーチャのパラメータではこの変数を使用する必要があります。
例)D寸という変数を定義した後に、A寸がそのD寸の値に連動して変化する場合、Aの式は「D+20」と記述します。
変数の式、またはフィーチャのパラメータの値で使用できる算術演算を記述します。 下記の予約語と一致する名前は変数のキー名として使用することはできません。
種類記号・関数名
括弧( ) : 演算の優先順序を指定できます
定数値PI : 円周率π
算術記号+、-、*、/
算術関数
  • abs(X) : Xの絶対値を求める
  • pow(X,Y) : XのY乗を求める
  • sqrt(X) : Xの平方根を求める
  • log(X) : Xの対数を求める
  • exp(X) : Xの指数を求める
  • max(X,Y) : XとYの大きい方を求める
  • min(X,Y) : XとYの小さい方を求める
  • ceil(X) : Xの小数点以下を切り上げる
  • floor(X) : Xの小数点以下を切り捨てる
三角関数 sin(値)、cos(値)、tan(値)、asin(値)、acos(値)、atan(値)、sinh(値)、cosh(値)、tanh(値)
値の単位はラジアン(1度は、(円周率π)/360 ラジアン)
条件式
  • if(X,Y,Z) : Xが0以外の時はY、Xが0の時はZになる
  • range(X,Y,Z) : X<Y<Zが成り立つ時は0、X>Yの時は-1、Y>Zとの時は1になる

  • 使用例:Lが0〜50の時はDが10、それ以外はDが20の時:
    Dは、if( range(0,L,50),20,10 )となる
■パーツツリーについて
[部品作成モード]でのみ表示されるパネルです。
パーツやフィーチャの階層関係を視覚的に把握することができます。 各ノード横にあるチェックマークをオン・オフすることで、対応するフィーチャ形状の表示状態を切り替えることができます。 また、フィーチャのパラメータを変更したり、フィーチャの構成を変更したりすることができます。
パーツツリーの下には、変数一覧を表示するための[変数リスト]が表示されます。変数リストから[パラメータの変更]コマンドを実行すると、変数の式(値)を変更することができます。 表示される変数は、パーツツリーで現在選択されているパーツで定義されたものになります。 フィーチャが選択されている場合は、そのフィーチャが所属しているパーツ、何も選択されていない場合は、最上位のパーツで定義されている変数の一覧が表示されます。
[部品作成モード]でユーザ部品を配置することができますが、そのときはツリー上のパーツのアイコンが特殊なものに変化します。 ユーザ部品として配置したフィーチャやパーツで定義されている変数のパラメータは変更することができません。
パーツツリーで実行できるコマンドについては別項を参照してください