Определить что выноска мультилинии лежит на блоке
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Определить что выноска мультилинии лежит на блоке

Определить что выноска мультилинии лежит на блоке

Ответ
Поиск в этой теме
Непрочитано 21.06.2023, 10:08 #1
Определить что выноска мультилинии лежит на блоке
Sege
 
Санкт-Петебург
Регистрация: 05.07.2007
Сообщений: 110

Нужно определить чтобы точка выноска MULTILEADER находится на блоке (для дальнейшего вытаскивания значения тега блока в текст мультивыноски)

использую vla-GetBoundingBox:

Код:
[Выделить все]
 
(vla-GetBoundingBox obj 'minp 'maxp) ; obj - текущий блок VLA
(setq pt1 (vlax-safearray->list minp))
(setq pt2 (vlax-safearray->list maxp))
(setq mlead_k (ssget "_C" pt1 pt2 '((0 . "MULTILEADER"))))
Все четко работает, пока случайно мультивыноска не пересекает атрибут соседнего блока (все атрибуты - видимые). Т.е. получается что vla-GetBoundingBox дает габаратный контейнер с учетом видимых атрибутов.
Есть вариант не учитывает атрибуты блока в vla-GetBoundingBox?

Или есть какой-нибудь иной вариант определить что выноска (точка) MULTILEADER находится на блоке?

Последний раз редактировалось Sege, 21.06.2023 в 10:17.
Просмотров: 1112
 
Непрочитано 21.06.2023, 11:07
#2
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


не совсем понятно, что нужно, но как вариант взять корневую точку мвыноски и проверить находится ли она в описывающем прямоугольнике блока.
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 21.06.2023, 11:28
#3
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110


Цитата:
Сообщение от koMon Посмотреть сообщение
не совсем понятно, что нужно, но как вариант взять корневую точку мвыноски и проверить находится ли она в описывающем прямоугольнике блока.
а корневая точка - это какой dfx код?
И как проверить что указанная точка входит в габаритный контейнер? временно создать точку и ssget определить?

Последний раз редактировалось Sege, 21.06.2023 в 11:35.
Sege вне форума  
 
Непрочитано 21.06.2023, 11:52
1 | #4
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


110 MLeader Plane Origin Point
соррян, 10 после (304 . "LEADER_LINE{")

описывающий прямоугольник - ОП
корневая точка мвыноски - КТ

если КТ внутри ОП, тогда дб t

(and
(<= xmin_оп x_кт xmax_оп)
(<= ymin_оп у_кт ymax_кт)
)
__________________
K Lisp

Последний раз редактировалось koMon, 21.06.2023 в 11:59.
koMon вне форума  
 
Непрочитано 21.06.2023, 12:48
#5
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Цитата:
Сообщение от Sege Посмотреть сообщение
Все четко работает, пока случайно мультивыноска не пересекает атрибут соседнего блока (все атрибуты - видимые)
Если атрибуты находятся в своём отдельном слое - выключить его перед этим самым - таким образом мультивыноска соседние блоки не зацепит..
Так я выбираю блоки, лежащие на полилинии и отсеиваю соседние блоки с налезающими на неё атрибутами.
Nike вне форума  
 
Автор темы   Непрочитано 21.06.2023, 13:24
#6
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110


Цитата:
Сообщение от Nike Посмотреть сообщение
Если атрибуты находятся в своём отдельном слое - выключить его перед этим самым - таким образом мультивыноска соседние блоки не зацепит..
Так я выбираю блоки, лежащие на полилинии и отсеиваю соседние блоки с налезающими на неё атрибутами.
не работает вроде так, я спецом сделал атрибуты на другом слое. Слой выключен. vla-GetBoundingBox учитывает весь габаритный контейнер определения блока, в т.ч. если элементы блока находятся на выключенном слое.

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от koMon Посмотреть сообщение
110 MLeader Plane Origin Point
соррян, 10 после (304 . "LEADER_LINE{")

описывающий прямоугольник - ОП
корневая точка мвыноски - КТ

если КТ внутри ОП, тогда дб t

(and
(<= xmin_оп x_кт xmax_оп)
(<= ymin_оп у_кт ymax_кт)
)
спасибо! Еще один глупый вопрос: как извечь 10 код именно после 304? В списке кодов текущей MLEADER несколько 10 кодов

Последний раз редактировалось Sege, 21.06.2023 в 13:30.
Sege вне форума  
 
Непрочитано 21.06.2023, 13:31
#7
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,010


Оговорился - не выключить слой, а заморозить.
У меня работает, попробуй.
Nike вне форума  
 
Автор темы   Непрочитано 21.06.2023, 13:36
#8
Sege


 
Регистрация: 05.07.2007
Санкт-Петебург
Сообщений: 110


Цитата:
Сообщение от Nike Посмотреть сообщение
Оговорился - не выключить слой, а заморозить.
У меня работает, попробуй.
фиг поймет, у меня все-таки не работает
Sege вне форума  
 
Непрочитано 21.06.2023, 13:53
1 | #9
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,169


Цитата:
Сообщение от Sege Посмотреть сообщение
как извечь 10 код именно после 304
Более того, у мультивыноски и кодов 304 не один, поэтому
Код:
[Выделить все]
 (setq a (entget (car (entsel)))) 
(setq b (nth (1+ (VL-POSITION '(304 . "LEADER_LINE{") a)) a ) )
kp+ вне форума  
 
Непрочитано 21.06.2023, 13:55
1 | #10
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,809


Цитата:
Сообщение от Sege Посмотреть сообщение
извечь 10 код именно после 304
(cdr (assoc 10 (member '(304 . "LEADER_LINE{") (entget mleader_ename)))
__________________
K Lisp
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Определить что выноска мультилинии лежит на блоке



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, лежит ли точка внутри контура swkx Программирование 71 10.11.2023 12:47
Как определить площадь одной грани 3D-тела (как определить площадь подошвы фундаментной плиты) bimpim AutoCAD 13 13.12.2022 12:19
Помогите определиться со свойствами мультилинии samos LISP 0 18.11.2021 12:30
Выноска гребенчатая и цепная как у СПДС Graphics (Дин. Блок) Labudico Динамические блоки 1 08.10.2021 11:22
Как в AutoCAD сделать разную штриховку в одном блоке? Petrich AutoCAD 2 23.08.2019 12:38