ADN Club > AutoLisp / VisualLISP и DCL
Выбор по гиперссылке
1958:
Имеется несколько полилиний с присвоенными гиперссылками. На полилиниях расположены блоки с гиперссылками, соответствующими гиперссылке линии. Сейчас я выбираю нужные мне блоки по слою, по цвету. Как добавить условие выбора по гиперссылке?
--- Код - Auto/Visual Lisp [Выбрать] ---(defun c:55 (/) (setq trassa (car (entsel "Укажите трассу >"))) (vlax-for hp (vla-get-hyperlinks (vlax-ename->vla-object trassa)) (setq NameOb (vla-get-url hp)) );;; (alert NameOb) (setq vla_curve (vlax-ename->vla-object trassa) LayerTrassa (cdr (assoc 8 (entget trassa))) ColorTrassa (cdr (assoc 62 (entget trassa))) ss_trassa (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget trassa))) ) (vl-cmdf "_.zoom" "_Object" trassa "") (setq nabor (ssget "_X" (list (cons 0 "insert") (cons 8 LayerTrassa) (cons 62 ColorTrassa)))) (SSSETFIRST nabor nabor))
Александр Ривилис:
1958,
Правило форматирования кода у нас на форуме у меня в подписи.
Фильтра по гиперссылке нет. Точнее нет фильтра по конкретной гиперссылке. Но можно отфильтровать по самому факту наличия у полилинии гиперссылки:
--- Код - Auto/Visual Lisp [Выбрать] ---(setq ss (ssget "_X" '((0 . "*POLYLINE") (-3 ("PE_URL")))))
1958:
Прошу прощения за неправильное форматирование кода (в очередной раз )
Теперь пара вопросов:
1. Почему не получается выбрать блоки (setq ss (ssget "_X" '((0 . "insert") (8 . LayerTrassa) (62 . ColorTrassa) (-3 ("PE_URL")))))
2. Если отбросить выбор по кодам 8 и 62, набор создается. Можно перебрать элементы набора, сравнить гиперссылки на равенство с нужным значением, если равны, то как добавить этот элемент в другой набор? Что-то у меня не получается.
--- Код - Auto/Visual Lisp [Выбрать] ---(defun c:55 (/) (setq nabor (ssadd) nabor nil PO_OutptData (ssadd) PO_OutptData nil NameOb "12" hp "23" trassa (car (entsel "Укажите трассу >")) ) (vlax-for hp (vla-get-hyperlinks (vlax-ename->vla-object trassa)) (if (setq NameOb (vla-get-url hp)) NameOb ) );;; (alert (strcat "имя трассы " NameOb)) (setq OutFile (strcat NameOb ".CSV") vla_curve (vlax-ename->vla-object trassa) LayerTrassa (cdr (assoc 8 (entget trassa))) ColorTrassa (cdr (assoc 62 (entget trassa))) ss_trassa (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget trassa))) );;;Зуммирование экрана, чтобы вся трасса была видна (vl-cmdf "_.zoom" "_Object" trassa "") (setq ss (ssget "_X" '((0 . "insert");;; (8 . LayerTrassa) (62 . ColorTrassa) (-3 ("PE_URL")) ) ) ips 0 ) (alert (vl-prin1-to-string (sslength ss))) (while (< ips (sslength ss)) (setq obj (ssname ss ips)) (vlax-for hp (vla-get-hyperlinks (vlax-ename->vla-object obj)) (setq hp_obj (vla-get-url hp) ips (1+ ips) ) );;; (alert hp_obj) (if (= hp_obj NameOb) (ssadd (entget obj) nabor) ) ) (sssetfirst nabor nabor))
Александр Ривилис:
--- Цитата: 1958 от 15-03-2021, 15:59:44 ---1. Почему не получается выбрать блоки (setq ss (ssget "_X" '((0 . "insert") (8 . LayerTrassa) (62 . ColorTrassa) (-3 ("PE_URL")))))
--- Конец цитаты ---
Наверное потому, что вы недостаточно знаете lisp.
Должно быть приблизительно так:
--- Код - Auto/Visual Lisp [Выбрать] ---(setq ss (ssget "_X" (list '(0 . "insert") (cons 8 LayerTrassa) (cons 62 ColorTrassa) '(-3 ("PE_URL")))))
1958:
Это правда. Мои познания дилетантские. Но и ваш вариант не работает.
Укажите трассу >
** Error: неверный тип аргумента: lselsetp nil **
Навигация
Перейти к полной версии