0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AutoCAD VBA 選択フィルタ (1) - 概要 -

Last updated at Posted at 2025-03-31

はじめに

AutoCAD VBAでコードによる図形オブジェクトの選択には、選択フィルタを指定することが可能です。
例えば、画面上で図形オブジェクトをクリックやドラッグで選択するSelectionSet.SelectOnScreenメソッドでは、画面上で非表示やフリーズにしていなくても選択フィルタにしたがった図形オブジェクトだけを選択できますし、SelectionSet.Selectメソッドでは、選択フィルタを指定することでクイック選択のような処理を行うことも可能です。

ここでは、3回に分けて選択フィルタを作成するFunctionプロシージャを紹介します。第1回は前段として公式リファレンスのサンプルコードを見ていきます。

公式リファレンスのサンプルコード(改)

公式リファレンスに掲載されている選択フィルタの作り方は、コード内がすべて英語ということもあり、少しわかりづらいものです。
以下はSelectionSet.Selectメソッドに掲載されているサンプルコードを最低限翻訳・改変して注記を入れたものです。

AutoCAD - SelectionSet.Selectメソッド
Sub Example_Select()
  ' 円でフィルタリングして選択セットにメンバーを追加するサンプルコード

  ' 'SSET'という名前の選択セットを作成 (※この時点では中身は空です)
  Dim ssetObj As AcadSelectionSet
  Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
    
  ' 選択する範囲を表す矩形の対角線の2点を指定 (※3次元座標値 X,Y,Z を表す1次元配列) 
  Dim corner1(0 To 2) As Double
  Dim corner2(0 To 2) As Double
  corner1(0) = 28: corner1(1) = 17: corner1(2) = 0
  corner2(0) = -3.3: corner2(1) = -3.6: corner2(2) = 0
    
  ' 選択モードとして交差(矩形内部および枠線にかかっている図形を選択するモード)を指定
  Dim mode As Integer
  mode = acSelectionSetCrossing

  ' 選択フィルタの中身となる配列を作る
  Dim gpCode(0)    As Integer  ' 筆者注 : FilterTypeの中身 (常に As Integer)
  Dim dataValue(0) As Variant  ' 筆者注 : FilterDataの中身 (様々な値があるためVariant)
  gpCode(0) = 0                ' 筆者注 : 図形タイプをテキストで指定するときのDXFグループコード
  dataValue(0) = "Circle"      ' 筆者注 : 図形タイプを表すテキスト

  ' Selectメソッドの引数となる配列を作る (こちらは常にVariant)
  Dim groupCode As Variant
  DIm dataCode  As Variant
  groupCode = gpCode
  dataCode = dataValue

  ' SelectionSet.Selectメソッドを実行
  ssetObj.Select mode, corner1, corner2, groupCode, dataCode
    
End Sub

コードの解説

(1) 選択セットの作成

特にありませんが、指定した名前の選択セットが既にある場合はエラーになりますので、その対処をしておくべきかもしれません(このコードはあくまでサンプルなので……)。

AutoCAD - 指定の選択セットを最初に削除しておくサンプルコード
  On Error Resume Next
  ThisDrawing.SelectionSets("SSET").Delete
  On Error GoTo 0

(2) 矩形の対角線を表す2点の指定

特にありません。点を表す変数は3要素の1次元配列です。つまり、X, Y, Z座標の値です。

(3) 選択モードの指定

選択モードの指定は、AcSelect 列挙型で指定します。
AcSelect 列挙型には8つの定数があり、その内、Selectメソッドで5つ、SelectByPolygonメソッドで3つ使います。

(4) 選択フィルタの中身となる配列を作る

まず、フィルタをいくつ指定するかが必要なため、要素数を指定して配列を定義しています。1つ目のgpCode(0)は内容が常にDXFグループコードとなるため、Integer型となります。2つ目のdataCode(0)は、1つ目のgpCode(0)に対応する値で、様々な型(Integer, Long, Single, Double, String, など)が入ってくるため、Variant型となります。

(5) Selectメソッドの引数となる配列を作る

こちらはSelectメソッドの引数となるもので、常にVariant型である必要があります。

(6) SelectionSet.Selectメソッドを実行

指定した条件で選択が実行されます。注意点としては、画面上で選択されているわけではなく、あくまで'SSET'という名前の選択セットに対象のオブジェクトが格納されたということです。

AutoCAD VBA
  ssetObj.Select Mode:=mode _
               , Point1:=corner1 _
               , Point2:=corner2 _
               , FilterType:=groupCode _
               , FilterData:=dataCode

おわりに

(4)では、フィルタの中身を作る際にフィルタ数を決め打ちしています。汎用のフィルタ作成ファンクションを作るにあたっては、これを可変にした方が良さそうです。

次回は、Selectメソッドで指定するフィルタ(配列)を作成するファンクションプロシージャについて解説していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?