Get Sketch Segment and Curve Data Example (VB)
This example shows how to get data about a sketch segment and curve.
'---------------------------------------------
'
' Preconditions:
' (1) Model document is open.
' (2) Sketch segment is selected.
'
' Postconditions: None
'
'---------------------------------------------
Option Explicit
Public Enum swSkSegments_e
swSketchLINE = 0
swSketchARC = 1
swSketchELLIPSE = 2
swSketchSPLINE = 3
swSketchTEXT = 4
swSketchPARABOLA = 5
End Enum
' Define two types
Type DoubleRec
dValue As Double
End Type
Type Long2Rec
iLower As Long
iUpper As Long
End Type
' Extract two integer values from of a single double value
' by assigning a DoubleRec to the double value and
' copying the value to a Long2Rec and
' extracting the integer values
Function ExtractFields _
( _
ByVal dValue As Double, _
iLower As Long, _
iUpper As Long _
)
Dim dr As DoubleRec
Dim i2r As Long2Rec
' Set the double value
dr.dValue = dValue
' Copy the values
LSet i2r = dr
' Extract the values
iLower = i2r.iLower
iUpper = i2r.iUpper
End Function
Sub ProcessCurve _
( _
swApp As SldWorks.SldWorks, _
swModel As SldWorks.ModelDoc2, _
swCurve As SldWorks.curve _
)
Dim nStartParam As Double
Dim nEndParam As Double
Dim bIsClosed As Boolean
Dim bIsPeriodic As Boolean
Dim vStartEval As Variant
Dim vEndEval As Variant
Dim nSuccessStart As Long
Dim nEndStart As Long
Dim nDummy As Long
Dim bRet As Boolean
bRet = swCurve.GetEndParams(nStartParam, nEndParam, bIsClosed, bIsPeriodic): Debug.Assert bRet
vStartEval = swCurve.Evaluate(nStartParam)
vEndEval = swCurve.Evaluate(nEndParam)
ExtractFields vStartEval(6), nSuccessStart, nDummy
ExtractFields vEndEval(6), nEndStart, nDummy
Debug.Print " IsClosed = " & bIsClosed
Debug.Print " IsPeriodic = " & bIsPeriodic
Debug.Print " IsTrimmed = " & swCurve.IsTrimmedCurve
Debug.Print " Start"
Debug.Print " Point = (" & vStartEval(0) * 1000# & ", " & vStartEval(1) * 1000# & ", " & vStartEval(2) * 1000# & ") mm"
Debug.Print " Tangent = (" & vStartEval(3) & ", " & vStartEval(4) & ", " & vStartEval(5) & ")"
Debug.Print " Success = " & nSuccessStart
Debug.Print " Finish"
Debug.Print " Point = (" & vEndEval(0) * 1000# & ", " & vEndEval(1) * 1000# & ", " & vEndEval(2) * 1000# & ") mm"
Debug.Print " Tangent = (" & vEndEval(3) & ", " & vEndEval(4) & ", " & vEndEval(5) & ")"
Debug.Print " Success = " & nEndStart
End Sub
Sub main()
Dim sSkSegmentsName(5) As String
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swSkSeg As SldWorks.SketchSegment
Dim swCurve As SldWorks.curve
Dim swSkFeat As SldWorks.feature
Dim swSketch As SldWorks.sketch
Dim vID As Variant
Dim bRet As Boolean
sSkSegmentsName(swSketchLINE) = "swSketchLINE"
sSkSegmentsName(swSketchARC) = "swSketchARC"
sSkSegmentsName(swSketchELLIPSE) = "swSketchELLIPSE"
sSkSegmentsName(swSketchSPLINE) = "swSketchSPLINE"
sSkSegmentsName(swSketchTEXT) = "swSketchTEXT"
sSkSegmentsName(swSketchPARABOLA) = "swSketchPARABOLA"
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swSkSeg = swSelMgr.GetSelectedObject5(1)
Set swCurve = swSkSeg.GetCurve
Set swSkFeat = swSkSeg.GetSketch
Set swSketch = swSkFeat.GetSpecificFeature
vID = swSkSeg.GetId
Debug.Print "Feature = " & swSkFeat.Name & " [" & swSketch.Is3D & "]"
Debug.Print " Sketch segment data"
Debug.Print " ID = [" & vID(0) & "," & vID(1) & "]"
Debug.Print " Type = " & sSkSegmentsName(swSkSeg.GetType)
Debug.Print " ConstGeom = " & swSkSeg.ConstructionGeometry
Debug.Print " Curve data"
ProcessCurve swApp, swModel, swCurve
End Sub
'--------------------------------------------- |