Run Interference Detection Example (C#)
This example shows how to perform interference detection on an assembly.
//----------------------------------------------------------------------------
// Preconditions:
// 1. Open:
// <SolidWorks_install_dir>\samples\tutorial\advdrawings\bowl
and chute.sldasm.
// 2. Open an Immediate Window.
// 3. Rename the namespace
of this macro to match the name of your C# project.
//
// Postconditions: Inspect the Immediate Window for interference information.
//
// NOTE: Because the
assembly is used in SolidWorks tutorials,
// do not save any changes to it.
//--------------------------------------------------------------------------
using
SolidWorks.Interop.sldworks;
using
SolidWorks.Interop.swconst;
using
System;
using
System.Diagnostics;
namespace
RunInterferenceDetection_CSharp.csproj
{
partial
class
SolidWorksMacro
{
public
void Main()
{
ModelDoc2
swModelDoc = default(ModelDoc2);
AssemblyDoc
swAssemblyDoc = default(AssemblyDoc);
InterferenceDetectionMgr
pIntMgr = default(InterferenceDetectionMgr);
Object[]
vInts = null;
Object[]
vComps = null;
IInterference
interference = default(IInterference);
Component2
comp = default(Component2);
swModelDoc = (ModelDoc2)swApp.ActiveDoc;
swAssemblyDoc = (AssemblyDoc)swModelDoc;
pIntMgr = swAssemblyDoc.InterferenceDetectionManager;
// Specify the interference
detection settings and options
pIntMgr.TreatCoincidenceAsInterference
= false;
pIntMgr.TreatSubAssembliesAsComponents =
true;
pIntMgr.IncludeMultibodyPartInterferences =
true;
pIntMgr.MakeInterferingPartsTransparent =
false;
pIntMgr.CreateFastenersFolder =
true;
pIntMgr.IgnoreHiddenBodies =
true;
pIntMgr.ShowIgnoredInterferences =
false;
//Specify how to display
non-interfering components
pIntMgr.NonInterferingComponentDisplay
= (int)swNonInterferingComponentDisplay_e.swNonInterferingComponentDisplay_Wireframe;
// Run interference detection
vInts = (object[])pIntMgr.GetInterferences();
Debug.Print("#
of interferences: " + pIntMgr.GetInterferenceCount());
// Ignore an interference
interference = (Interference)vInts[0];
interference.Ignore =
true;
// Run interference detection
again (should detect one less interference)
vInts = (object[])pIntMgr.GetInterferences();
Debug.Print("#
of interferences after one is ignored: " +
pIntMgr.GetInterferenceCount());
long
i = 0;
long
j = 0;
double
vol = 0;
for
(i = 0; i <= vInts.GetUpperBound(0); i++)
{
Debug.Print("Interference
" + (i + 1));
interference = (Interference)vInts[i];
Debug.Print("Number
of components in this interference: " +
interference.GetComponentCount());
vComps = (object[])interference.Components;
for
(j = 0; j <= vComps.GetUpperBound(0); j++)
{
comp = (Component2)vComps[j];
Debug.Print("
" + comp.Name2);
}
vol = interference.Volume;
Debug.Print("Interference
volume is " + (vol * 1000000000) +
" mm^3");
}
// Stop interference detection
pIntMgr.Done();
}
public
SldWorks
swApp;
}
}