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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Дайте макрос на кнопку LINE

Дайте макрос на кнопку LINE

Ответ
Поиск в этой теме
Непрочитано 05.04.2007, 23:53
Дайте макрос на кнопку LINE
dextron3
 
проектировшик
 
СССР
Регистрация: 01.01.2007
Сообщений: 5,149

Дайте макрос на кнопку LINE, чтобы линия чертилась в заданном слое указанном в макросе

Нигде не могу найти ответ...


^C^C_line .............................


Нужная весчь ускоряет работу
:shock: :? 8)
__________________
инженер проектировшик с опттом программа авто гад образование высшие
Просмотров: 10502
 
Непрочитано 06.04.2007, 17:40
#21
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Кулик Алексей aka kpblc.
Еще ты забыл одну вещь: кавычки "" в команде "_-LAYER"
Вот такой лисп работает:
Код:
[Выделить все]
(defun c:tmp_dco (/ *error* lay)
  (defun *error* (msg)
    (setvar "clayer" lay)
    (princ msg)
    (princ)
  )
  (setq lay (getvar "clayer"))
  (command "_.-layer" "_m" "Razmer" "")
  (command "_.dimcontinue")
  (while (/= (getvar "cmdactive") 0) (command pause))
  (setvar "clayer" lay)
)
Profan вне форума  
 
Непрочитано 06.04.2007, 17:42
#22
Кулик Алексей aka kpblc
Moderator

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


Да, я увидел, но было поздно - уже в ограничение уперся. Лисп-то у меня тоже заработал А вот макрос - нет...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.04.2007, 17:46
#23
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


У меня вот такой макрос сработал:
Код:
[Выделить все]
^C^C(defun c:tmp_dco (/ *error* lay) (defun *error* (msg) (setvar "clayer" lay) (princ msg) (princ))+
(setq lay (getvar "clayer")) (command "_.-layer" "_m" "Razmer" "") (command "_.dimcontinue")+
(while (/= (getvar "cmdactive") 0) (command pause)) (setvar "clayer" lay));tmp_dco
Profan вне форума  
 
Непрочитано 06.04.2007, 17:53
#24
Кулик Алексей aka kpblc
Moderator

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


Ххе, у меня в ADT 2005 "+" не сработал почему-то.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.04.2007, 17:59
#25
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Сейчас проверил в ADT 2005 ENG - работает.
Profan вне форума  
 
Непрочитано 06.04.2007, 18:01
#26
Кулик Алексей aka kpblc
Moderator

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


Ну я сегодня уже ничему не удивляюсь - у меня машина хамит на каждом шагу. Так что спишем на сбой софта
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.04.2007, 18:02
#27
Денис Флюстиков


 
Регистрация: 20.07.2005
СПб
Сообщений: 89


А чем плох вариант:

