|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
11.11.2004, 01:43 | #1 | |
Лямбда-глюк
Сообщений: n/a
|
||
Просмотров: 3894
|
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
Цитата:
P.S. Добавка - забыл. Подсписки формируются по принципу - один подсписок, на один элемент мультилинии, а не один на свойство. |
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
______________________
Неск. вариантов на выбор : (setq ofs nil cofs nil ltofs nil a nil) (foreach i '(49 62 6) (foreach p mlst (if (equal i (car p))(setq a (cons (cdr p) a))))) (mapcar 'set '(ofs cofs ltofs) (reverse a)) ; Check : (print ofs) (print cofs) (print ltofs) (mapcar 'set '(ofs cofs ltofs) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (member (car x)'(49 62 6))) mlst))) ; Check : (print ofs) (print cofs) (print ltofs) А можно прописать свою собственную функцию : (defun dxf-list (elist test_list) (if test_list (cons (cdr (assoc (car test_list) elist)) (dxf-list elist (cdr test_list) )))) ; Check : (mapcar 'set '(ofs cofs ltofs) (dxf-list mlst '(49 62 6))) Или классическим ЛИСПом (Спасибо финским братьям) : (defun dxf-list2 (elist test_list) (cond ((null test_list) nil) (T (cons (cdr (assoc (car test_list) elist)) (dxf-list2 elist (cdr test_list)))))) ; Check : (mapcar 'set '(ofs cofs ltofs) (dxf-list2 mlst '(49 62 6))) ~'O'~ |
|||
|
||||
Сообщений: n/a
|
Alaspher
"Так и задумано, рекурсия - называется" Про рекурсии - это знаемо. Удивился отсутсвию в теле функции специфицированных параметров _str8lst и _str8lstst. "Добавка - забыл. Подсписки формируются по принципу - один подсписок, на один элемент мультилинии, а не один на свойство." Мерси, коллега, но это - неот той стенки гвоздь. Мне нужны списки по свойствам. Олегу. Спасибо. Вариант 2 ине нравится больше всех. Однако, будет ли лбъяснение, почему моя функция не видит численных значений, а только строковые? |
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
Элементарная проверка :
(setq ofs nil ltofs nil cofs nil comm nil) (repeat 3 (setq en (car (entsel))) (setq mlst (entget en)) (mapcar 'set '(ofs cofs ltofs) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (member (car x)'(48 62 6))) mlst))) (setq comm (append comm (list (list ofs cofs ltofs))))) (print comm) RESULT : ((6 "ByBlock" 15.0) (1 "ByBlock" 15.0) (5 "ByBlock" 12.0)) 49-й код у меня отсутствует, заменил на 48. Точно так же работают все три остальных функции Делай выводы |
|||
|
||||
Сообщений: n/a
|
Олегу
В том-то и дело, что ваша программа (без последней модификации с repeat) выдает только первые атомы каждого спика, а это совсем не то, что мне было нужно. Мне нужны многоатомные списки типа ofs = '(0.75 0.5 0.0 -0.5 -0.75) cofs = '(256 2 256 3 256) ltofs = '("bylater" "bylater" "bylater" "bylater" "bylater"), причем в порядке следования элеменитов в описании стиля мультилинии независимо от количества элеменитов. Кстати, код 49 - значение отступа для каждого элемента, так что его не может не быть. Alaspher'у Проверил вашу программу - все тоже самое? т.е.она правильно выдает список со строковыми атомами, а с численными - полный nil, причем в единственном числе - ofs = nil, cofs = nil. Кстати, ваш способ открытия списка стиля требует указания имени стиля, т.е. использования (assoc 2 (entget выбранная_мультилиния)), тогда как как код 340 обращается к списку стиля этой мультилинии непосредственно. Однако, все равно спасибо за выше участие. |
|||
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813
|
"Чтобы накормить голодного, дайте не рыбу ,а удочку ..."
А тебе, похоже и удочку, и рыбу и еще дядьку, чтоб червей насаживал. И спасибо тебе сынку, что просветил нас, неразумных, насчет мультилиний и что под каким кодом. |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
Код:
|
|||
|
||||
Сообщений: n/a
|
Цитата:
|
|||