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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Повтор предидущего выбора элементов

LISP. Повтор предидущего выбора элементов

Ответ
Поиск в этой теме
Непрочитано 18.10.2010, 20:50 #1
LISP. Повтор предидущего выбора элементов
Yuzer
 
Мозговой штурм
 
Рідна ненька - Україна, Харків
Регистрация: 26.10.2008
Сообщений: 5,705

Здравствуйте.
Подскажите пожалуйста где найти лисп, который бы повторил предидущий выбор элементов.
К примеру: долго и нудно выбирал кучу разных элементов, потом случайно нажал Esc и приходится заново их выискывать... А так бы нажал кнопуку и выбор повторился бы...
Offtop: Извиняюсь, что не на языке пергамистов выражаюсь - не силен в этом.
Просмотров: 16502
 
Непрочитано 18.10.2010, 21:00
#2
gomer

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


Код:
[Выделить все]
TIP1134.MNU:    SEL_SET.MNU   Selection Sets   (c)1995, Marc Stringer

***POP10
[Selection Sets]
[Selection A]^p(if (/= sela nil)(setq sela sela)(setq sela (ssget)));
[Selection B]^p(if (/= selb nil)(setq selb selb)(setq selb (ssget)));
[Selection C]^p(if (/= selc nil)(setq selc selc)(setq selc (ssget)));
[--]
[Clear Sel.A]^p(progn(setq sela nil)(prompt "Group A Cleared.")(terpri)(princ))
[Clear Sel.B]^p(progn(setq selb nil)(prompt "Group B Cleared.")(terpri)(princ))
[Clear Sel.C]^p(progn(setq selc nil)(prompt "Group C Cleared.")(terpri)(princ))
[Clear   All]^p(progn(setq sela nil selb nil selc nil)(prompt "All Groups Cleared.")(terpri)(princ))
gomer вне форума  
 
Автор темы   Непрочитано 19.10.2010, 00:15
#3
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


gomer, а можно краткое пояснение - что с ним делать?
Offtop: Как я понял defun тут не наблюдается...
Yuzer вне форума  
 
Непрочитано 19.10.2010, 00:25
#4
gomer

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


сохраняешь как SEL_SET.MNU
_menuload
загружаешь...
Появится новый пункт меню в строке меню...
Первые 3 подпункта либо создаешь либо пользуешься сохраненным набором,
Следующие 4 - чистишь наборы (обнуляешь)
gomer вне форума  
 
Автор темы   Непрочитано 19.10.2010, 00:50
#5
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Малость не то, чего хотелось. Этот выбор нужно задавать через SEL_SET.MNU и тогда он "помнится".
Yuzer вне форума  
 
Непрочитано 19.10.2010, 00:58
#6
gomer

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


Например,
_move -> Selection A (выбрал объекты) -> _move -> Selection B (выбрал объекты) -> _rotate -> Selection A (повернул первый набор) -> copy -> Selection B (скопировал 2й набор) Не то?
gomer вне форума  
 
Автор темы   Непрочитано 19.10.2010, 01:03
#7
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


gomer, нужно изначально через select выбрать объекты, чтоб потом ими оперирывать. А мне нужно чтоб в памяти помнился последний выбор автоматически.Причем весь - начная от первого выбора до нажатия Esc.
Yuzer вне форума  
 
Непрочитано 19.10.2010, 01:19
#8
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


_.select _p
или
_.select _l
Не оно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.10.2010, 05:53
#9
Vova

Engineer
 
Регистрация: 05.09.2003
New-York
Сообщений: 10,288


1. команда _Group
2. (Setq А (ssget)) где "А" имя набора. Вызов набора !А
Далее можно оперировать (не только в эту сессию) либо именем группы, либо (только в эту сессию) набором "A" а также другими наборами, имена которых задаются пунктом 2 (но кроме чистых цифр)
Vova вне форума  
 
Непрочитано 19.10.2010, 08:32
#10
gomer

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


Если я правильно понял... то нельзя... разве что через реакторы... но тут я пас...
gomer вне форума  
 
Непрочитано 19.10.2010, 11:01
5 | #11
TararykovDG

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


Yuzer, попробуй так
Код:
[Выделить все]
(vl-load-com)
; Функция действия на событие описанное в реакторе
(defun pickfirstModified(reac data / )
  (if (cadr (ssgetfirst))
    (setq last_select_selection (cadr (ssgetfirst)))
    )
  )
;------------------------------------------------------------

; Реактор
(setq Misc_Reac (vlr-miscellaneous-reactor nil
          (list '(:VLR-pickfirstModified . pickfirstModified)
            )
          )
      )
;------------------------------------------------------------


