Sub interpolation_CW() 'круговая интерполяция по часовой стрелке
Dim firstPoint As Variant
Dim secondPoint As Variant
Dim freePoint As Variant
Dim str_MLeaderLine As String
Dim Leader As Variant
Dim N As Long '(назначение не понятно)
Dim vector(2) As Double ' расположение текста относительно выноски
'N = MLeaderDictionary.Count
firstPoint = ThisDrawing.Utility.GetPoint(, "Укажите центр окружности: ")
secondPoint = ThisDrawing.Utility.GetPoint(firstPoint, "Укажите расположение выноски: ")
'// Массив координат (2 точки MLeader, следовательно 6 элементов в массиве)
Dim V(0 To 5) As Double
V(0) = firstPoint(0)
V(1) = firstPoint(1)
V(2) = firstPoint(2)
V(3) = secondPoint(0)
V(4) = secondPoint(1)
V(5) = secondPoint(2)
str_MLeaderLine = Replace("I= " & Round(firstPoint(0) - XZero, 4) & " / J= " & Round(firstPoint(1), 4) - YZero, ",", ".")
'// Добавляем MLeader. Если мы хотим добавить MLeader с текстом, то текущим
'// стилем должен быть стиль у которого контент настроен на MText
Set Leader = ThisDrawing.ModelSpace.AddMLeader(V, N)
'// Настраиваем свойства
Leader.TextString = str_MLeaderLine '// собственно текст (может быть многострочным)
Leader.ArrowheadType = acArrowDefault '// обычная залитая стрелка
Leader.ArrowheadSize = 2 '// длина стрелки
'Leader.DogLegged = False '// без горизонтальной полки
'Leader.DoglegLength = 0 '// длина полки = 0
Leader.LandingGap = 2 '// отступ текста от полки по-горизонтали
'// Подчеркиваем 1-ю строку текста - получается как бы текст над полкой
' Leader.TextLeftAttachmentType = acAttachmentMiddle
' Leader.TextRightAttachmentType = acAttachmentPointMiddleCenter
Leader.TextFrameDisplay = False '// текст без рамки
Leader.TextBackgroundFill = False '// текст без заливки фона
Leader.TextDirection = acLeftToRight '// текст слева-направо
Leader.TextHeight = 3.5 '// высота текста
Leader.TextWidth = 0 '// ширина текста (используется для переноса текста по словам)
Leader.TextJustify = acAttachmentPointBottomCenter '// выравнивание текста
' Управляем тем, с какой стороны будет расположен текст выноски
If firstPoint(0) > secondPoint(0) Then
vector(0) = -1
Else
vector(0) = 1
End If
Leader.SetDoglegDirection 0, vector
freePoint = ThisDrawing.Utility.GetPoint(secondPoint, "Укажите конец окружности: ")
'// Массив координат для второй выноски
V(0) = freePoint(0)
V(1) = freePoint(1)
V(2) = freePoint(2)
'// Добавляем вторую выноску в нулевой кластер
'Call Leader.AddLeaderLine(0, V)
Dim r As Long
r = Leader.AddLeader()
'// Добавляем вторую выноску в новый кластер
Call Leader.AddLeaderLine(r, V)
str_MLeaderLine = Replace("I= " & Round(firstPoint(0) - XZero, 4) & " / J= " & Round(firstPoint(1), 4) - YZero & "\PX= " & Round(freePoint(0) - XZero, 4) & " / Y= " & Round(freePoint(1), 4) - YZero, ",", ".")
'// Настраиваем свойства
Leader.TextString = str_MLeaderLine '// собственно текст (может быть многострочным)
Leader.ArrowheadType = acArrowDefault '// обычная залитая стрелка
Leader.ArrowheadSize = 2 '// длина стрелки
'Leader.DogLegged = False '// без горизонтальной полки
'Leader.DoglegLength = 0 '// длина полки = 0
Leader.LandingGap = 2 '// отступ текста от полки по-горизонтали
'// Подчеркиваем 1-ю строку текста - получается как бы текст над полкой
' Leader.TextLeftAttachmentType = acAttachmentMiddle
' Leader.TextRightAttachmentType = acAttachmentPointMiddleCenter
Leader.TextFrameDisplay = False '// текст без рамки
Leader.TextBackgroundFill = False '// текст без заливки фона
Leader.TextDirection = acLeftToRight '// текст слева-направо
Leader.TextHeight = 3.5 '// высота текста
Leader.TextWidth = 0 '// ширина текста (используется для переноса текста по словам)
Leader.TextJustify = acAttachmentPointBottomLeft '// выравнивание текста
' Управляем тем, с какой стороны будет расположен текст выноски
If firstPoint(0) > secondPoint(0) Then
vector(0) = -1
Else
vector(0) = 1
End If
Leader.SetDoglegDirection 0, vector
end sub