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

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

Мои макрокоманды

Ответ
Поиск в этой теме
Непрочитано 19.05.2008, 15:20 1 |
Мои макрокоманды
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,825

Предлагаю в данной теме выкладывать используемые макрокоманды.
Выкладывать прошу с описанием, что данная макрокоманда выполняет и как. Если можно, то и рисунки к кнопкам соотвественно.

Выкладываю 4 своих макрокоманды.

Улучшенная команда _Break, разрыв в одной точке с повтором по правой клавише мышки.
Цитата:
^C^C^P(defun c:break2 () (vl-cmdf "_break" pause "f" pause "@")(princ));break2;
ps. Макрокоманда не моя. Рисунок со старой кнопки.


Объект Xline строится горизонтально
Цитата:
^C^C_xline;_h;
Объект Xline строится вертикально
Цитата:
^C^C_xline;_v;

Объект Xline строится по объекту (не работает по примитивам блока и arx объектов сторонних навесок на автокад).
Цитата:
*^C^C_xline;_offset;_Through;_nea;\_none;@;;
Макрокоманда зациклена, выход по Esc.
ps. Макрокоманда не моя.


Объект Xline строится по объекту, с поворотом в указанной точке на 90 градусов (не работает по примитивам блока и arx объектов сторонних навесок на автокад)
Цитата:
^C^C_xline;_offset;_Through;_nea;\_none;@;^C^C_rotate;_last;;\90;
ps. Макрокоманда доработана из предыдущей.

Соотвественно и кнопочки
Button.rar

__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 448787
 
Непрочитано 12.04.2009, 21:26
#221
Gecuba


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


AlphaGeo, Спасибо еще раз!
Вроде работает - очень удобно когда надо сразу в нескольких местах разорвать.

Последний раз редактировалось Gecuba, 12.04.2009 в 21:34.
Gecuba вне форума  
 
Непрочитано 18.05.2009, 09:53
#222
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


День добрый, вопрос глупый и простой, но что то не нашёл а надо срочно.

Сделал команду ^C^Cреген;реген (для своего дин блока, так как его надо дважды регенить что бы получить расчёт)

Но на большом чертеже понятно что регенить надо только один объект, либо выбрав, либо последний.

В автокаде команды Реген и Всереген (2010 русский)
Не могу найти команду коотрая бы регенерировал только один объект.

Подскажите научить помогите ) (возможное подчеркнуть)
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.
Juss_00 вне форума  
 
Непрочитано 18.05.2009, 10:36
#223
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Имелось ввиду обновление текстовых полей в блоке? Тогда тебе помодет команда _updatefield.
Makswell вне форума  
 
Непрочитано 18.05.2009, 11:33
#224
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


Спасибо! Эту команду я справшивл в "динамических блоках".
Терь напишу нормально этот макрос. )

Цитата:
^C^Cобнполе;последний;обнполе;последний;
Не получается что бы второй раз то же выделялся автоматически команндой "последний"
Посветуете?
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.

Последний раз редактировалось Juss_00, 18.05.2009 в 11:44. Причина: Вопрос
Juss_00 вне форума  
 
Непрочитано 18.05.2009, 12:07
#225
Павлов Андрей

Инженер-строитель
 
Регистрация: 27.05.2004
Республика Беларусь
Сообщений: 67


Здравствуйте . А можно ли создать макрос , удлиняющий отрезок на указанную величину сразу в обе стороны , т.е. как по команде _lengthen DElta , указываешь отрезок , но в обе стороны ?
__________________
Andrey
Павлов Андрей вне форума  
 
Непрочитано 18.05.2009, 13:13
#226
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Juss_00 Посмотреть сообщение
Спасибо! Эту команду я справшивл в "динамических блоках".
Терь напишу нормально этот макрос. )

Цитата:
^C^Cобнполе;последний;обнполе;последний;
Не получается что бы второй раз то же выделялся автоматически команндой "последний"
Посветуете?
Juss_00, может стоит делать это вот так:
Код:
[Выделить все]
^C^Cобнполе;последний;;обнполе;последний;;
?
 
 
Непрочитано 18.05.2009, 13:28
#227
Profan


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