;------------------------------------------------------------
; Пример вызова: get-last-select
(defun c:get-last-select()
  (if (= (type last_select_selection) 'PICKSET)
    (if (> (sslength last_select_selection) 0)
      (progn
    (sssetfirst nil last_select_selection)
    (prompt "\n Последный сформированный набор восстановлен в переменнной last_select_selection")
    )
      (prompt "\n Последный сформированный набор пустой")
      )
    (prompt "\n На чертеже еще не было сформировано ни одного набора")
    )
  (princ)
  )
;------------------------------------------------------------
Сохрани это в lsp-файл, загрузи или лучше вообще добавь в автозагрузку. В ком. строке ACad'а введи команду get-last-select, ну или повесь её на кнопку
__________________
cadtools

Последний раз редактировалось TararykovDG, 07.10.2011 в 11:24. Причина: добавлена строка (vl-load-com)
TararykovDG вне форума  
 
Автор темы   Непрочитано 19.10.2010, 19:31
#12
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


TararykovDG, то что доктор прописал!
Спасибо
Yuzer вне форума  
 
Непрочитано 04.10.2011, 11:43
#13
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


Почему-то на некоторых компах, при прочих одинаковых условиях не пашет. Даже при выборе через TAB команда в списке не появляется?.. Кто знает почему?
angel-fear вне форума  
 
Непрочитано 04.10.2011, 12:14
#14
TararykovDG

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


Цитата:
Сообщение от angel-fear Посмотреть сообщение
Почему-то на некоторых компах, при прочих одинаковых условиях не пашет. Даже при выборе через TAB команда в списке не появляется?.. Кто знает почему?
Как не пашет, что ACAD выдает, при вводе команды get-last-select? Что это неизветсная команда или еще что-то? Или не подсвечиваются ранее выбранные примитивы? И что значит на некоторых компах, и при прочих одинаковых условиях? И там и там осенью код запускали?
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 04.10.2011, 15:44
#15
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


Винда одна (ХР) автокад один (2010) осенью, да )
Пишет неизвестная команда, хотя лисп 100% загружен.
На моем компе все работает... странности какие-то.
angel-fear вне форума  
 
Непрочитано 04.10.2011, 16:26
#16
TararykovDG

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


angel-fear, на компе, где на работает код пробуй открыть lisp-файл в VLIDE и там в пошаговом режиме все отследить
Полезности в редакторе VLIDE
Полезности в редакторе VLIDE, часть 2
P. S. За "Полезности..." спасибо Кулик Алексей aka kpblc
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 06.10.2011, 10:11
#17
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


тут обсуждалось .
"макрос попробуй (SSSETFIRST nil (ssget "_P")) " проще некуда!
Евгений А. вне форума  
 
Непрочитано 06.10.2011, 10:22
#18
TararykovDG

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


Цитата:
Сообщение от Евгений А. Посмотреть сообщение
тут обсуждалось .
"макрос попробуй (SSSETFIRST nil (ssget "_P")) " проще некуда!
Евгений А., а теперь попробуйте выделять примитивы на рамкой, а по одному и в какой-то момент нажать Esc, а потом "макрос попробуй (SSSETFIRST nil (ssget "_P")) " проще некуда! и посмортеть что получиться. У Вас подсветиься только первый выбранный примитив, а не все, как это делается с помощью кода из поста #11. А так да проще некуда!
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 06.10.2011, 21:32
#19
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


TararykovDG, твоя прога постоянно меня выручает. Спасибо тебе огромное.
p.s. А можно сделать, чтоб влисп срабатывал не через get-last-select, а к примеру просто get или подобное? В некоторых лиспах я немного менял вызов.
Yuzer вне форума  
 
Непрочитано 07.10.2011, 08:24
#20
TararykovDG

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


