Get Preselected Object Example (VBA)
' This example shows how to get a pre-selected object when a pre-selection
event is fired.
Module
'------------------------------------
' Preconditions:
' 1. Part, assembly, or drawing document
' is
active.
' 2. If a part or assembly document is active, then
' pre-select
(mouse over) a face.
' -
or -
' If
a drawing document is active, then pre-select
' an
edge.
' 3. Run the macro (press F5).
'
' NOTE: Tools > Options
> Stop VSTA debugger on macro exit
' must
not be selected for this macro to run
' to
completion.
'
' Postconditions:
' 1. Whenever a face is pre-selected in a part or assembly
' document,
statements confirming its pre-selection are
' written
to the Immediate window.
' -
or -
' Whenever
an edge is pre-selected in a drawing document,
' statements
confirming its pre-selection are written
' to
the Immediate window.
' 2. To stop running the macro, click Debug
> Stop Debugging
' in
the Microsoft Visual Basic IDE.
'----------------------------------------
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim partDoc As New Class1
Dim assemblyDoc As New Class2
Dim drawingDoc As New Class3
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
' Determine the document type, then
' execute its corresponding class module
If swModel.GetType
= swDocPART Then
partDoc.init
swModel
ElseIf swModel.GetType
= swDocASSEMBLY Then
assemblyDoc.init
swModel
ElseIf swModel.GetType = swDocDRAWING Then
drawingDoc.init
swModel
End If
End Sub
Class1 module
Public WithEvents doc As partDoc
Public Function init(ByRef docIn As Object)
Set
doc = docIn
End Function
Private Function doc_UserSelectionPreNotify(ByVal
SelectionType As Long) As Long
If
SelectionType = swSelFACES Then
Set
swApp = Application.SldWorks
Set
swModel = swApp.ActiveDoc
Dim
swSelMgr As SldWorks.SelectionMgr
Dim
SelectedObject As Object
Dim
swFace As SldWorks.Face2
Dim
swFeature As SldWorks.Feature
Set
swSelMgr = swModel.SelectionManager
Set
SelectedObject = swSelMgr.GetPreSelectedObject
If
SelectionType = swSelFACES Then
Set
swFace = SelectedObject
Set
swFeature = swFace.GetFeature
Debug.Print
"Name of feature whose face you preselected: " & swFeature.Name
Debug.Print
" Select
a different face, or click Run > Reset to stop running macro..."
Debug.Print
" "
End
If
End
If
End Function
Class2 module
Public WithEvents doc As assemblyDoc
Public Function init(ByRef docIn As Object)
Set
doc = docIn
End Function
Private Function doc_UserSelectionPreNotify(ByVal
SelectionType As Long) As Long
Set
swApp = Application.SldWorks
Set
swModel = swApp.ActiveDoc
Dim
swSelMgr As SldWorks.SelectionMgr
Dim
SelectedObject As Object
Dim
swFace As SldWorks.Face2
Dim
swFeature As SldWorks.Feature
Set
swSelMgr = swModel.SelectionManager
Set
SelectedObject = swSelMgr.GetPreSelectedObject
If
SelectionType = swSelFACES Then
Set
swFace = SelectedObject
Set
swFeature = swFace.GetFeature
Debug.Print
"Name of feature whose face you preselected: " & swFeature.Name
Debug.Print
" Select
a different face, or click Run > Reset to stop running macro..."
Debug.Print
" "
End
If
End Function
Class3 module
Public WithEvents doc As drawingDoc
Public Function init(ByRef docIn As Object)
Set
doc = docIn
End Function
Private Function doc_UserSelectionPreNotify(ByVal SelectionType
As Long) As Long
If
SelectionType = swSelEDGES Then
Set
swApp = Application.SldWorks
Set
swModel = swApp.ActiveDoc
Dim
swSelMgr As SldWorks.SelectionMgr
Dim
SelectedObject As Object
Dim
swEdge As SldWorks.Edge
Dim
swBody As SldWorks.Body2
Set
swSelMgr = swModel.SelectionManager
Set
SelectedObject = swSelMgr.GetPreSelectedObject
If
SelectionType = swSelEDGES Then
Set
swEdge = SelectedObject
Set
swBody = swEdge.GetBody
Debug.Print
"Name of body whose edge you preselected: " & swBody.Name
Debug.Print
" Select
a different edge, or click Run > Reset to stop running macro..."
Debug.Print
" "
End
If
End
If
End Function