Femtet2026.0マクロヘルプ/マニュアル
 

ホーム / モデリング / CGaudi / 関数 / GetObjectsFromScreenInRect

GetObjectsFromScreenInRect関数

定義

GetObjectsFromScreenInRect (SelectionMode As SELECTION_MODE_T, X1 As Integer, Y1 As Integer, X2 As Integer, Y2 As Integer, bSelectInRectEntire As Boolean, VertexList() As CGaudiVertex, EdgeList() As CGaudiEdge, FaceList() As CGaudiFace, BodyList() As CGaudiBody) As Boolean



[Python]
 GetObjectsFromScreenInRect_py(SelectionMode, X1, Y1, X2, Y2, bSelectInRectEntire=False)

戻り値

True      成功 (指定範囲にオブジェクトがなかった場合も含む)
False   失敗



[Python]

[0]

  True:成功、False:失敗

[1]

  Vertex(頂点)のリスト

[2]

  Edge(辺)のリスト

[3]

  Face(面)のリスト

[4]

  Body(ボディ)のリスト

引数

SelectionMode

  取得する対象の種類を指定(SELECTION_MODE_T列挙体)

X1, Y1, X2, Y2

  矩形選択の左上(X1,Y1)・右下(X2,Y2)の座標(左上が原点、右方向がX軸、下方向がY軸)

bSelectInRectEntire

  Trueのとき、矩形内にすべてが含まれるオブジェクトのみ取得。

VertexList

  取得された頂点の配列(CGaudiVertex

EdgeList

  取得された辺の配列(CGaudiEdge

FaceList

  取得された面の配列(CGaudiFace

BodyList

  取得されたボディ配列(CGaudiBody

[Python]
SelectionMode   選択する対象種類(SELECTION_MODE_T列挙体を利用)
X1, Y1, X2, Y2   矩形2点の画面座標
bSelectInRectEntire   True:矩形に全体が含まれるもののみ取得、False:一部でも含まれれば取得。
デフォルト: False
 

解説

指定した画面座標で囲む矩形領域内に存在するボディやトポロジー(頂点・辺・面)を取得します。
画面上で矩形選択したときと同様、他のオブジェクトに隠れているものも取得対象となります。
非表示オブジェクトは取得対象になりません。

bSelectInRectEntireがTrueの場合、矩形内にすべてが収まるオブジェクトのみを取得します。Falseの場合、一部が矩形内に含まれるものも取得されます。

取得対象は TargetSelectionMode で指定可能です。
ただし、SELECT_VEF_C は使用できません。

VBA の場合、各 List は動的配列を指定してください。実行後に配列が上書きされます。
X, Yは左上原点、右・下正方向の座標です。

実行例


Dim Femtet As New CFemtet
Dim Gaudi As CGaudi
Dim VertexList() As CGaudiVertex
Dim EdgeList() As CGaudiEdge
Dim FaceList() As CGaudiFace
Dim BodyList() As CGaudiBody
Dim bSuccess As Boolean

'画面サイズ:320 x 240の例
bSuccess = Femtet.Gaudi.GetObjectsFromScreenInRect(SELECT_FACE_C, 128, 96, 192, 144, False, VertexList, EdgeList, FaceList, BodyList)
If bSuccess = False Then
    MsgBox Femtet.LastErrorMsg
Else
   MsgBox "頂点数: " & UBound(VertexList) - LBound(VertexList) + 1
    MsgBox "辺数: " & UBound(EdgeList) - LBound(EdgeList) + 1
    MsgBox "面数: " & UBound(FaceList) - LBound(FaceList) + 1
    MsgBox "ボディ数: " & UBound(BodyList) - LBound(BodyList) + 1
End If