^C^C^P(defun C:tmp_Den ()(setq a(getvar "clayer"))(vl-cmdf "_.undo" "_g")(vl-cmdf "_.clayer" "Razmer")(vl-cmdf
"_.dimcontinue")(while(=(getvar 'cmdactive)1)(vl-cmdf pause))(vl-cmdf "_.clayer" a "_.undo" "_e")(setq a nil));tmp_Den

ведь при использовании (vl-cmdf pause) и не обязательно перезадавать *error* и есть группировка для отката?
Денис Флюстиков вне форума  
 
Непрочитано 06.04.2007, 18:11
#28
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Тоже работает. А вот как убрать в конце запрос о выборе исходного размера? Чтобы функция завершалась по однократному Enter.
Profan вне форума  
 
Непрочитано 06.04.2007, 18:19
#29
Seregadwg

design interior
 
Регистрация: 18.09.2006
Moldova
Сообщений: 8


Спасибоооооооооооооо!!!!!!!!!!!!!
С меня бутылка лучшего молдавского вина
Seregadwg вне форума  
 
Автор темы   Непрочитано 06.04.2007, 18:25
#30
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


Цитата:
Сообщение от Zouss
легким движением рук подчеркиватель текста превращается в заменитель слоя
Код:
[Выделить все]
(defun C:chanlay (/ ss ln)
  (setq ss nil
	ln (getstring T "введите имя слоя:")
  )
  (ent_chanlay
    (while (not ss) ;_ not
      (progn
	(prompt "Выберите объекты:")
	(setq ss (ssget))
      ) ;_ progn
    ) ;_ while
    ln
      ) ;_ ent_chanlay
) ;_ defun

(defun ent_chanlay (ss pre / l ed en dx1)
  (setq l (sslength ss))
  (repeat l
    (setq ed (entget (setq en (ssname ss 0)))
	  ed (subst (cons 8 pre) (assoc 8 ed) ed
	     ) ;_ subst
    ) ;_ setq
    (ssdel en ss)
    (entmod ed)
  ) ;_ repeat
) ;_ defun
традиционно никаких проверок на правильность ввода имени слоя и на наличие такого слоя в чертеже нет%)
Жду пива
Потом объясню для чего оно нужно

А нельзя чтобы не спрашивало ввода имени слоя,
куда вписать чтобы автоматически было,
а то по скорости получается быстрее панель со слоями нажать
:?: :P
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 06.04.2007, 19:24
#31
Zouss


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


вместо
Код:
[Выделить все]
(getstring T "введите имя слоя:")
напишите имя слоя в кавычках например "0" или "Defpoints" или "Layer1", понятное дело прога будет работать только для одного слоя, если покажется неудобным можно еще чуть подредактировать, но это уже после выходных
Zouss вне форума  
 
Автор темы   Непрочитано 06.04.2007, 22:51
#32
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


Цитата:
Сообщение от Zouss
вместо
Код:
[Выделить все]
(getstring T "введите имя слоя:")
напишите имя слоя в кавычках например "0" или "Defpoints" или "Layer1", понятное дело прога будет работать только для одного слоя, если покажется неудобным можно еще чуть подредактировать, но это уже после выходных
А макроса нету для кнопки, потому что мне столько сколько слоев лиспов делать, автокад неперенесет такой нервный срыв
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 06.04.2007, 23:07
#33
Dym


 
Регистрация: 27.09.2005
Двинскъ
Сообщений: 586
Отправить сообщение для Dym с помощью Skype™


есть ^C^C_Laymcur и ^C^C_laycur
Dym вне форума  
 
Непрочитано 07.04.2007, 04:48
#34
Vova

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


Цитата:
Сообщение от dextron3
А для тех кто палитру инструментов терпеть не может?

Она мешается и автокад подгружает лишний раз
Вероятно, твой предок, впервые увидевший автокад с кнопками (на первых версиях их не-было, пользовали боковое меню) также сказал-мол, кнопки терпеть не может. Палитра это одно из лучших, что изобрел автодеск в последних версиях. Как это она мешается? Она ведь сворачивается в полоску и становится уже чем вертикальный столбик с инструментами. Может, ты не знаешь, как это сделать? Так ударь по ее кромке правой кнопкой.и почитай меню. Твоя проблема легко решается через палитру. И вообще, это надуманная проблема. Никакой необходимости задавать линии слой нет. Блоку или размеру полезно задать слой, а тем примитивам, которые могут быть везде, нет смысла
Vova вне форума  
 
Непрочитано 09.04.2007, 19:35
#35
Zouss


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


Обещанный слегка подправленный LISP
Код:
[Выделить все]
(defun C:chanlay (/ ss ln)
  (setq ln (getstring T "введите имя слоя:")) ;_ setq
  (ent_chanlay ln)
) ;_ defun

(defun ent_chanlay (pre / l ed en dx1)
  (prompt (strcat "\nПеренос выбранных объектов на слой " pre))
  (setq	ss nil
	ss (while (not ss) ;_ not
	     (progn
	       (setq ss (ssget))
	     ) ;_ progn
	   ) ;_ while
	l  (sslength ss)
  ) ;_ setq
  (repeat l
    (setq ed (entget (setq en (ssname ss 0)))
	  ed (subst (cons 8 pre)
		    (assoc 8 ed)
		    ed
	     ) ;_ subst
    ) ;_ setq
    (ssdel en ss)
    (entmod ed)
  ) ;_ repeat
  (princ)
) ;_ defun
Макрос на кнопке для переноса объектов в слой под названием ИмяСлоя может выглядеть так
Код:
[Выделить все]
^C^C(ent_chanlay "ИмяСлоя")
Макрос на кнопке для переноса объектов в текущий слой может выглядеть так
Код:
[Выделить все]
^C^C(ent_chanlay (getvar "CLayer") )
кроме того вам по прежнему доступна команда chanlay, которая имя слоя будет спрашивать
2 ALL, я тут случайно велосипед не изобрел?
Zouss вне форума  
 
Непрочитано 09.04.2007, 20:49
#36
VVA

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


Проезжая мимо на велосипеде...
Неплохо было б с помощью snvalid убедиться, что введено допустимое имя слоя
Код:
[Выделить все]
(defun C:chanlay (/ ss ln) 
  (setq ln (getstring T "введите имя слоя:")) ;_ setq 
  (ent_chanlay ln) 
) ;_ defun 

(defun ent_chanlay (pre / l ed en dx1)
  (if (snvalid pre)
  (progn  
  (prompt (strcat "\nПеренос выбранных объектов на слой " pre)) 
  (setq   ss nil 
   ss (while (not ss) ;_ not 
        (progn 
          (setq ss (ssget)) 
        ) ;_ progn 
      ) ;_ while 
   l  (sslength ss) 
  ) ;_ setq 
  (repeat l 
    (setq ed (entget (setq en (ssname ss 0))) 
     ed (subst (cons 8 pre) 
          (assoc 8 ed) 
          ed 
        ) ;_ subst 
    ) ;_ setq 
    (ssdel en ss) 
    (entmod ed) 
  ) ;_ repeat
  )
  (princ (strcat "\nНедопустимое имя слоя " pre))  
  )  
  (princ) 
) ;_ defun
Хотя сейчас там (в именах слоев) почти все разрешено ...
VVA вне форума  
 
Непрочитано 10.04.2007, 09:59
#37
Zouss


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


по моему не обязательно - прога анонсирована как "бэз проверок"
все это и даже еще кое-что есть в ExpressTools, таким образом этот кусочек реально мб полезен как часть бОльшей проги для какой-то комплексной обработки файла, так что, dextron3, ждем-с объяснений для чего все это было нужно?
Zouss вне форума  
 
Непрочитано 17.03.2009, 17:18
#38
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Возникла необходимость создания кнопки "Вставить провод" такая кнопка есть в AutoCAD Electrical. Суть такая по сути нужно нарисовать две ортогональные линии двумя щелчками. Что-то у меня не получается сделать паузу на указание именно второй координаты.
Линия работать должна так: включается режим орто (если выключен), указывается первая координата линии, вторая координата будет равна началу первой линии (если Y не равен 0)- эту координату не указываю, и указываю конец второй линии. Как такое реализовать?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 17.03.2009, 17:27
#39
KSI


 
Регистрация: 19.03.2004
Калининград
Сообщений: 1,842


Это что, рисовавать как прямоугольник, только без двух поперечных линий?
KSI вне форума  
 
Непрочитано 17.03.2009, 17:30
#40
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Да!
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Дайте макрос на кнопку LINE