Share

3D Curve from Parametric Curve

Description

Demonstrates the conversion of a 2d parameteric space curve into the equivalent 3d model space curve. To use this sample you must have a part open. You can select any face and 3D curves will be drawn on the face using client graphics.

Code Samples

To use this sample a part must be active.
Public Sub ParamCurveto3D()
    ' Have the user select a face whose parametric space will be used.
    Dim testFace As Face
    Set testFace = ThisApplication.CommandManager.Pick(kPartFaceFilter, "Select a face")
    
    ' Get the surface evaluator from the face.
    Dim surfEval As SurfaceEvaluator
    Set surfEval = testFace.Evaluator
    
    ' Get the parametric range of the face.
    Dim paramRange As Box2d
    Set paramRange = surfEval.ParamRangeRect
    
    ' Get the transient geometry object.
    Dim tg As TransientGeometry
    Set tg = ThisApplication.TransientGeometry
    
    ' Get the active document.  This assumes a part is active.
    Dim partDoc As PartDocument
    Set partDoc = ThisApplication.ActiveDocument
    
    ' Create a client graphics object.  If one already exists, give the user
    ' the option of re-using it, or creating a new one.
    Dim graphics As ClientGraphics
    On Error Resume Next
    Set graphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Item("Test")
    If Err Then
        Set graphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Add("Test")
    Else
        If MsgBox("Yes to add to existing graphics. No to start over.", vbYesNo + vbQuestion) = vbNo Then
            graphics.Delete
            
            Set graphics = partDoc.ComponentDefinition.ClientGraphicsCollection.Add("Test")
        End If
    End If
    
    ' Create a new graphics node.
    Dim node As GraphicsNode
    Set node = graphics.AddNode(1)

    ' Do a loop that creates 5 lines that go from the minimum range point to
    ' five points along the maximum u parameter.
    Dim startPnt As Point2d
    Set startPnt = paramRange.MinPoint
    Dim endPnt As Point2d
    Dim i As Integer
    For i = 1 To 5
        ' Create the 2d line in parametric space.
        Set endPnt = tg.CreatePoint2d(paramRange.MaxPoint.X, (((paramRange.MaxPoint.y - paramRange.MinPoint.y) / 4) * (i - 1)) + paramRange.MinPoint.y)
        Dim surfCurve As LineSegment2d
        Set surfCurve = tg.CreateLineSegment2d(startPnt, endPnt)
        
        ' Get the equivalent 3d curve in model space.
        Dim resultCurve As Object
        Set resultCurve = surfEval.Get3dCurveFrom2dCurve(surfCurve)
        
        ' Create client graphics for this curve.
        Dim crvGraphics As CurveGraphics
        Set crvGraphics = node.AddCurveGraphics(resultCurve)
        crvGraphics.DepthPriority = 2
    Next
    
    ' Create a 2d circle in parametric space.
    Dim center As Point2d
    Set center = tg.CreatePoint2d((paramRange.MaxPoint.X + paramRange.MinPoint.X) / 2, (paramRange.MaxPoint.y + paramRange.MinPoint.y) / 2)
    Dim radius As Double
    radius = (paramRange.MaxPoint.X - paramRange.MinPoint.X) * 0.25
    Dim paramCircle As Circle2d
    Set paramCircle = tg.CreateCircle2d(center, radius)
    
    ' Get the equivalent 3d curve in model space.
    Set resultCurve = surfEval.Get3dCurveFrom2dCurve(paramCircle)
    
    ' Create client graphics for this curve.
    Set crvGraphics = node.AddCurveGraphics(resultCurve)
    crvGraphics.DepthPriority = 2
        
    ThisApplication.ActiveView.Update
    ThisApplication.ActiveView.Fit
End Sub


Was this information helpful?