5 / 4 / 1
Регистрация: 02.11.2016
Сообщений: 138
1

VBA, определить скомбинированный объект или нет

03.06.2020, 20:47. Показов 3792. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, подскажите пожалуйста, какая команда проверяет скомбинированный объект или нет? Что бы потом BreakAPart командой его разделить. Случайно находил, но не помню, а сейчас очень нужно. Спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2020, 20:47
Ответы с готовыми решениями:

Как определить объект Nothing или нет
Собственно сабж. Хотелост бы иметь функцию типа IsNull, но для объектов.

Объект, с которым Word умеет работать, а VBA - нет
Есть объект, с которым Word умеет работать, а VBA - нет. Создается он просто: Сначала встраиваем...

Уточнить, существует ли объект или нет
Не много из мира фантастики, но нужно для дебага... Есть в общем класс, который экстендит PDO... В...

Можно ли по названию платы,или по чипу,или по соккету,определить,поддерживает плата ХР или нет?
Добрый день всем.Уважаемые знатоки,я заранее прошу у Вас прощенья,если заданный мной вопрос,тупой...

21
239 / 150 / 41
Регистрация: 26.01.2019
Сообщений: 545
04.06.2020, 10:04 2
Вот что нашел:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub ungroupItemsOnAllPages () 
 
    Dim p As Page 
    Dim j As Long 
 
    Для j = 1 ActiveDocument.Pages.count 
        ActiveDocument.Pages (j) .Shapes.FindShapes (Query: = "@ type = 'group'"). UngroupAll 
    Далее j 
 
Конец Sub
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
Цитата Сообщение от Dimson_ Посмотреть сообщение
нужно именно скомбинированные объекты определять как то
Просто интересно.
Что вы подразумеваете под скомбинированными? И чем они отличаются от сгруппированных?
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
Цитата Сообщение от Dimson_ Посмотреть сообщение
комбинирование это другое ctrl+L
привык, что это называется объединение, а не комбинирование =)
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 и складывает, результат не верный на выходе...
В принципе, если понять какой путь с другим образует заливку, то тогда можно сделать.
Миниатюры
VBA, определить скомбинированный объект или нет  
0
6 / 6 / 0
Регистрация: 09.02.2019
Сообщений: 11
07.06.2021, 07:00 15
Цитата Сообщение от Dimson_ Посмотреть сообщение
спасибо, но не со всеми фигурами сработает,
Не со всеми, но комбинирование - это не группирование, объекты сливаются в один без информации о том, как объекты разделялись изначально, и нет никакой возможности выяснить, были ли элементы каких-нибудь Й или Ы одним объектом.

Цитата Сообщение от Dimson_ Посмотреть сообщение
Нашёл готовый в сети, но он просто считает площадь каждого SubPath и складывает, результат не верный на выходе
Вы наверное 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
Цитата Сообщение от Dimson_ Посмотреть сообщение
If obj.Curve.SubPaths(1) и obj.Curve.SubPaths(2) => "имеют общую заливку"
Строго говоря, заливка общая для всей 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2021, 12:05
Помогаю со студенческими работами здесь

Код VBA можно упростить или нет?
Уважаемые господа! Подскажите пожалуйста можно ли упростить вот этот код VBA. Если да то как? ...

Как узнать создан объект-форма(в Дэлфи) или нет?
Использую MDI форму, при этом Application.CreateForm(...) пишу не в файле проэкта, а тогда когда...

Как с помощью VBA узнать запущен Outlook или нет?
узнать запущен Outlook или нет. Заранее спасибо.

Правда или нет что объект Session в IIS работает через cookie?
А вот скажите - правда или нет что объект Session в IIS работает через cookie?

Как посредством VBA узнать открыт XLS файл или нет
Как посредством VBA можно узнать открыт ли файл (Excel) или нет?

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru