LISP. Как можно выделить два (или более) объекта на чертеже?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как можно выделить два (или более) объекта на чертеже?

LISP. Как можно выделить два (или более) объекта на чертеже?

Ответ
Поиск в этой теме
Непрочитано 29.10.2013, 09:48 #1
LISP. Как можно выделить два (или более) объекта на чертеже?
Скандербег
 
Регистрация: 26.10.2013
Сообщений: 10

Покажите, пожалуйста, как выделить две (или больше) полилинии, нарисованных последними.
Последний добавленный на чертеж объект получаем командой entlast,
а большее число объектов каким образом получить в список?
Нужно для последующего применения к этим двум объектам команды COPY.

P.S. Из особенностей чертежа, лини не могут быть объединены в одну.
Просмотров: 1872
 
Непрочитано 29.10.2013, 10:19
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


"запомнить" entlast до выполнения команды и "пробежаться" по нему entnext'ом до nil
з.ы. командные методы "в процессе" обрастают такой "оберткой" что в итоге их "лекгость и удобство" сходят на нет - чем раньше от них отказаться тем лучше.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.10.2013, 10:34
#3
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


Если отрисовываются программно - записывать их в набор ssadd
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Автор темы   Непрочитано 29.10.2013, 10:36
#4
Скандербег


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


Спасибо.
Т.е. чтобы занести в список отмеченных объектов последние два нужно взять один командой entlast, а другой entnext?
Цитата:
...чем раньше от них отказаться тем лучше.
А отказываются от командных методов обычно в пользу чего?

Offtop: P.S. Автокадом и лиспом занимался более 15 лет назад и сейчас пытаюсь что-то вспомнить (крепко плаваю).
Скандербег вне форума  
 
Непрочитано 29.10.2013, 10:42
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


если в разрезе лиспа то есть dxf и vla
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.10.2013, 10:53
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Скандербег, если все-таки нужно получить список N-последных объектов на чертеже, попробуйте так
Код:
[Выделить все]
 
; Пример вызова: (entlast_multi <кол-во объектов>)
(defun entlast_multi(count / lst_all lst)
  ((lambda(ent)
     (while ent
       (setq lst_all (cons ent lst_all)
	     ent (entnext ent)
	     )
       )
     (setq nbr (ssadd))
     (if lst_all
       (repeat (min count (length lst_all))
	 (setq lst (cons (car lst_all) lst)
	       lst_all (cdr lst_all)
	       )
	 )
       )
     lst
     )
    (entnext)
    )
  );end entlast_multi
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 29.10.2013, 12:19
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Скандербег Посмотреть сообщение
Т.е. чтобы занести в список отмеченных объектов последние два нужно взять один командой entlast, а другой entnext?
нет - читай справку что возращают entnext и entlast.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.10.2013, 14:51
#8
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Всем привет.
Вариант 1
примитивы(из одного пространства) в ssget сортируются по порядку их создания , начиная с последнего. Т.е. первый элемент (ssget "x") это и есть entlast.
Т.е.
Код:
[Выделить все]
 
(vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "x"))))
и выбирайте из списка какой хотите примитив по счету.

Вариант 2.
Пространство модели(листа) само по себе является блоком.
Получите его из таблицы блоков как обычный блок и переберите его элементы. Они тоже идут в порядке создания.

Последний раз редактировалось Эдуард, 29.10.2013 в 15:02.
Эдуард вне форума  
 
Непрочитано 31.10.2013, 09:18
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Дима_ Посмотреть сообщение
запомнить" entlast до выполнения команды и "пробежаться" по нему entnext'ом до nil
Пару примеров в развитие
Отслеживание объектов появившихся после pasteclip пост #2 Там же и пример использования
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Как можно выделить два (или более) объекта на чертеже?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правила и практика ведения журнала Общих работ sys81 Технология и организация строительства 32 03.10.2014 15:59
Ввод в эксплуатацию салона красоты - нужно ли (и в какой форме) согласование с пожарниками ? drill_man Прочее. Архитектура и строительство 4 20.09.2013 12:03
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46
Как можно открыть чертеж через LISP на котором стоит пароль? ivspec LISP 7 10.02.2006 17:36