Run Interference Detection Example (C#)
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 the Immediate window.
//
// Postconditions:
// 1. Gets interfering components and transforms.
// 2. Gets interfering information.
// 3. Inspect the Immediate window.
//
// NOTE: Because the assembly is used elsewhere, do not
save changes.
//---------------------------------------------------------------------------
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("Number
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;
}
}