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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp. Как записать координаты нескольких точек в один структурированный список?

Autolisp. Как записать координаты нескольких точек в один структурированный список?

Ответ
Поиск в этой теме
Непрочитано 15.11.2015, 06:42 #1
Autolisp. Как записать координаты нескольких точек в один структурированный список?
vladimirr_b
 
Регистрация: 24.01.2012
Сообщений: 83

Здравствуйте! Пишу программу, которая должна записать в некую переменную координаты базовых точек всех блоков в слое "Штамп" в чертеже. Хотелось бы, чтобы данные хранились в переменной примерно как в массиве Паскаля, т.е. в ячейке 1 координаты первого блока, в ячейке n координаты n-го блока. Сам код нахождения координат базовых точек блоков я написал, а вот как теперь эти данные записать в один структурированный список/массив/вектор/коллекцию не знаю. Подскажите пожалуйста.

Код:
[Выделить все]
 (setq sdel (ssget "X" '((0 . "INSERT")(8 . "Штамп"))))
(setq n (sslength sdel)) 
(setq i 0)
(while (> n i)
  (setq name_obj (ssname sdel i))
  (setq list_obj (entget name_obj))
  (setq p_i (cdr(assoc 10 list_obj)))
  (setq x_i (car p_i))
  (setq y_i (car (cdr p_i)))
  (setq i (+ i 1))
)
----- добавлено через ~3 ч. -----
Задача решилась функцией Cons
Просмотров: 2381
 
Непрочитано 15.11.2015, 14:50
1 | #2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Используя библиотеки можно было бы записать
Код:
[Выделить все]
 (mapcar 'dxf10 (sslist sdel))
gomer вне форума  
 
Непрочитано 16.11.2015, 09:40
1 | #3
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Попробуйте так.
Для трёхмерных координат.
Код:
[Выделить все]
 (setq
 CoorLst
 (mapcar
  '(lambda (l1)
    (cdr (assoc 10 (entget l1)))
   )
  (mapcar 'cadr
	  (ssnamex (ssget "_X" '((0 . "INSERT") (8 . "Штамп"))))
  )
 )
)
Для двухмерных координат.
Код:
[Выделить все]
 (setq
 CoorLst
 (mapcar
  '(lambda (l1)
    (reverse (cdr (reverse (cdr (assoc 10 (entget l1))))))
   )
  (mapcar 'cadr
	  (ssnamex (ssget "_X" '((0 . "INSERT") (8 . "Штамп"))))
  )
 )
)
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Автор темы   Непрочитано 16.11.2015, 13:55
#4
vladimirr_b


 
Регистрация: 24.01.2012
Сообщений: 83


----- добавлено через ~16 мин. -----
Цитата:
Сообщение от gomer Посмотреть сообщение
Используя библиотеки можно было бы записать
Надо подключать эти библиотеки?
Лисп выдал такое сообщение " ошибка: no function definition: SSLIST"

Попробовал код ProPeller'a, все работает! Спасибо большое. На этом примере я разобрался с функцией mapcar. Код гораздо оптимальнее того, который разработал я))

----- добавлено через 8 сек. -----
----- добавлено через ~1 ч. -----
Цитата:
Сообщение от ProPeller Посмотреть сообщение
Попробуйте так.
Для трёхмерных координат.
Код:
[Выделить все]
(setq
CoorLst
(mapcar
'(lambda (l1)
(cdr (assoc 10 (entget l1)))
)
(mapcar 'cadr
(ssnamex (ssget "_X" '((0 . "INSERT") (8 . "Штамп"))))
)
)
)
Для двухмерных координат.
Код:
[Выделить все]
(setq
CoorLst
(mapcar
'(lambda (l1)
(reverse (cdr (reverse (cdr (assoc 10 (entget l1))))))
)
(mapcar 'cadr
(ssnamex (ssget "_X" '((0 . "INSERT") (8 . "Штамп"))))
)
)
)

Последний раз редактировалось vladimirr_b, 16.11.2015 в 15:36.
vladimirr_b вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp. Как записать координаты нескольких точек в один структурированный список?

Инженерные консультации
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линии электрических соединений Shoorup Программирование 23 07.02.2015 15:13
Autolisp: как получить последний ввод (команду, координаты точек)? studentarh LISP 49 15.08.2013 11:52
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47