[CDR X5-X8] как выделить все шейпы после разъединения

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

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
убил день. пробовал разные способы.
но они или кривые или работают не так как надо.
задача.
есть некоторый шейп.
допустим это квадрат, внутри которого отверстие.
применяем к нему Ctrl+k - разъединить кривая
получаем два шейпа. все тот же квадрат но уже без отверстия
и собственно шейп в виде того самого отверстия.
а теперь вопрос.
как мне теперь узнать какой из шейпов был квадратом, а какой получился из отверстия.
замечу что отверстий может быт много.
думал по координатам искать. но ерунда получается.
может есть стандартные функции.
или может попробовать узнать есть ли шейп сверху или снизу от данного...
не знаю.
может кто то сталкивался.
спасибо!
 

_MBK_

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

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Давайте подходить с другой стороны - вам нужно определить какой шейп полностью лежит внутри другого?
совершенно верно.
шейпы простые. и всегда один полностью лежит внутри другого
 

_MBK_

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

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
имено по этому бросил затею с кординатами.
прбовал через s.IsOnShape(x, y). прикольно, но тоже не совсем подходит. т.к. шейпов с "вложениями" мжет быт несколько.
а можно както выделит шейпы внутри произвольного контура? т.е. както задать выделение через кординаты.
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
через объединение можно - но както геморно
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
  • Спасибо
Реакции: Nezar

lev

Модератор
20 лет на форуме
Сообщения
2 146
Реакции
2 071
Если у вас по условиям задачи был объект с дырками, то после его разъединения дырки будут заведомо меньше по размеру, что элементарно проверяется.
 

_MBK_

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

lev

Модератор
20 лет на форуме
Сообщения
2 146
Реакции
2 071
По условию задачи был объект с дырками, а объекта из разнокалиберных ненакладывающихся контуров не было.
 

Nezar

Участник
Топикстартер
Сообщения
158
Реакции
3
Если у вас по условиям задачи был объект с дырками, то после его разъединения дырки будут заведомо меньше по размеру, что элементарно проверяется.
к сожалению не подходит, т.к. объекты совершенно разный. а так с самого начала думал так сделать.
 
Статус
Закрыто для дальнейших ответов.