Набор ssget

Автор Тема: Набор ssget  (Прочитано 17929 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Набор ssget
« Ответ #15 : 28-06-2019, 17:22:27 »
есть ли способ управлять этим?

Нет. Только последовательный выбор.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Alex.gomel

  • ADN OPEN
  • Сообщений: 12
  • Карма: 4
Re: Набор ssget
« Ответ #16 : 29-06-2019, 09:46:19 »
После выбора рамкой, в таком случае приходиться дополнительно сортировать примитивы по координатам точки вставки например (или координатам середины диагонали контейнера, или центроида). Сортировку можно организовать любую - слева направо, сверху вниз, по часовой стрелке и т.д.

Оффлайн Матвей

  • ADN OPEN
  • Сообщений: 23
  • Карма: 1
Re: Набор ssget
« Ответ #17 : 01-07-2019, 11:04:03 »
Спасибо за идею. Получилось так:

Код - Auto/Visual Lisp [Выбрать]
  1. (setq SSText (ssget '((0 . "TEXT,MTEXT"))))
  2. (setq i 0)
  3. (repeat (sslength SSText)
  4.   (setq string
  5.      (append
  6.        string
  7.        (list
  8.          (append
  9.            (list (cdr (assoc 10 (entget (ssname SSText i))))
  10.              (vlax-get (vlax-ename->vla-object (ssname SSText i))
  11.                    'TextString
  12.              )
  13.            )
  14.          )
  15.        )
  16.      )
  17.   )
  18.   (setq i (1+ i))
  19. )
  20.  
  21. (setq string (vl-sort string
  22.               '(lambda (a b)
  23.              (if (= (cadar a) (cadar b))
  24.                (< (caar a) (caar b))
  25.                (> (cadar a) (cadar b))
  26.              )
  27.                )
  28.          )
  29. )
  30.  
  31. (setq i 0)
  32. (repeat (sslength SSText)
  33.   (setq SortString (append SortString (cdr (nth i string))))
  34.   (setq i (1+ i))
  35. )

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Re: Набор ssget
« Ответ #18 : 01-07-2019, 11:41:35 »
ИМХО можно покороче. Фильтрацию не трогаю:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun t1 (/ selset)
  2.   (if (= (type (setq selset (vl-catch-all-apply (function (lambda () (ssget '((0 . "*TEXT"))))))))
  3.          'pickset
  4.          ) ;_ end of =
  5.     (mapcar (function
  6.               (lambda (x)
  7.                 (setq x (vlax-ename->vla-object x))
  8.                 (list (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint x))) (vla-get-textstring x))
  9.                 ) ;_ end of lambda
  10.               ) ;_ end of function
  11.             ((lambda (/ tab item)
  12.                (repeat (setq tab  nil
  13.                              item (sslength selset)
  14.                              ) ;_ end setq
  15.                  (setq tab (cons (ssname selset (setq item (1- item))) tab))
  16.                  ) ;_ end of repeat
  17.                ) ;_ end of lambda
  18.              )
  19.             ) ;_ end of mapcar
  20.     ) ;_ end of if
  21.   ) ;_ end of defun
  22.  
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!