Цитата:
Сообщение от Павлов Андрей Посмотреть сообщение
Здравствуйте . А можно ли создать макрос , удлиняющий отрезок на указанную величину сразу в обе стороны , т.е. как по команде _lengthen DElta , указываешь отрезок , но в обе стороны ?
Код:
[Выделить все]
;***********l_l.lsp - Удлинение отрезка в обе стороны
;                     на заданную величину.
;   Freeware. Автор Владимир Громов. Август 2005 г.
;
;   Если величину удлинения задать со знаком минус (-), то
;   вместо удлинения получим укорочение.
(defun C:L_L ( / tn tk delta flag ob line)
    (setvar "CMDECHO" 0)
    (setq delta (getreal "\n Величина удлинения линии (ENTER-отказ): "))
    (if delta
        (progn
        (setq flag T)
        (while flag
        (setq ob (entsel "\n Выберите отрезок (ENTER-завершить): "))
        (if ob
            (progn
            (setq line (entget (car ob)))
                  (if (= (cdr (assoc 0 line)) "LINE")
                  (progn
                  (setq tn (cdr (assoc 10 line)))
                  (setq tk (cdr (assoc 11 line)))
                  (command "_LENGTHEN" "_delta" delta tn tk "")
                  ); progn
                  ); if
             ); progn
                  (setq flag nil)
          ); if
        ); while
        ); progn
        (princ "\n Отказ.")
    ); if
(princ)
)
Если код сохранить в файле l_l.lsp, то макрос для кнопки может иметь вид
Код:
[Выделить все]
 
^C^C(if (not C:L_L) (load "l_l")) L_L
Profan вне форума  
 
Непрочитано 18.05.2009, 14:50
#228
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


AlphaGeo, нет. Прежде чем выложить пробывал такой вариант. Второй раз все равно просит указать объект.
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.
Juss_00 вне форума  
 
Непрочитано 18.05.2009, 14:54
#229
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от Juss_00 Посмотреть сообщение
AlphaGeo, нет. Прежде чем выложить пробывал такой вариант. Второй раз все равно просит указать объект.
Что в командной строке пишет?

Добавлено:
Сейчас еще раз проверил, у меня работает... Никаких запросов нет.

Последний раз редактировалось AlphaGeo, 18.05.2009 в 15:01.
 
 
Непрочитано 18.05.2009, 15:26
#230
Павлов Андрей

Инженер-строитель
 
Регистрация: 27.05.2004
Республика Беларусь
Сообщений: 67


Profan , спасибо . Владимиру Громову - спасибо за лисп .
__________________
Andrey
Павлов Андрей вне форума  
 
Непрочитано 18.05.2009, 16:20
#231
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Павлов Андрей, Вообще-то ты сказал спасибо одному и тому же человеку . Но лучше дважды сказать, чем дважды промолчать.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.05.2009, 16:37
#232
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Может лучше так
Цитата:
^C^C_Updatefield;_Last;;_Updatefield;_Last;;
не у всех стоит русский кад
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 18.05.2009, 16:50
#233
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от zenon Посмотреть сообщение
Может лучше так
Код:
[Выделить все]
^C^C_Updatefield;_Last;;_Updatefield;_Last;;
не у всех стоит русский кад
zenon, какая разница? Juss_00 жалуется, что сам макрос не работает, а записан он также, хоть и на русском.
 
 
Непрочитано 18.05.2009, 18:19
#234
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


zenon, то же самое. (
В общем придумал как решить это. КОгда те блоки начинал делать только взялся за дин. блоки, теперь избалю от ссылки на "поля" и сделаю на "натуральные" объекты должно будет помочь.

AlphaGeo, не тот что вставил сюда, из полу рабочей кнопки взял первый раз обновлял, второй раз просил выделить объект.

У меня не получилось дважды регенить, обновлять последний объект, может только если применить фиктивное копирование получится. Дома попробую. =)
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.
Juss_00 вне форума  
 
Непрочитано 18.05.2009, 18:23
#235
AlphaGeo


 
Сообщений: n/a


Juss_00, может тогда дело в твоем блоке? Выложил бы сюда. Да и что в командной строке выводится в процессе выполнения этого макроса?
 
 
Автор темы   Непрочитано 19.05.2009, 12:41
#236
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,825
<phrase 1=


Juss_00,
у меня все обновляет
попробуй может так пройдет
Цитата:
^C^C_Updatefield;_Previous;;_Updatefield;_Previous;;
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 19.05.2009, 12:58
#237
Profan


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


Этот макрос не должен работать, если перед его запуском не выбирались никакие объекты (поля), т.е. нет предыдущего набора.
Profan вне форума  
 
Непрочитано 19.05.2009, 17:37
#238
Juss_00

Инженер
 
Регистрация: 11.12.2007
Москва
Сообщений: 295


Само собой, но тестирвоал специально выбирая, разные объекты и перемещая несколько раз и его и другие объекты и с другими командами. Команды типо Копировать, переместить и прочее раотают нормально. А команды реген и обновитьполе нет, после первого выбора второй раз не находят последний объект.
__________________
Live as though tomorrow you will die,
Study as though you will live eternally.
Juss_00 вне форума  
 
Непрочитано 19.05.2009, 18:34
#239
Profan


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


А зачем в последнем макросе присутствует пробел в конце перед ;;? Это ведь соответствует ;;;.
Profan вне форума  
 
