ADN Club > AutoLisp / VisualLISP и DCL

Выбор по гиперссылке

(1/3) > >>

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 **

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии