There are codes that allow you to use lisp to access the dxf codes for this. I use vbassoc as it is easy to follow. You would think they could have included the api by now, but no.
The points you want are defined in the *d block but you need dxf to find which *d block you need.
[code]
Option Explicit
Private VL
Function ParseDxfPoint(DxfPoint)
Dim Pt(2) As Double
Dim Gap1, Gap2
Gap1 = InStr(2, DxfPoint, " ", vbTextCompare)
Pt(0) = Mid(DxfPoint, 2, Gap1 - 1)
Gap2 = InStr(Gap1 + 1, DxfPoint, " ", vbTextCompare)
Pt(1) = Mid(DxfPoint, Gap1 + 1, Gap2 - (Gap1 + 1))
Pt(2) = Mid(DxfPoint, Gap2 + 1, Len(DxfPoint) - (Gap2 + 1))
ParseDxfPoint = Pt
End Function
Function GetVl() As Object
Dim VLisp As Object
Select Case AcadVer
Case Is < 2006
Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.1")
Case 2006
Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.16")
Case Else
Set VLisp = ThisDrawing.Application.GetInterfaceObject("VL.Application.16")
End Select
Set GetVl = VLisp
End Function
'SomeCallMeDave
'http://www.vbdesign.net/expresso/showthread.php?postid=83887#post83887
'Changed pAcadObj As AcadObject to pAcadObj As Object to access imagedef as well
'Modified by Jeff Mishler, March 2006, to get the Block table object, not Block_Record table object
Public Function vbAssoc(pAcadObj, pDXFCode As Integer) As Variant
Dim VLisp As Object
Dim VLispFunc As Object
Dim varRetVal As Variant
Dim obj1 As Object
Dim obj2 As Object
Dim strHnd As String
Dim strVer As String
Dim lngCount As Long
Dim i As Long
Dim j As Long
On Error GoTo vbAssocError
Set VLisp = GetVl
Set VLispFunc = VLisp.ActiveDocument.Functions
If Not TypeOf pAcadObj Is AcadBlock Then
strHnd = pAcadObj.Handle
Else
Dim lispStr As String
lispStr = "(cdr (assoc 5 (entget (tblobjname " & Chr(34) & "Block" & Chr(34) & Chr(34) & pAcadObj.Name & Chr(34) & "))))"
Set obj1 = VLispFunc.Item("read").Funcall(lispStr)
strHnd = VLispFunc.Item("eval").Funcall(obj1)
End If
Set obj1 = VLispFunc.Item("read").Funcall("pDXF")
varRetVal = VLispFunc.Item("set").Funcall(obj1, pDXFCode)
Set obj1 = VLispFunc.Item("read").Funcall("pHandle")
varRetVal = VLispFunc.Item("set").Funcall(obj1, strHnd)
Set obj1 = VLispFunc.Item("read").Funcall("(vl-princ-to-string (cdr (assoc pDXF (entget (handent pHandle)))))")
varRetVal = VLispFunc.Item("eval").Funcall(obj1)
vbAssoc = varRetVal
'clean up the newly created LISP symbols
Set obj1 = VLispFunc.Item("read").Funcall("(setq pDXF nil)")
varRetVal = VLispFunc.Item("eval").Funcall(obj1)
Set obj1 = VLispFunc.Item("read").Funcall("(setq pHandle nil)")
varRetVal = VLispFunc.Item("eval").Funcall(obj1)
'release the objects or Autocad gets squirrely (no offense RR)
Set obj2 = Nothing
Set obj1 = Nothing
Set VLispFunc = Nothing
Set VLisp = Nothing
Exit Function
vbAssocError:
Set obj2 = Nothing
Set obj1 = Nothing
Set VLispFunc = Nothing
Set VLisp = Nothing
MsgBox "Error occurred " & Err.Description
End Function
Public Function DimRotation(objDim As AcadDimension, varPick As Variant)
'code(10)=cross point rhs of text,arrow2
'code(11)= text insertpt
'code(13) =Dimstartpt-extendline1
'code(14) =DimEndpt-extendline2
Dim dblRot As Double
Dim dblStartToVarPickAng As Double, dblEndAng As Double
Dim dblEndToVarPickAng As Double
Dim startPt, endPt, arrow2Pt
Dim varTest As Variant, Ppt, x(1)
With ThisDrawing.Utility
'dblRot = vbAssoc(objDim, 50)
varTest = vbAssoc(objDim, 10)
arrow2Pt = ParseDxfPoint(varTest)
varTest = vbAssoc(objDim, 13)
startPt = ParseDxfPoint(varTest)
varTest = vbAssoc(objDim, 14)
endPt = ParseDxfPoint(varTest)
dblEndAng = .AngleFromXAxis(endPt, arrow2Pt)
x(1) = dblEndAng - 0.5 * pi
Dim dblDist As Double
dblDist = objDim.ExtensionLineExtend * objDim.ScaleFactor
Ppt = .PolarPoint(arrow2Pt, dblEndAng, dblDist)
dblStartToVarPickAng = .AngleFromXAxis(startPt, varPick)
If dblStartToVarPickAng > (2 * pi) - 0.001 Then
dblStartToVarPickAng = dblStartToVarPickAng - 2 * pi
End If
dblEndToVarPickAng = .AngleFromXAxis(endPt, varPick)
If dblEndToVarPickAng > (2 * pi) - 0.001 Then
dblEndToVarPickAng = dblEndToVarPickAng - 2 * pi
End If
If Abs(dblStartToVarPickAng - dblEndAng) _
< Abs(dblEndToVarPickAng - dblEndAng) Then
dblRot = dblEndAng + 0.5 * pi * isLeft(endPt, arrow2Pt, startPt) 'function
Ppt = .PolarPoint(Ppt, dblRot, objDim.Measurement)
End If
x(0) = Ppt
DimRotation = x
End With
[/code]