Здравствуйте.
Макрос рисует метки по краям выделенных объектов.
Если координата выделения совпадает с координатой объекта - рисуем меточку.
Проблема в том, что координаты всего выделенного sr.GetBoundingBox, по какой-то причине, не всегда совпадают с координатами объектов s.GetBoundingBox
на скрине - нормально отработавщий макрос с группой из 6 прямоугольников и тот же , но перевернутый на 90гр. блок объектов на котором макрос отработал не по всем координатам.
Помогите разобраться как избежать такого 'глюка'
Макрос рисует метки по краям выделенных объектов.
Если координата выделения совпадает с координатой объекта - рисуем меточку.
Проблема в том, что координаты всего выделенного sr.GetBoundingBox, по какой-то причине, не всегда совпадают с координатами объектов s.GetBoundingBox
на скрине - нормально отработавщий макрос с группой из 6 прямоугольников и тот же , но перевернутый на 90гр. блок объектов на котором макрос отработал не по всем координатам.
Помогите разобраться как избежать такого 'глюка'
Код:
Sub croporbox()
Dim s As Shape
Dim sr As ShapeRange
Dim X As Double, y As Double, w As Double, h As Double, xb As Double, yb As Double, wb As Double, hb As Double
ActiveDocument.Unit = cdrMillimeter
ActiveDocument.ReferencePoint = cdrCenter
Set sr = ActiveSelectionRange
sr.GetBoundingBox xb, yb, wb, hb
For Each s In sr.Shapes
s.GetBoundingBox X, y, w, h
If xb = X Then
ActiveLayer.CreateLineSegment X - 2, y, X - 4, y
ActiveLayer.CreateLineSegment X - 2, y + h, X - 4, y + h
End If
If xb + wb = X + w Then
ActiveLayer.CreateLineSegment X + w + 2, y, X + w + 4, y
ActiveLayer.CreateLineSegment X + w + 2, y + h, X + w + 4, y + h
End If
If yb = y Then
ActiveLayer.CreateLineSegment X, y - 2, X, y - 4
ActiveLayer.CreateLineSegment X + w, y - 2, X + w, y - 4
End If
If yb + hb = y + h Then
ActiveLayer.CreateLineSegment X, y + h + 2, X, y + h + 4
ActiveLayer.CreateLineSegment X + w, y + h + 2, X + w, y + h + 4
End If
Next s
End Sub