Sub TBR23OrdinateDimensionCheckOrigin()
'(VBA AutoCad)Ordinate Dimension Check Origin,[ODCO]
'Creat OD00Arr()
Dim OD00Arr() As Variant
Dim k As Integer
Dim objSelectOnScreen As AcadSelectionSet
Dim FT(0) As Integer
Dim FD(0) As Variant
FT(0) = 0: FD(0) = "DIMENSION"
Dim EachEntity As AcadDimOrdinate
Set objSelectOnScreen = Thisdrawing.SelectionSets.Add("objSelectOnScreen" & Now)
objSelectOnScreen.Select acSelectionSetAll, , , FT, FD
If objSelectOnScreen.count = 0 Then
MsgBox "No Dimension Obj"
objSelectOnScreen.Delete
Exit Sub
End If
For Each EachEntity In objSelectOnScreen
If EachEntity.ObjectName = "AcDbOrdinateDimension" Then
If Round(EachEntity.Measurement, 3) = 0 Then
ReDim Preserve OD00Arr(0 To k)
Set OD00Arr(k) = EachEntity
k = k + 1
End If
End If
Next
objSelectOnScreen.Clear
If Func70IsEmptyArray(OD00Arr) = True Then
MsgBox "No 0 Ordinate Dimension"
Exit Sub
End If
'Define XorY
Dim ODObj As AcadDimOrdinate
Dim XorY As String
Dim MinPoint As Variant
Dim MaxPoint As Variant
Dim DeltaX As Double
Dim DeltaY As Double
'Define XY0Value Arr
Dim X0Value As Double
Dim X0ValueArr() As Variant
Dim Y0Value As Double
Dim Y0ValueArr() As Variant
Dim kX As Integer
Dim kY As Integer
Dim BeforeTextPosion As Variant
Dim AfterTextPosition As Variant
Dim pi As Double: pi = 4 * Atn(1)
For i = LBound(OD00Arr) To UBound(OD00Arr)
Set ODObj = OD00Arr(i)
'Define XorY
ODObj.GetBoundingBox MinPoint, MaxPoint
DeltaX = MaxPoint(0) - MinPoint(0)
DeltaY = MaxPoint(1) - MinPoint(1)
If DeltaX >= DeltaY Then
XorY = "Y"
Else
XorY = "X"
End If
'Define XY0Value Arr
BeforeTextPosion = ODObj.TextPosition
Select Case XorY
Case "Y"
AfterTextPosition = Thisdrawing.Utility.PolarPoint(BeforeTextPosion, -pi / 2, 10000)
ODObj.TextPosition = AfterTextPosition
ODObj.GetBoundingBox MinPoint, MaxPoint
Y0Value = MaxPoint(1)
ODObj.TextPosition = BeforeTextPosion
ReDim Preserve Y0ValueArr(0 To kY)
Y0ValueArr(kY) = Y0Value
kY = kY + 1
Case "X"
AfterTextPosition = Thisdrawing.Utility.PolarPoint(BeforeTextPosion, pi, 10000)
AfterTextPosition = Thisdrawing.Utility.PolarPoint(AfterTextPosition, -pi / 2, 10000)
ODObj.TextPosition = AfterTextPosition
ODObj.GetBoundingBox MinPoint, MaxPoint
X0Value = MaxPoint(0)
ODObj.TextPosition = BeforeTextPosion
ReDim Preserve X0ValueArr(0 To kX)
X0ValueArr(kX) = X0Value
kX = kX + 1
End Select
Next
If Func70IsEmptyArray(X0ValueArr) = True Or Func70IsEmptyArray(Y0ValueArr) = True Then
MsgBox "Dont Define (0,0)"
Exit Sub
End If
Dim Point00(0 To 2) As Double
For i = LBound(X0ValueArr) To UBound(X0ValueArr)
Point00(0) = X0ValueArr(i)
For k = LBound(Y0ValueArr) To UBound(Y0ValueArr)
Point00(1) = Y0ValueArr(k)
MinPoint = Thisdrawing.Utility.PolarPoint(Point00, 5 * pi / 4, 0.01)
MaxPoint = Thisdrawing.Utility.PolarPoint(Point00, pi / 4, 0.01)
'Select Dimension
objSelectOnScreen.Select acSelectionSetCrossing, MinPoint, MaxPoint, FT, FD
If objSelectOnScreen.count > 0 Then
For Each EachEntity In objSelectOnScreen
If EachEntity.ObjectName = "AcDbOrdinateDimension" Then
EachEntity.Visible = False
End If
Next
End If
objSelectOnScreen.Clear
Next
Next
'Check have Ordinate Dimension?
Dim WrongCount As Integer
objSelectOnScreen.Select acSelectionSetAll, , , FT, FD
For Each EachEntity In objSelectOnScreen
If EachEntity.ObjectName = "AcDbOrdinateDimension" And EachEntity.Visible = True Then
EachEntity.Color = acMagenta
WrongCount = WrongCount + 1
End If
Next
For Each EachEntity In objSelectOnScreen
EachEntity.Visible = True
Next
objSelectOnScreen.Delete
MsgBox "Wrong Ordinate Dimension: " & WrongCount
End Sub