Share

Offset a 2D sketch

Description

This sample demonstrates the creation of offsets in 2d sketches. Two ways of creating the offset are shown - one uses a distance and the other uses the input point.

Code Samples

Public Sub Offset()
    ' Check to make sure a sketch is open.
    If Not Typeof ThisApplication.ActiveEditObject Is PlanarSketch Then
        MsgBox "A sketch must be active."
        Exit Sub
    End If

    ' Set a reference to the active sketch.
    Dim oSketch As PlanarSketch
    Set oSketch = ThisApplication.ActiveEditObject

    ' Set a reference to the transient geometry collection.
    Dim oTransGeom As TransientGeometry
    Set oTransGeom = ThisApplication.TransientGeometry

    ' Create a rectangle
    Dim oRectangleLines As SketchEntitiesEnumerator
    Set oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle( _
                                                oTransGeom.CreatePoint2d(0, 0), _
                                                oTransGeom.CreatePoint2d(10, -10))
                                                
    ' Create a new object collection
    Dim oCollection As ObjectCollection
    Set oCollection = ThisApplication.TransientObjects.CreateObjectCollection
    
    ' Add the first sketch line of the rectangle to the collection
    oCollection.Add oRectangleLines.Item(1)
    
    ' Create a point at (0,3). The entity resulting
    ' from the offset of the first sketch line must
    ' pass thru this point.
    Dim oOffsetPoint As Point2d
    Set oOffsetPoint = oTransGeom.CreatePoint2d(0, 3)
    
    ' Create an offset rectangle using the offset point.
    Call oSketch.OffsetSketchEntitiesUsingPoint(oCollection, oOffsetPoint, True)
    
    ' Get the sketch normal
    Dim oNormalVector As UnitVector
    Set oNormalVector = oSketch.PlanarEntityGeometry.Normal
    
    ' Get the direction of the sketch line being offset
    Dim oLineDir As UnitVector2d
    Set oLineDir = oRectangleLines.Item(1).Geometry.Direction
    
    Dim oLineVector As UnitVector
    Set oLineVector = oTransGeom.CreateUnitVector(oLineDir.X, oLineDir.Y, 0)
    
    ' The cross product of these vectors is the
    ' natural offset direction for the sketch line.
    Dim oOffsetVector As UnitVector
    Set oOffsetVector = oLineVector.CrossProduct(oNormalVector)
    
    ' Get the desired offset vector (the +ve y-axis)
    Dim oDesiredVector As UnitVector
    Set oDesiredVector = oTransGeom.CreateUnitVector(0, 1, 0)
    
    Dim bNaturalOffsetDir As Boolean
    
    If oOffsetVector.IsEqualTo(oDesiredVector) Then
        bNaturalOffsetDir = True
    Else
        bNaturalOffsetDir = False
    End If
    
    ' Create an offset at a distance of 6 cms.
    Call oSketch.OffsetSketchEntitiesUsingDistance(oCollection, 6, bNaturalOffsetDir, True)
End Sub


Was this information helpful?