Get Sketch Contours (C#)
This example shows how to get the sketch contours in a model document.
//----------------------------------------------------------------------------
// Preconditions: Model document open and contains a Sketch1 feature.
//
// Postconditions: None
//----------------------------------------------------------------------------
using
SolidWorks.Interop.sldworks;
using
SolidWorks.Interop.swconst;
using
System.Runtime.InteropServices;
using
System;
using
System.Diagnostics;
namespace
SelectSketchContour_CSharp.csproj
{
partial
class
SolidWorksMacro
{
public
void Main()
{
ModelDoc2
myModel = default(ModelDoc2);
PartDoc
myPart = default(PartDoc);
SelectionMgr
SelMgr = default(SelectionMgr);
SelectData
mySelectData = default(SelectData);
Feature
myFeature = default(Feature);
Sketch
mySketch = default(Sketch);
int
contourCount = 0;
object[]
vSkContours = null;
SketchContour
skContour = default(SketchContour);
object[]
vEdges = null;
Edge
myEdge = default(Edge);
int
skSegCount = 0;
object[]
vSkSegments = null;
SketchSegment
skSegment = default(SketchSegment);
int
skSegType = 0;
string
skSegTypesString = null;
bool
closed = false;
string
closedString = null;
int
i = 0;
int
j = 0;
int
k = 0;
bool
boolstatus = false;
myModel = (ModelDoc2)swApp.ActiveDoc;
SelMgr = (SelectionMgr)myModel.SelectionManager;
mySelectData = (SelectData)SelMgr.CreateSelectData();
myPart = (PartDoc)myModel;
myFeature = (Feature)myPart.FeatureByName("Sketch1");
mySketch = (Sketch)myFeature.GetSpecificFeature2();
// or
// Set
mySketch = myModel.GetActiveSketch2()
// Set
myFeature = mySketch
if
((mySketch != null))
{
vSkContours = (object[])mySketch.GetSketchContours();
contourCount = vSkContours.GetUpperBound(0) -
vSkContours.GetLowerBound(0) + 1;
Debug.Print("");
Debug.Print(contourCount
+ " Contours in sketch "
+ myFeature.Name);
for
(i = vSkContours.GetLowerBound(0); i <= vSkContours.GetUpperBound(0); i++)
{
skContour = (SketchContour)vSkContours[i];
if
((skContour != null))
{
closed = skContour.IsClosed();
if
((closed == false))
{
closedString =
"Open";
}
else
{
closedString =
"Closed";
}
Debug.Print(" Contour
" + i +
": " + closedString);
vSkSegments = (object[])skContour.GetSketchSegments();
skSegCount = vSkSegments.GetUpperBound(0) -
vSkSegments.GetLowerBound(0) + 1;
for
(j = vSkSegments.GetLowerBound(0); j <= vSkSegments.GetUpperBound(0); j++)
{
if
(j == vSkSegments.GetLowerBound(0))
{
skSegTypesString =
"(";
}
skSegment = (SketchSegment)vSkSegments[j];
if
((skSegment != null))
{
skSegType = skSegment.GetType();
switch
(skSegType)
{
case
(int)swSketchSegments_e.swSketchLINE:
skSegTypesString = skSegTypesString
+ "line";
break;
case
(int)swSketchSegments_e.swSketchARC:
skSegTypesString = skSegTypesString
+ "arc";
break;
case
(int)swSketchSegments_e.swSketchELLIPSE:
skSegTypesString = skSegTypesString
+ "ellipse";
break;
case
(int)swSketchSegments_e.swSketchPARABOLA:
skSegTypesString = skSegTypesString
+ "parabola";
break;
case
(int)swSketchSegments_e.swSketchSPLINE:
skSegTypesString = skSegTypesString
+ "spline";
break;
case
(int)swSketchSegments_e.swSketchTEXT:
skSegTypesString = skSegTypesString
+ "text";
break;
case
-1:
skSegTypesString = skSegTypesString
+ "unknown";
break;
}
}
if
(j == vSkSegments.GetUpperBound(0))
{
skSegTypesString = skSegTypesString +
")";
}
else
{
skSegTypesString = skSegTypesString +
",";
}
}
Debug.Print(" Sketch
segment count = " + skSegCount +
" " +
skSegTypesString);
vEdges = (object[])skContour.GetEdges();
if
((vEdges == null))
{
Debug.Print(" No
edges.");
}
else
{
for
(k = vEdges.GetLowerBound(0); k <= vEdges.GetUpperBound(0); k++)
{
myEdge = (Edge)vEdges[k];
if
((myEdge != null))
{
Debug.Print(" Edge
" + k +
": ");
}
}
}
boolstatus = skContour.Select2(false,
mySelectData);
if
(boolstatus == false)
{
Debug.Print(" Selection
of contour failed.");
}
System.Diagnostics.Debugger.Break();
}
}
}
}
public
SldWorks
swApp;
}
}