[CDR X5-X8] Ошибка при выполнении BreakApartAt

SeYV1970

Участник
Топикстартер
Сообщения
15
Реакции
0
Имеется код

Dim iOfset As Double, oSeg As Segment, oNodeB As Node
Set oSeg = oShape.Curve.FindSegmentAtPoint(X, Y, iOfset) ' Сегмет и офсет по координатам
If oSeg Is Nothing Then Exit Sub
Set oNodeB = oSeg.BreakApartAt(iOfset, cdrRelativeSegmentOffset) ' Разделить сегмент

В некоторых случаях делит ВСЕ сегметы кривой.
Так и не смог понять из-за чего происходит

Вставил

oSeg.EndNode.Move 0, 10
oSeg.EndNode.Move 0, -10
' Перед
Set oNodeB = oSeg.BreakApartAt(iOfset, cdrRelativeSegmentOffset) ' Разделить сегмент

Заработало
 
По хелпу: Function FindSegmentAtPoint(x As Double, y As Double, ParamOffset As Double, [HotArea As Double = -1]) As Segment мы получаем ParamOffset
А далее Вы используете BreakApartAt(iOfset, cdrRelativeSegmentOffset), вместо cdrParamSegmentOffset
Заодно и рвёте сегмент несколько не в том месте, которое было получено функцией FindSegmentAtPoint
В моём опыте точки не совпали, впрочем, как и ожидалось.
 
Спасибо за уточнение не обратил внимание, но
как ни странно у меня работает и разрывает там где надо, ну может сдвигает, но не существенно
Но и это не главное.
В процессе поиска я исправлял на cdrParamSegmentOffset, не помогло, все равно делит ВСЕ сегменты
Тут как-то зависит от кривой(фигуры) т.к. обрабатывает файлы внешне одинаковые, но работает по разному.
Пару месяцев проблем не было, при этом с макросом работают не ежедневно, но и не раз в неделю
Файлы для обработки формируются экспортом из *.plt, которые формируются программой построения лекал Julivi

Были предположения, что это из-за того, что фигура при разрыве находится в группе. Делал проверку и при необходимости разгруппировку, но не помогло.