ラベル and の投稿を表示しています。 すべての投稿を表示
ラベル and の投稿を表示しています。 すべての投稿を表示

2019年9月22日日曜日

フィルタ(2)AND/OR

条件判断

フィルタの条件判断はAND(且つ)とOR(又は)があります。ANDとORを使用すれば複合的な条件文を作ることができます。その考え方は「算数」に置き換えると簡単です。

ルール - AND/OR

  • AND------×(掛け算)
  • OR--------+(足し算)

条件判断       - TRUE/FALSE

  • TRUE     =1 (≠0)
  • FLASE    =0

ANDの例

下の図の例は壁の中で
  1. タイププロパティ[機能]の値が「外部」である
  2. タイププロパティ[幅]の値が「100以上」である
  3. インスタンスプロパティ[面積]の値が「100より小さい」
の三つのルールのすべてを満たしている壁を選択するフィルタです。このフィルタを実際に作成してみましょう。

手順


  1. [表示]タブ>[グラフィックス]パネル>[フィルタ]
  2. フィルタグループの新規作成
  3. 名前を「壁 外部 t100 100㎡未満」としてOK。
    フィルタを作成
  4. カテゴリグループでのみをチェック。
  5. フィルタ規則グループで下の図のように条件1を追加。
    タイププロパティ[機能]の値が「外部」である
  6. ルールを追加をクリックし、条件2を下の図のように設定。
    タイププロパティ[幅]の値が「100以上」である
  7. もう一度ルールを追加をクリックし、条件3を下の図のように設定。
    インスタンスプロパティ[面積]の値が「100より小さい」
下の図はこのフィルタをビューに適用して、前回のように青色に着色した状態です。
フィルタで着色
この場合、三つのルールがすべてTRUE=1であればANDは掛け算なので
1×1×1=1(≠0)
なので、TRUEと判断できますが、一つでもFALSE=0があると
1×0×1=0
でFALSEと判断されます。
もし、ORであれば、ORは足し算なので、一つでもTRUE=1があれば
1+0+0=1(≠0)
でTRUEと判断されます。
ORの場合は一つでもルールに合致すればTRUE

ルールを入れ子にする


3の条件を以下のように変更してみます。
  • インスタンスプロパティ[面積]の値が「100以上200以下」
これを実際に作成してみましょう。
  1. 三番目のルールを-をクリックして削除。
    ルールを削除
  2. セットを追加をクリック
    セットを追加
  3. ANDを選択し、ルールを追加をクリック
    ANDセットにルールを追加
  4. 下の図のように面積が100以上を追加。
    面積が100以上
  5. セット内のルールを追加をクリックし、面積が200以下のルールを追加
    ルールを追加
このように、ルールはつぎつぎと入れ子(ネスト)にすることができます。
ルールのネスト
理屈を理解すれば、複数のルールを組み合わせてより複雑なフィルタを作成することができます。

2017年5月27日土曜日

条件式を使ったファミリ

条件式 IF

前回のファミリを引き続き題材にします。下の図を見てみると、面取距離(A)の値は取りうる値に制限があることがわかります。0より大きくないといけないし、またX、Yの値の半分より小さくないと押し出しフォームを作ることができません。
前回の面取りファミリ
まとめますと
  • 条件1: 面取距離>0
  • 条件2: 面取距離<0.5*X かつ  面取距離<0.5*Y
面取距離=面取長*sin(45°)ですから、二つの条件は
  • 条件1:面取長*sin(45°)>0
  • 条件2:面取長*sin(45°)<0.5*X かつ 面取長*sin(45°)<0.5*Y
となります。この二つの条件をすべて満たしたとき、Aの値を受け入れるようにしてみましょう。
条件式は if 文を使います。書式は

if(条件式, TRUEの場合の値, FALSEの場合の値)


となります。条件式は数字の判断が使えますが、文字列の判断は使えません。

入力用のパラメータを追加

ファミリを開いて、面取りの長さを入力するためのパラメータを追加します。

  1. 作成タブ>プロパティパネル>ファミリタイプ
  2. 新しいタイプ ボタンをクリック
  3. 名前を「面取長」とし、パラメータタイプを「長さ」、パラメータグループを「寸法」としOK
    パラメータ「面取長」を追加

条件を追加

条件1と条件2を評価するためのパラメータを追加します。

  1. 作成タブ>プロパティパネル>ファミリタイプ
  2. 新しいタイプボタンをクリック
  3. 名前を「条件1」としてパラメータタイプを「はい/いいえ」、パラメータグループを「その他」
  4. 同様に、「条件2」を追加
  5. 条件1の式を「面取長 * sin(45) > 0」
  6. 条件2の式を「and(面取長 * sin(45°) < 0.5 * X, 面取長 * sin(45°) < 0.5 * Y)」
    条件1と条件2を追加して式を設定する
    条件2の式は「面取長 * sin(45°) < 0.5 * X」, 「面取長 * sin(45°) < 0.5 * Y」の両方の式が満たされていればTRUE(☑)、そうでなければFALSE(□)を返します。

Lの値を制御する

Lの値をifを使った計算式で制御します。
  1. Lの計算式に「if(and(条件1, 条件2), 面取長, 0.1 * X)」と入力

これは 条件1と条件2がどちらもTRUEならば面取長にLの値をそうでなければXの0.1倍の値をLに設定する という意味です。なお、どちらかがTRUEの場合はandではなくorを使います。
Lの式を設定するとグレーになる

面取長の値をいろいろ変えて適用ボタンをおしてみてください。あまり大きな値を入力するとX*0.1の値になります。
安全なファミリ

これで安全な値しか入力できないようになります。