This example shows how to run interference detection on an assembly.
//---------------------------------------------------------------------------
// Preconditions:
// 1. Open install_dir\samples\tutorial\advdrawings\bowl
and chute.sldasm.
// 2. Open an Immediate window.
//
// Postconditions: Inspect the Immediate window for
interference information.
//
// NOTE: Because the assembly is used elsewhere, do not
save changes to it.
//---------------------------------------------------------------------------
using
Microsoft.VisualBasic;
using
System;
using
System.Collections;
using
System.Collections.Generic;
using
System.Data;
using
System.Diagnostics;
using
SolidWorks.Interop.sldworks;
using
SolidWorks.Interop.swconst;
using
System.Runtime.InteropServices;
namespace
Interference_CSharp.csproj
{
partial
class
SolidWorksMacro
{
public
void
Main()
{
ModelDoc2 swModelDoc =
default(ModelDoc2);
AssemblyDoc swAssemblyDoc =
default(AssemblyDoc);
InterferenceDetectionMgr pIntMgr =
default(InterferenceDetectionMgr);
object[]
vInts = null;
long
i = 0;
long
j = 0;
IInterference interference =
default(IInterference);
object
vIntComps = null;
object[]
vComps = null;
Component2 comp =
default(Component2);
double
vol = 0;
object
vTrans = null;
bool
ret = false;
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;
pIntMgr.UseTransform =
true;
// 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());
// Get
interfering components and transforms
ret = pIntMgr.GetComponentsAndTransforms(
out
vIntComps, out
vTrans);
// Get
interference information
for
(i = 0; i <= vInts.GetUpperBound(0); i++)
{
Debug.Print("Interference
" + (i + 1));
interference = (
IInterference)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;
}
}