概要 - フィルタ リストに複雑な条件を設定する(VBA/ActiveX)

複数の選択条件を指定すると、AutoCAD はそれぞれのすべての条件を満たすオブジェクトだけを選択します。しかし、他の方法で条件を設定することもできます。

数値項目では、関係演算を指定できます(たとえば、円の半径は、5.0 以上のものを選択)。また、すべての項目で論理演算を指定できます(たとえば、Text または Mtext オブジェクトを選択)。

フィルタ設定の関係演算子を指定するには、DXF コード -4 を使用します。演算子は文字列で指定します。利用可能な関係演算子を次の表に示します。

選択セット フィルタ リストの関係演算子
演算子 説 明
"*" すべてのもの(常に真)
"=" 等しい
"!=" 等しくない
"/=" 等しくない
"<>" 等しくない
"<" より小さい
"<=" より小さいか等しい
">" より大きい
">=" より大きいか等しい
"&" ビット方式の AND(整数グループのみ)
"&=" ビット方式のマスクが等しい(整数グループのみ)

フィルタ リストの中の論理演算子も、DXF グループ コード -4 で表し、演算子は文字列です。演算子は必ず対で表れます。 論理演算の開始を表す演算子は、始めに小なり記号(<)を伴い、論理演算の終了を表す演算子は、終わりに大なり記号(>)を伴います。次の表は、選択セットのフィルタ処理の中で現れる論理演算子の一覧です。

選択セット フィルタ リストの論理演算子
開始演算子 囲むことのできるオペランドの数 終了演算子
"<AND" 1 つ以上のオペランド "AND>"
"<OR" 1 つ以上のオペランド "OR>"
"<XOR" 2 つのオペランド "XOR>"
"<NOT" 1 つのオペランド "NOT>"

半径が 5.0 以上の円を選択する

次のコードは、半径が 5.0 以上の円を選択する方法を示します。

Sub Ch4_FilterRelational()
  Dim sstext As AcadSelectionSet
  Dim FilterType(2) As Integer
  Dim FilterData(2) As Variant
  Set sstext = ThisDrawing.SelectionSets.Add("SS5")

  FilterType(0) = 0
  FilterData(0) = "Circle"
  FilterType(1) = -4
  FilterData(1) = ">="
  FilterType(2) = 40
  FilterData(2) = 5#

  sstext.SelectOnScreen FilterType, FilterData
End Sub

Text または Mtext を選択する

次の例は、Text または MText オブジェクトのいずれかを選択できるように指定します。

Sub Ch4_FilterOrTest()
  Dim sstext As AcadSelectionSet
  Dim FilterType(3) As Integer
  Dim FilterData(3) As Variant
  Set sstext = ThisDrawing.SelectionSets.Add("SS6")
  FilterType(0) = -4
  FilterData(0) = "<or"
  FilterType(1) = 0
  FilterData(1) = "TEXT"
  FilterType(2) = 0
  FilterData(2) = "MTEXT"
  FilterType(3) = -4
  FilterData(3) = "or>"

  sstext.SelectOnScreen FilterType, FilterData
End Sub