単純な動的ルール リアクタを使用する

ここで、リンクを追加するたびに追加される "ピン" (円柱)がほしいとします。ピン + 円柱 アセンブリとすることももちろんできますが、その場合は(a)すべてのピンおよびリンクを兄弟として持つこと、および(b)必要がないと判断した場合は特定のピンを削除することができなくなります。

そこで、リンク デザインに次のメソッドを追加します。

<%%categoryOrder ("Inventor Parameters,Inventor"), _
 %%OpenCategories ("Inventor Parameters")> _
Design link : DynamicRuleReactorExampleAdoptedComponents linkAdopt

    Method preCreateSelf() As List
        Dim result As List
        result = {{:action, :createDynamicPart, _
                   :Part, Parent, _
                   :Name, makeName(partName & "_pin"), _
                   :Design, "IvCylinder", _
                   :diameter, "linkHoleDia * 0.95", _
                   :length, "linkThickness * 2.05"} _
                 }

        Return result

    End Method

End Design

ここで[子を追加]をもう一度使用し、別のリンクの子を挿入してメソッドをテストします。パラメータのダイアログボックスで、holeDia を linkHoleDia に、thickness を linkThickness に設定します。

これでリンクが挿入され、ピンも挿入されます。しかし、これではピンが長すぎるように見えます。

ピンは標準の Intent パーツであるため、問題をデバッグするためにパラメータを見ることができます。

高さが、まだ linkThickness の関数ではなく、既定値の 1 であるように見えます。メソッドをもう一度確認しましょう。

これが原因でした。円柱には長さのパラメータがなく、高さを設定する必要があります。

注: もう 1 つのデバッグ テクニックは、[即時]ペインからイベント ハンドラ メソッドを呼び出して、それが何を返すかを確認します。これは実際には何も実行しませんが、イベントが実際に発生したときに実行するようにプログラムされている "アクション" を確認することができます。生成した式の構文エラーを確認します。

既存のピンは "そのまま" であり、リアクタのルールへの修正によって影響を受けません。それを行うために他のリンクを作成する必要があります(まず既存のリンクおよびピンを削除します)。リンクおよびピンを個別に削除する必要があることに注意してください。

ここでピンも削除します(表示されていません)。

前に使用したのと同じ手順を使用して別のリンクを追加し、イベントをもう一度テストします。今度はピンが適切な高さの式を取得します。

このメカニズムを使用して、ユーザはピンとリンク間の拘束を手動で作成し、また余分なピンを手動で削除する必要があります。

次: "スマート" ピンを作成して使用する