1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Ищу быстрый код определения пересекается ли объект с объектом...

Тема в разделе "CorelDraw", создана пользователем SDmiter, 20 май 2008.

Модераторы: Артер
  1. SDmiter

    SDmiter Пользователь сайта

    С нами с:
    19.05.2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    2
    Ищу быстрый код определения пересекается ли объект с объектом...
    Фигуры не обязательно прямоугольные :)
    пишу алгоритм расстановки объектов на площади
    Может есть у кого кого код для компактной расстановки фигур...
     
  2. ivan44

    ivan44 Пользователь сайта

    С нами с:
    25.06.2008
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    2
    мне бы тоже пригодилось...
     
  3. G-Kir

    G-Kir Знаток

    С нами с:
    17.06.2005
    Сообщения:
    774
    Симпатии:
    3
    Баллы:
    20
    В кореле есть функция IsOnShape. Она проверяет находится ли объект в заданном объекте, либо вне заданного объекта.
    Фигуры могут быть какие угодно.

    Вот набросал код для примера:

    Код:
    Sub Probe()
    Dim s As Shape
    Dim x As Double, y As Double
    Dim mySh As Shape
    
    Set mySh = ActiveShape
    For Each s In ActivePage.Shapes
        s.GetPosition x, y
         If mySh.IsOnShape(x, y, -1) Then
            s.Fill.UniformColor.CMYKAssign 0, 100, 0, 0
         End If
        mySh.RemoveFromSelection
    Next s
    End Sub
    Рисуем какую-нибудь фигуру и кучу объектов вокруг. Выделяем эту фигуру. Запускаем код. Все объекты которые вошли в фигуру окрасятся. Степень чувствительности можно регулировать. Для большей точности рекомендуется прописывать референ-поинт документа как центр.

    Разумеется что алгоритм расстановки объектов придется сочинять самому. Эта функция может лишь облегчить мозговой штурм.
     

    Вложения:

    • 790880.jpg
      790880.jpg
      Размер файла:
      6,2 КБ
      Просмотров:
      76
  4. SDmiter

    SDmiter Пользователь сайта

    С нами с:
    19.05.2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    2
    Спасибо, эта функция сильно поможет, когда "мозговой штурм" закончу обязательно выложу что получилось а так-же те промежуточные полезные вещи что получались...

    Но к сажелению вопрос еще остается открытым, т.к. функция только определяет полностью ли объект находится в объекте, а нужно что-бы объекты (группы шейпов в том числе) не пересекались, я лично пока ничего подобного и быстрого не нашел (хотя медленные варианты есть)...
     
  5. SDmiter

    SDmiter Пользователь сайта

    С нами с:
    19.05.2008
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    2
    кривые не обязательно замкнутые (хотя это не сильно важно)
    1) определить пересекаются ли они
    2) найти точки пересечения
    3) найти нужное смещение (угол поворота) для того что-бы убрать пересечение

    Хотя не уверен что это все что нужно, но буду решать задачи по мере их появления...
     

    Вложения:

    • 791970.jpg
      791970.jpg
      Размер файла:
      5,7 КБ
      Просмотров:
      65
  6. G-Kir

    G-Kir Знаток

    С нами с:
    17.06.2005
    Сообщения:
    774
    Симпатии:
    3
    Баллы:
    20
    Чтоб определить пересечение кривых, то можно воспользоваться функцией GetIntersections. Она работает с кривыми и с сегментами одной кривой.
    А IsOnShape можно настроить чтоб она определяла и рядомстоящие объекты. Скомбинировав эти две функции, можно сделать вполне подходящий код.
     
Модераторы: Артер

Поделиться этой страницей