Getting the location of display dimension lines in a drawing

I'm working on some drawing automation, and I need to reference the location of display dimension witness lines and dimension arrows. I've been using ModelDocExtension::AlignDimensions to do the bulk of the sorting of dimensions on drawings, but this method isn't consistent enough for automation. For example, I'm still having trouble with dimension text being placed on top of witness lines, or centered between witness lines that are too close together for the text to fit between, not to mention the hijinks that arclength or radius dimensions get into.

DisplayDimension text location is easy; but I think I might have hit the wall looking for the reference lines. It looks like Dimension::referencepoints might provide some clues, but I think I'm doing something wrong when I try to get each of the reference points. For example, there will be n points returned, and when I attempt to return referencepoints(n), the arraydata all return 0.

Or, am I overlooking a better way to return these values? For the moment, I'm stuck doing this in VBA, but if I need to do this in .net or C++, I'll find a way.

Option Explicit

Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim swDrawing As SldWorks.DrawingDoc

Dim swView As SldWorks.view

Dim swDispDim As SldWorks.DisplayDimension

Dim swDim As SldWorks.dimension

Dim swPoint As SldWorks.MathPoint

Dim swMath As SldWorks.MathUtility

Dim refpoints As Variant

Dim i As Integer

Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

Set swDrawing = swModel

Set swView = swDrawing.GetFirstView

Set swMath = swApp.GetMathUtility

Debug.Print String(255, vbNewLine)

Do While Not swView Is Nothing

    If swView.GetVisible Then

    Set swDispDim = swView.GetFirstDisplayDimension5

        Do While Not swDispDim Is Nothing

            Set swDim = swDispDim.GetDimension2(0)

            Debug.Print "Dimension name: " & swDim.GetNameForSelection

            Debug.Print "Reference points count: " & swDim.GetReferencePointsCount

            For i = 0 To swDim.GetReferencePointsCount - 1

                Set swPoint = swMath.CreatePoint(swDim.referencepoints(i)) ' this doesn't produce any errors, but isn't the right way

                Debug.Print swPoint.ArrayData(0) & "   " & swPoint.ArrayData(1) & "   " & swPoint.ArrayData(2) ' these all return as 0

            Next i

            Set swPoint = swMath.CreatePoint(swDim.referencepoints)

            Debug.Print swPoint.ArrayData(0) & "   " & swPoint.ArrayData(1) & "   " & swPoint.ArrayData(2) ' this returns nonzero values

            Set swDispDim = swDispDim.GetNext5

            Debug.Print vbNewLine

        Loop

    End If

    Set swView = swView.GetNextView

Loop

End Sub

SolidworksApi macros