Непрочитано 16.06.2009, 07:19
#240
Jonas

конструктор машиностроитель
 
Регистрация: 14.05.2007
Новосибирск
Сообщений: 893


Для расчетов на прочность в среде Автокада не заменима команда _massprop но значение получаются в миллиметрах (поскольку модель в мм.)
а для дальнейших расчетов в основном удобней в сантиметрах (например в программе Александра Анисина "KarkasA"
http://www.karkasa.narod.ru/).
Приходиться делать следующее:
- выполнить сечение 3Д тела,
- выдавить на 10,
- масштабировать на 0,1,
- установить ПСК в ентр тяжести,
- и затем применять _massprop,
- после всего удалить не нужное.

Чтобы облегчить жизнь выстрадал макрос -

Код:
[Выделить все]
^C^C_section;\;xy;\'cal;p=@;_copybase;@;_last;;_extrude;@;;10;_scale;_last;;@;0.1;
_multicentroid2;_last;;;пск;начало;@;_erase;_last;;масс-хар;_last;;;_erase;_last;;
Выбираешь тело, указываешь точку сечения и получаешь текстовое окно с результатом.
После завершения команду в буфере обмена находиться сечение которое можно использовать для протокола, памятки и пр.

Для работы макроса нужно:
- чтобы расчетное сечение было в плоскости XY,
- если сечение составное - все объединить,
- должна стоять Лис-программа по отрисовке шара в цнтре тяжести. К сожжалению не помню автора и где брал, поэтому выкладываю здесь.


Код:
[Выделить все]
(defun c:multicentroid2 (/ centroid delta ents firstpoint firstpointmass length1 length12 mass secondpoint secondpointmass
       osmode aa1)
(vl-load-com)
  (defun centroid (entity /)
    (vlax-safearray->list (vlax-variant-value (vla-get-centroid (vlax-ename->vla-object entity))))
    ) ;_ end of defun
  (defun mass (entity /)
    (vla-get-volume (vlax-ename->vla-object entity))
    ) ;_ end of defun
  (if (setq ents (ssget '((0 . "3DSOLID"))))
    (progn
      (setq ents (vl-remove-if-not 'atom (mapcar 'cadr (ssnamex ents))))
      (setq firstpoint (centroid (car ents)))
      (setq firstpointmass (mass (car ents)))
      (if (setq ents (cdr ents))
  (progn
    (foreach n ents
      (setq secondpoint (centroid n))
      (setq secondpointmass (mass n))
      (setq length12 (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- firstpoint secondpoint)))))
      (setq length1 (/ (* secondpointmass length12) (+ firstpointmass secondpointmass)))

(if (and (= length1 length12)(= length1 0))(setq length12 1))

      (setq delta (mapcar '(lambda (x) (/ (* length1 x) length12)) (mapcar '- firstpoint secondpoint)))
      (setq firstpoint (mapcar '- firstpoint delta))
      (setq firstpointmass (+ firstpointmass secondpointmass))
      ) ;_ end of foreach
    ) ;_ end of progn
  ) ;_ end of if

(setq osmode (getvar "osmode")
      firstpoint (trans firstpoint 0 1))

(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(setvar "cmdecho" 0)
(setvar "osmode" 0)

(command "_.circle" firstpoint 20 ;Радиус сферы по умолчанию
   "_.erase" (entlast) "")
(vl-cmdf "_.circle" firstpoint)

(setvar "osmode" osmode)
(princ "\nРадиус сферы в центре масс <20>: ")
(if (vl-cmdf pause)(progn

(setq aa1 (cdr (assoc 40 (entget (entlast)))))
(setvar "osmode" 0)
(command "_.erase" (entlast) ""
   "_.sphere" firstpoint aa1
    ;Цвет сферы (или удалить строку)
   )
(setvar "osmode" osmode)
))

(setvar "cmdecho" 1)
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
      (princ)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun

Все работает но если в сотавном сечении тела не касаются (хотя и объединяются), то считается только одно тело.
Причина в том что после выдавливания сечения (хотя оно и едино) получаем отдельные тела.

Будьте добры профи, может можно это решить?
И еще вопрос, можно ли как то извлекать данные из текстового окна програмно?

Последний раз редактировалось Кулик Алексей aka kpblc, 16.06.2009 в 14:47.
Jonas вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Мои макрокоманды

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мои динамические блоки Shoorup Динамические блоки 2713 21.04.2011 23:34
Повторение выполнения макрокоманды по циклу. КАК? Kostinok AutoCAD 12 05.12.2007 15:40
Мои проекты Vova Разное 10 08.10.2007 23:18
Мои палитры инструментов на соседний компьютер Pave1 AutoCAD 4 27.06.2006 09:45