Get Preselected Object Example (C#)
This example shows how to get a pre-selected object when a pre-selection
event is fired.
//------------------------------------
// 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.
//----------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using System.Collections;
using System.Diagnostics;
namespace UserSelectionPreNotifyCSharp.csproj
{
partial
class SolidWorksMacro
{
public
PartDoc pDoc;
public
AssemblyDoc aDoc;
public
DrawingDoc dDoc;
public
void Main()
{
ModelDoc2
swModel;
Hashtable
openPart;
Hashtable
openAssembly;
Hashtable
openDrawing;
swModel
= (ModelDoc2)swApp.ActiveDoc;
//
Determine the document type
//
and set up event handlers
if
(swModel.GetType() == (int)swDocumentTypes_e.swDocPART)
{
pDoc
= (PartDoc)swModel;
openPart
= new Hashtable();
}
else
if (swModel.GetType() == (int)swDocumentTypes_e.swDocASSEMBLY)
{
aDoc
= (AssemblyDoc)swModel;
openAssembly
= new Hashtable();
}
else
if (swModel.GetType() == (int)swDocumentTypes_e.swDocDRAWING)
{
dDoc
= (DrawingDoc)swModel;
openDrawing
= new Hashtable();
}
AttachEventHandlers();
}
public
void AttachEventHandlers()
{
AttachSWEvents();
}
public
void AttachSWEvents()
{
if
((pDoc != null))
{
pDoc.UserSelectionPreNotify
+= this.pDoc_UserSelectionPreNotify;
}
if
((aDoc != null))
{
aDoc.UserSelectionPreNotify
+= this.aDoc_UserSelectionPreNotify;
}
if
((dDoc != null))
{
dDoc.UserSelectionPreNotify
+= this.dDoc_UserSelectionPreNotify;
}
}
private
int pDoc_UserSelectionPreNotify(int
SelectionType)
{
int
functionReturnValue = 0;
ModelDoc2
swModel;
SelectionMgr
swSelMgr;
object
SelectedObject;
Face2
swFace;
Feature
swFeature;
swModel
= (ModelDoc2)swApp.ActiveDoc;
swSelMgr
= (SelectionMgr)swModel.SelectionManager;
SelectedObject
= (object)swSelMgr.GetPreSelectedObject();
if
(SelectionType == (int)swSelectType_e.swSelFACES)
{
swFace
= (Face2)SelectedObject;
swFeature
= (Feature)swFace.GetFeature();
Debug.Print("Name
of feature whose face you preselected: " + swFeature.Name);
Debug.Print("
Mouse
over a different face, or click Debug > Stop Debugging to stop running
macro...");
Debug.Print("
");
functionReturnValue
= 1;
}
return
functionReturnValue;
}
public
int aDoc_UserSelectionPreNotify(int
SelectionType)
{
int
functionReturnValue = 0;
ModelDoc2
swModel;
SelectionMgr
swSelMgr;
object
SelectedObject;
Face2
swFace;
Feature
swFeature;
swModel
= (ModelDoc2)swApp.ActiveDoc;
swSelMgr
= (SelectionMgr)swModel.SelectionManager;
SelectedObject
= (object)swSelMgr.GetPreSelectedObject();
if
(SelectionType == (int)swSelectType_e.swSelFACES)
{
swFace
= (Face2)SelectedObject;
swFeature
= (Feature)swFace.GetFeature();
Debug.Print("Name
of feature whose face you preselected: " + swFeature.Name);
Debug.Print("
Mouse
over a different face, or click Debug > Stop Debugging to stop running
macro...");
Debug.Print("
");
functionReturnValue
= 1;
}
return
functionReturnValue;
}
private
int dDoc_UserSelectionPreNotify(int SelectionType)
{
int
functionReturnValue = 0;
ModelDoc2
swModel;
SelectionMgr
swSelMgr;
object
SelectedObject;
Edge
swEdge;
Body2
swBody;
swModel
= (ModelDoc2)swApp.ActiveDoc;
swSelMgr
= (SelectionMgr)swModel.SelectionManager;
SelectedObject
= (object)swSelMgr.GetPreSelectedObject();
if
(SelectionType == (int)swSelectType_e.swSelEDGES)
{
swEdge
= (Edge)SelectedObject;
swBody
= (Body2)swEdge.GetBody();
Debug.Print("Name
of body whose edge you preselected: " + swBody.Name);
Debug.Print("
Mouse
over a different edge, or click Debug > Stop Debugging to stop running
macro...");
Debug.Print("
");
functionReturnValue
= 1;
}
return
functionReturnValue;
}
///
<summary>
///
The SldWorks swApp variable is pre-assigned for you.
///
</summary>
public
SldWorks swApp;
}
}