Цитата:
Сообщение от Yuzer Посмотреть сообщение
p.s. А можно сделать, чтоб влисп срабатывал не через get-last-select, а к примеру просто get или подобное? В некоторых лиспах я немного менял вызов.
Yuzer, это сделать элементарно. В кода замени строку (defun c:get-last-select()... на (defun c:get()... или с другим нужным Тебе именем. Я сам постоянно иcпользую эту утилиту, но по-моему проще создать кнопку и на нее повесить вызов лиспа, типа так ^C^Cget-last-select, я так сделал, тогда все равно будет какое там имя у команды и понить его не нужно просто кнопку нажал и набор восстановился
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 07.10.2011, 08:36
#21
Yuzer

Мозговой штурм
 
Регистрация: 26.10.2008
Рідна ненька - Україна, Харків
Сообщений: 5,705


Блин!!! Я эту строку не заметил. Дальше я уже разберусь.
1. Я привык с клавиатуры (мышкой я дольше буду лезть).
2. Я поменяю вызов - будет еще быстрее.
Yuzer вне форума  
 
Непрочитано 07.10.2011, 09:28
#22
Emasi


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


что то я не понял почему когда использовал этот лисп там выходит что "На чертеже еще не было сформировано ни одного набора"
Что я неправильно делаю?
Emasi вне форума  
 
Непрочитано 07.10.2011, 09:38
#23
TararykovDG

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


Emasi, ну значит Вы еще не выбирали ни одного объекта на чертеже. Лисп позволяет восстановить последний выбор, но только в текущей сессии. Итак, Вы загрузили лисп, теперь выбираете с помощью мыши какие-нибудь объекты на чертеже по-одному или рамкой, или и так и так, не имеет значения (пусть Вы их выбирали чтобы удалить), потом нажмите Esc и у Вас пропадут ручки выбора всех выбранных Вами объектов, теперь можно не заново все это выбирать, а просто ввести в ком. строку ACAD'а команду get-last-select и у Вас восстановиться набор выбранных Вами объектов с подсветкой ручек выбора.
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 07.10.2011, 10:50
#24
Emasi


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


Вот вот я и как вы сказали так и делал.Но результат 0.
И после этого в Аутокаде вышла вот это проблема:
previus select.lsp successfully loaded.
Command: ; error: no function definition: VLR-MISCELLANEOUS-REACTOR
Emasi вне форума  
 
Непрочитано 07.10.2011, 11:13
1 | #25
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,426


(vl-load-com) наверняка забыли в код вколотить
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.10.2011, 11:29
1 | #26
TararykovDG

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
(vl-load-com) наверняка забыли в код вколотить
Кулик Алексей aka kpblc так и есть, спасибо
Emasi, испраил код в посте #11, возьми еще раз оттуда.
Offtop: из-за того, что у меня vl-load-com загружается автоматически с автозагружаемым лиспом, постоянно забываю добавлять его в код отдельных лиспов. И потом у меня все работает, а у других как повезет
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 07.10.2011, 13:05
#27
angel-fear

инженер-электрик
 
Регистрация: 21.10.2010
Краснодар
Сообщений: 134


Ага.. вот он где косяк ) значит у меня тоже автоматом грузится где-то.
angel-fear вне форума  
 
Непрочитано 08.10.2011, 08:00
#28
Emasi


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


Вот это другое дело. До здравствует умелые руки
Спасибо
Emasi вне форума  
 
Непрочитано 23.03.2012, 15:13
#29
seregabs


 
Регистрация: 05.03.2012
Санкт-Петербург
Сообщений: 20
<phrase 1=


Это просто великолепно! Спасибо!
seregabs вне форума  
 
Непрочитано 23.04.2012, 19:41
#30
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Но get-last-select не срабатывает, если активна команда, например _move и запрашивается выбор объектов.
Иные же варианты (как то: (SSSETFIRST nil (ssget "_P")) или _p;;) - наоборот - дают набор только при активной команде, и только в том случае, когда над предыдущим набором уже производилась операция (то есть, если я просто повыбирал объекты и нажал Esc, то набор не вернется). Или я что-то не так понял...
Лично я давно привык и пользуюсь кнопкой _p;;, зная, что надо сначала выбрать команду, но тема дала толчок задуматься и посмотреть.
Хотелось бы все же универсальный вариант: активна ли некая команда, неактивна ли - всё одно - выбирался бы последний набор.
skkkk вне форума  
 
Непрочитано 25.04.2012, 11:17
#31
cj_lex


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


как вариант: _select _p
cj_lex вне форума  
 
Непрочитано 25.04.2012, 11:25
#32
TararykovDG

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


Цитата:
Сообщение от cj_lex Посмотреть сообщение
как вариант: _select _p
cj_lex, Вы сообщения этой темы читали или нет, советую прочитать, чтобы понять, о чем речь идет, чем Ваш вариант отличается от поста #8?
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 25.04.2012, 11:27
#33
cj_lex


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


прошу прощения, был невнимателен.
cj_lex вне форума  
 
Непрочитано 24.10.2012, 16:46
#34
Амур

Эксперт МВК
 
Регистрация: 01.10.2006
Санкт-Петербург
Сообщений: 54
<phrase 1= Отправить сообщение для Амур с помощью Skype™


TararykovDG, спасибо большое за программульку - очень ее не хватало после перехода с ArchiCAD'а!!! Все прекрасно работает на 2011, поставил половине работников офиса, все танцуют!
Амур вне форума  
 
Непрочитано 24.10.2012, 18:54
#35
TararykovDG

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


Цитата:
Сообщение от Амур Посмотреть сообщение
спасибо большое за программульку
Амур, пожалуйста, рад что лисп пригодился Вам и Вашим коллегам. Кстати, а почему поставили только половине работников офиса? С остальными не дружите
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 24.10.2012, 23:45
#36
Амур

Эксперт МВК
 
Регистрация: 01.10.2006
Санкт-Петербург
Сообщений: 54
<phrase 1= Отправить сообщение для Амур с помощью Skype™


TararykovDG, другая половина - это "старшие коллеги", которым особо и не нужно никаких новшеств, либо коллеги вообще не работающие в программе))). Скажу так - поставил всем, кому могла пригодиться программка. )
Амур вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Повтор предидущего выбора элементов

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Документация Проектировщику на Torrents DEM Разное 263 03.09.2024 12:25
Порекомендуйте литературу для повышения квалификации(грунты, геотехника) acid Поиск литературы, чертежей, моделей и прочих материалов 6 13.05.2015 22:14
Алгоритм выбора стандартных элементов, вопрос к проектировщикам-машиностроителям. Pavel Samofalov Машиностроение 21 26.04.2010 00:14
Как при помощи Lisp добраться до элементов не активного или вообще закрытого листа DWG? back1981 LISP 3 23.10.2009 19:39
Lisp: Список элементов в слоях ALFMario LISP 4 29.04.2008 17:26