[CDR X5-X8] помогите с GetIntersections(SubPaths)

Статус
Закрыто для дальнейших ответов.

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
пишу код типа

Код:
Set SubPathLinia = lina.Curve.SubPaths(1)
Set SubPathVaza = Vaza.Curve.SubPaths(1)
Set peresechenie = SubPathVaza.GetIntersections(SubPathLinia)

для corel`a, при проходе результата в peresechenie нет, хотя при отрисовке явно видно, что они пересекаются, ну.

ps подскажите, пожалуйста, что я делаю не так, и что курить, чтобы получить координаты пересечения?

pps vba осваиваю меньше недели, поэтому можно прямо тыкать носом в глупые вещи
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
А можно скриншот глянуть?
Вы уверены, что GetIntersections возвращает именно часть сегмента, а не точки сегмента, попадающие в пересечение? В доке ведь сказано
The GetIntersections method finds all points of intersection between two segments.
 

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
Вы уверены, что GetIntersections возвращает именно часть сегмента
Вообще ни в чем не уверен, только пробую vba:)

скрины листа и часиков приложил, lina рисуется в цикле, код естественно тоже внутри цикла
 

Вложения

  • maket.jpg
    maket.jpg
    214.7 КБ · Просм.: 917
  • watch.jpg
    watch.jpg
    55.5 КБ · Просм.: 885

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
неужели нет ответа на такие фокусы от vba?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Не знаю, сейчас проверил, у меня похожий вариант работает:
Код:
Sub tst()
Set Sel = ActiveSelectionRange
Set peresechenie = Sel(1).Curve.SubPaths(1).GetIntersections(Sel(2).Curve.SubPaths(1))
a = peresechenie.Count
End Sub
upload_2016-3-29_13-33-34.png

Значит проблема в чем то другом.
 

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
Проблема все же во мне) я делал без "Set Sel = ActiveSelectionRange". Сейчас попробовал руками выбрать кривую и отрезок - точка упала в переменную. Спасибо большое) Теперь вопрос-как выделить отрезок программно?*[[
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Ну на самом деле выделять вовсе не обязательно. Это я для примера выделенные отрезки попробовал на пересечение, чтобы удобно было, но можно же просто перебирать все шейпы на активном слое или как вам надо?
 

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
да, так и нужно. Смысл в том, чтобы укоротить отрезки до уровня кривой. Может быть я извращаюсь, но по-другому не придумал
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Тогда покажите более полный код, раз уже разобрались что ошибка не в топикстартовых трех строках
 

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
Блин, пытался напрямую через
Код:
peresechenie =ActivePage.Layers("Vneshniy").Shapes(1).Curve.SubPaths(1).GetIntersections(ActivePage.Layers("Vneshniy").Shapes(2).Curve.SubPaths(1))
но не хочет! Придется, похоже, с выделением мучаться. Вот код:

Код:
'polosi
    For Position = 130 To edVis - NizOtstup + 1 Step ShirinaPolos
   
    Dim lina As Shape
    Set lina = ActiveLayer.CreateLineSegment(Position, GorOtstup, Position, edShir - GorOtstup)
   
    tochqa1 = Position
    tochqa2 = edShir - GorOtstup
   
    Dim zagotovka As Curve
    Set zagotovka = ActiveDocument.CreateCurve
    With zagotovka.CreateSubPath(tochqa1, GorOtstup)
        .AppendLineSegment tochqa1, tochqa2
    End With
   
    lina.Curve.CopyAssign zagotovka
    'тут планировалось найти точку пересечения готового отрезка lina с кривой Vaza и "подрезать" его
   
    Next Position
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Все равно мало данных
Откуда берется кривая Vaza? Вы точно в отладчике видите что на вход
GetIntersections подаются правильные валидные шейпы?
Далее - а как вы потом отрезки подрезать собрались?
Может, проще было бы не заморачиваться с методом GetIntersections, а создать маску для Trim которой разом все отрезки обрезать?
 
  • Спасибо
Реакции: bitmind

bitmind

Участник
Топикстартер
Сообщения
9
Реакции
0
Может, проще было бы не заморачиваться с методом GetIntersections, а создать маску для Trim
Может быть, если бы я умел)
Так или иначе, мне удалось программно выделять поочередно отрезки, находить точку пересечения. Потом я рисую новый отрезок до точки пересечения и удаляю старый. Такой вот колхоз'%)' И тем не менее ОГРОМНОЕ Вам спасибо, без вашей помощи не вкурил бы ничего, слишком мало опыта)
 

Вложения

  • фя.jpg
    фя.jpg
    161.7 КБ · Просм.: 874

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Так или иначе, мне удалось программно выделять поочередно отрезки, находить точку пересечения.
Я ж говорю - поочередное выделение отрезков - это лишнее звено в технологической цепочке. Все равно чтобы закипятить полный чайник, вылить из него сперва воду, чтоб свести задачу к задаче кипячения пустого чайника. ;)
У отрезки должны обрезаться и без выделения, у вас просто где то незаметный баг в коде.
 

Volodey

Участник
Сообщения
2
Реакции
0
Блин, пытался напрямую через
Код:
peresechenie =ActivePage.Layers("Vneshniy").Shapes(1).Curve.SubPaths(1).GetIntersections(ActivePage.Layers("Vneshniy").Shapes(2).Curve.SubPaths(1))
но не хочет! Придется, похоже, с выделением мучаться. Вот код:

Код:
'polosi
    For Position = 130 To edVis - NizOtstup + 1 Step ShirinaPolos
  
    Dim lina As Shape
    Set lina = ActiveLayer.CreateLineSegment(Position, GorOtstup, Position, edShir - GorOtstup)
  
    tochqa1 = Position
    tochqa2 = edShir - GorOtstup
  
    Dim zagotovka As Curve
    Set zagotovka = ActiveDocument.CreateCurve
    With zagotovka.CreateSubPath(tochqa1, GorOtstup)
        .AppendLineSegment tochqa1, tochqa2
    End With
  
    lina.Curve.CopyAssign zagotovka
    'тут планировалось найти точку пересечения готового отрезка lina с кривой Vaza и "подрезать" его
  
    Next Position
Как все же найти координаты точки пересечения. в дебагере вдно, что они в item1 записаны, но не могу понять как их оттуда вытянуть... У Вас код на самом интерсном месте про точку пересечения заканчивается! =)
 

Вложения

  • AskCrosspointcoordinate.jpg
    AskCrosspointcoordinate.jpg
    111.3 КБ · Просм.: 844

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Гм а в чем собственно проблема?
Item(1).PositionX ... не? '%)'
 

Volodey

Участник
Сообщения
2
Реакции
0
Спасибо! Так вроде пробовал - не работало, а сейчас заработало! Целый день убил чтобы до этого форума добраться, мозг плавится уже. А тут оперативно выручили!
 
Статус
Закрыто для дальнейших ответов.