Да, докер открывается, спасибоApplication.FrameWork.Automation.InvokeItem "ce73460f-ccd3-75a5-427a-0b5e757a642a"
Дичь какая то...sr(1).Curve.Nodes.ALL.Application.FrameWork

причем с вариантами ...Да, докер открывается, спасибо
InvokeItem нельзя давать аргументом обьекты. Но можно выделять обьекты перед его запуском.Я просто плохо понимаю InvokeItem "".
Если можно было сделать то, что делает докер Join Curve(chamfer), только в цикле макроса . Ну то есть по очереди перебирать шейпы (состоящие из отрезков, скомбинированные) и соединять их (с запасом взять радиус+ -).
Я не знаю, как я упустил этот код или сейчас просто сейчас увеличил tol = 1000, но самое главное, это работает!!!!!!!Так вы вот этот вариант пробовали или нет?
вы же только учтите что там единицы документа стоят миллиметры.Я не знаю, как я упустил этот код или сейчас просто сейчас увеличил tol = 1000, но самое главное, это работает!!!!!!!
Спасибо вам большое! всем спасибо за помощь!
Обязательно разберусь в этом коде!
Мы не знаем, какого размера у него кривые и что он вообще делает. Допуск в любом случае придется настраивать/подгонятьвы же только учтите что там единицы документа стоят миллиметры.
если вы делаете tol = 1000 он будет искать в радиусе 1 метра.
ActiveDocument.Unit = cdrMillimeter
Dim sr As ShapeRange
Dim s As Shape
Dim crv As Curve
Dim sp As SubPath
Dim nodes() As Node
Dim used() As Boolean
Dim nCount As Long
Dim i As Long, j As Long
Dim dx As Double, dy As Double, d As Double
Dim bestD As Double, bestJ As Long
Dim bridges As New ShapeRange
Dim bridge As Shape
Dim numSubPath_i As Long
Dim numSubPath_j As Long
Set sr = ActiveSelectionRange
nCount = 0
For Each sp In sr(1).Curve.SubPaths
nCount = nCount + 2
ReDim Preserve nodes(1 To nCount)
ReDim Preserve used(1 To nCount)
Set nodes(nCount - 1) = sp.StartNode
Set nodes(nCount) = sp.EndNode
used(nCount - 1) = False
used(nCount) = False
Next sp
For i = 1 To nCount
numSubPath_i = nodes(i).SubPath.Index
If Not used(i) Then
bestD = 1E+30
bestJ = 0
For j = 1 To nCount
numSubPath_j = nodes(j).SubPath.Index
If j <> i And Not used(j) And numSubPath_i <> numSubPath_j Then
dx = nodes(j).PositionX - nodes(i).PositionX
dy = nodes(j).PositionY - nodes(i).PositionY
d = Sqr(dx * dx + dy * dy)
If d < bestD Then
bestD = d
bestJ = j
End If
End If
Next j
If bestJ > 0 Then
used(i) = True
used(bestJ) = True
Set bridge = ActiveLayer.CreateLineSegment( _
nodes(i).PositionX, nodes(i).PositionY, _
nodes(bestJ).PositionX, nodes(bestJ).PositionY)
bridges.Add bridge
End If
End If
Next i
If bridges.Count > 0 Then
bridges.Add sr(1)
Set s = bridges.Combine
s.Curve.JoinTouchingSubpaths True, 0.1
End If
Application.Refresh