5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
1 | |
VBA, определить скомбинированный объект или нет03.06.2020, 20:47. Показов 3792. Ответов 21
Метки нет (Все метки)
Всем привет, подскажите пожалуйста, какая команда проверяет скомбинированный объект или нет? Что бы потом BreakAPart командой его разделить. Случайно находил, но не помню, а сейчас очень нужно. Спасибо!
0
|
03.06.2020, 20:47 | |
Ответы с готовыми решениями:
21
Как определить объект Nothing или нет Объект, с которым Word умеет работать, а VBA - нет Уточнить, существует ли объект или нет Можно ли по названию платы,или по чипу,или по соккету,определить,поддерживает плата ХР или нет? |
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
|
||||||
04.06.2020, 10:04 | 2 | |||||
Вот что нашел:
1
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
04.06.2020, 11:49 [ТС] | 3 |
Спасибо, но не то. Группы умею находить, нужно именно скомбинированные объекты определять как то..
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
04.06.2020, 19:17 [ТС] | 4 |
В общем нашёл, можно проверять вот так:
obj.Curve.SubPaths.count > 1
1
|
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
|
|
04.06.2020, 23:25 | 5 |
Просто интересно.
Что вы подразумеваете под скомбинированными? И чем они отличаются от сгруппированных?
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
05.06.2020, 10:23 [ТС] | 6 |
Группировка это одно ctrl+g, комбинирование это другое ctrl+L. Попробуйте, думаю все станет сразу понятно
0
|
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
|
|
05.06.2020, 11:31 | 7 |
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
05.06.2020, 12:07 [ТС] | 8 |
А ну понятно,
0
|
185 / 183 / 31
Регистрация: 11.10.2016
Сообщений: 599
|
|
07.06.2020, 18:07 | 9 |
интересно, если закривить букву "О", то будет ли она считаться скомбинированным объектом?
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
09.06.2020, 12:58 [ТС] | 10 |
_shark, Привет, получается что будет)), собственно примерно для этого и нужно было
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
05.06.2021, 11:19 [ТС] | 11 |
В продолжение темы. Ещё вопрос появился, теперь не могу понять как в сложном объекте, например 2 буквы "О" скомбинированны, определить какой SubPath с другим образует одну из букв "О". Они там по номерации, 1,2 и тд.. Если кто знает, буду признателен!
0
|
6 / 6 / 0
Регистрация: 09.02.2019
Сообщений: 11
|
|
06.06.2021, 08:46 | 12 |
Можно проверить, пересекаются ли bounding box'ы одного subpath с другим:
SubPath1.BoundingBox.Intersect(SubPath2.BoundingBox).IsEmpty BoundingBox - это прямоугольник, описанный вокруг объекта, в данном случае subpath. Если этот прямоугольник внутренней части буквы О лежит внутри внешней части, то они пересекутся и будет False (непустое пересечение).
1
|
185 / 183 / 31
Регистрация: 11.10.2016
Сообщений: 599
|
|
06.06.2021, 13:32 | 13 |
Dimson_, обычно, первый Subpath - это основной, а все остальные - либо вписаны в него, либо это, вообще, отдельный элемент, например, крючок в букве "й". В последнем случае границы этого Subpath'а будут лежать вне границ первого основного субпути
1
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
07.06.2021, 06:43 [ТС] | 14 |
elvin-nsk, спасибо, но не со всеми фигурами сработает,
_shark, хотел макрос для подсчета площади сделать, при помощи .Area, но со сложными фигурами не так всё просто. Нашёл готовый в сети, но он просто считает площадь каждого SubPath и складывает, результат не верный на выходе... В принципе, если понять какой путь с другим образует заливку, то тогда можно сделать.
0
|
6 / 6 / 0
Регистрация: 09.02.2019
Сообщений: 11
|
|
07.06.2021, 07:00 | 15 |
Не со всеми, но комбинирование - это не группирование, объекты сливаются в один без информации о том, как объекты разделялись изначально, и нет никакой возможности выяснить, были ли элементы каких-нибудь Й или Ы одним объектом.
Вы наверное CurveInfo скачали, он неправильно считает. GeometricExt считает верно: https://cloud.mail.ru/public/886T%2FaLxq6i2HZ Правда, у них у обоих закрыт исходный код.
1
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
07.06.2021, 07:22 [ТС] | 16 |
elvin-nsk, да площадь норм считает, спасибо!
Ну раз кто-то сделал, то смысл новый выдумывать. Жалко, что код закрыт, посмотреть бы))
0
|
185 / 183 / 31
Регистрация: 11.10.2016
Сообщений: 599
|
|
07.06.2021, 22:44 | 17 |
тоже писал макросы для подсчета площади. Для сложных фигур просто вычитал меньший субпуть из большего. Был даже вариант дискретизации, т.е. комбинировал со сложным объектом множество параллельных линий на мелком расстоянии от друга и подсчитывал длину этих линий после обрезки.
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
08.06.2021, 10:45 [ТС] | 18 |
Мне кажется должно быть что-то вроде:
If obj.Curve.SubPaths(1) и obj.Curve.SubPaths(2) => "имеют общую заливку" = True Then тут посчитать, записать End if И так дальше, в цикле перебрать все Только какой параметр за это отвечает, не знаю
0
|
6 / 6 / 0
Регистрация: 09.02.2019
Сообщений: 11
|
|
08.06.2021, 11:16 | 19 |
Строго говоря, заливка общая для всей Curve. Дальше мы можем только посмотреть, находятся ли отдельные Subpath'ы внутри других целиком (буква "О") и пересекаются ли какие-то части Curve друг с другом (такого в случае скривлённого текста не будет). Бегло нахождение одного subpath внутри другого можно посмотреть через bounding box, для простого шрифта без витиеватостей вроде должно сработать: ведь габариты соседних букв не будут пересекаться. Соответственно, пересечения будут только для букв "с дырками", типа О, А, Д, Р, В... Так вы найдёте "общую заливку" в смысле subpath'ов, образующих одну и ту же залитую область.
0
|
5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
|
|
08.06.2021, 12:05 [ТС] | 20 |
elvin-nsk, я понял, про предложный вами алгоритм с первого вашего сообщения, он подойдёт к простым объектам. Если вы посмотрите на картинку, которую я прикрепил (например левую), это скомбинированный шейп, мне не понятно как определить через VBA, путь 5 и 1, 2 и 3. На картинке видно, что 5 и 1 образуют одну "заливку", 2 и 3 так же. CDR как то же понимает это)), наверняка за это отвечает какой то параметр, который можно прочитать.
0
|
08.06.2021, 12:05 | |
08.06.2021, 12:05 | |
Помогаю со студенческими работами здесь
20
Код VBA можно упростить или нет? Как узнать создан объект-форма(в Дэлфи) или нет? Как с помощью VBA узнать запущен Outlook или нет? Правда или нет что объект Session в IIS работает через cookie? Как посредством VBA узнать открыт XLS файл или нет Недопустимый неполный тип , или как передать в функцию указатель на объект класса , или просто объект Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |