Re: Автоматизация группового изменения масштаба

Макрос, поставленный на Tool Palettes, позволяет изменить себя за секунду-другую. И меня много подобных макросов с оперативным вмешательством

Re: Автоматизация группового изменения масштаба

У нас Tool Palettes вообще не пользуются

Re: Автоматизация группового изменения масштаба

C AutoCAD 2005

Re: Автоматизация группового изменения масштаба

> Vova
увы, у нас 2004

Re: Автоматизация группового изменения масштаба

В 2004 доступ к макросу для редактирования столь-же легок и быстр, как в новых автокадах в палеты. Хочу получить от тебя ответ типа НЕ ХОЧУ МАКРОС, ХОЧУ ЛИСП. Иначе твое упрямство не понятно

Re: Автоматизация группового изменения масштаба

> Vova
А с самого начала не понятно было, да?
Лень - великий двигатель прогресса!
Не хочу лазить в кишках макроса за каждым изменением одной цифИри, это всё лишние телодвижения.
А упрямство - это у вас, мужиков, особенно у шефов, а у блондинок - настойчивость, непонятливый Вы наш.
Развели бодягу на 30 постов вместо чтоб накатать пять строчек кода.
(Ффууу, выговорилась, вылила на мужиков все, что думаю, полегче стало... Чем же заняться? Подкрашу-ка ногти, а то настроение ниже плинтуса...)
:)

Re: Автоматизация группового изменения масштаба

А упрямство — это у вас, мужиков

Это я упрямо хочу приучить тебя к хорошему. Имей в виду, лисп надо загружать, если операции не частые, то подгружать при необходимости если частые-навсегда. И все равно в ком строке писать коэф. Потом щелкать правой кнопкой. Для такого пустяка макрос разумней

Re: Автоматизация группового изменения масштаба

Да я бы рада щелкать правой кнопкой! Да только ком строка все равно каждый раз требует ручного ввода коэффициента: Specify scale factor or [Reference]:
А "не часто" или "навсегда", так я это и делаю с разными лиспами.

Re: Автоматизация группового изменения масштаба

> Малявка
Может здесь что-нибудь подойдет
Нужен ЛИСП по масштабированию

Re: Автоматизация группового изменения масштаба

> VVA
Ой, это еще более неудобно. Мне надо-то всего - нажать кнопочку, указать коэффициент, а потом выделять примитивы рамками или перекрестием и указывать базу масштабирования. Выделять и указывать, выделять и указывать...

Re: Автоматизация группового изменения масштаба

Малявка пишет:

Выделять и указывать, выделять и указывать...

Вот такая программулька получилась
(defun C:MSCALE ( / ss msht pt )
  (initget 7)
  (setq msht (getdist "\nУкажите масштабный коэффициент: "))
  (princ "\nДля выхода нажмите ESC")    
  (while t
    (if (and
      (setq ss (ssget "_:S"))
      (not (initget 1))
      (setq pt (getpoint "\nБазовая точка для масштабирования: "))
      )
      (command "_.SCALE" ss "" "_non" pt msht)
      )
    (princ "\nДля выхода нажмите ESC")
    )
  )

Re: Автоматизация группового изменения масштаба

Текст

Вот такая программулька получилась

Попал в код случайно. Его копировать не нужно

Re: Автоматизация группового изменения масштаба

Еще один вариант:

(defun c:mscale (/                 *error*           adoc
                 selset            _kpblc-conv-selset-to-ename
                 lst-getboundingbox                  scale
                 center            lst
                 )
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
  (defun _kpblc-conv-selset-to-ename (selset)
                                     ;|
*    Функция преобразования набора, полученного через (ssget), в список
* ename-примитивов.
*    Параметры вызова:
*    selset    набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (if selset
      (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
      ) ;_ end of if
    ) ;_ end of defun
  ;; https://www.caduser.ru/forum/topic22552.html
  (defun lst-getboundingbox (lst)
    (vl-load-com)
    (if (and lst (listp lst))
      ((lambda (x)
         (list
           (apply
             (function mapcar)
             (cons (function min) (mapcar (function car) x))
             ) ;_  apply
           (apply
             (function mapcar)
             (cons (function max) (mapcar (function cadr) x))
             ) ;_  apply
           ) ;_  list
         ) ;_  lambda
        (vl-remove-if
          (function null)
          (mapcar
            (function
              (lambda (x / minp maxp)
                (if (not (vl-catch-all-error-p
                           (vl-catch-all-apply
                             (function vla-getboundingbox)
                             (list x 'minp 'maxp)
                             ) ;_  vl-catch-all-apply
                           ) ;_  vl-catch-all-error-p
                         ) ;_  not
                  (list (vlax-safearray->list minp)
                        (vlax-safearray->list maxp)
                        ) ;_  list
                  ) ;_  if
                ) ;_  lambda
              ) ;_  function
            lst
            ) ;_  mapcar
          ) ;_  vl-remove-if
        )
      ) ;_  if
    ) ;_ end of defun
  (if
    (= (type (setq scale (vl-catch-all-apply
                           '(lambda ()
                              (cond ((getdist (strcat "\nМасштабный коэффициент <"
                                                      (vl-princ-to-string
                                                        (cond
                                                          (*scale*)
                                                          (t 1.)
                                                          ) ;_ end of cond
                                                        ) ;_ end of vl-princ-to-string
                                                      "> : "
                                                      ) ;_ end of strcat
                                              ) ;_ end of getdist
                                     )
                                    (t
                                     (cond (*scale*)
                                           (t 1.)
                                           ) ;_ end of cond
                                     )
                                    ) ;_ end of cond
                              ) ;_ end of lambda
                           ) ;_ end of vl-catch-all-apply
                   ) ;_ end of setq
             ) ;_ end of type
       'real
       ) ;_ end of =
     (progn
       (setq *scale* scale
             adoc    (vla-get-activedocument (vlax-get-acad-object))
             ) ;_ end of setq
       (while (setq selset (ssget "_:L"))
         (vla-startundomark adoc)
         (setq lst    (lst-getboundingbox
                        (setq selset (mapcar
                                       'vlax-ename->vla-object
                                       (_kpblc-conv-selset-to-ename selset)
                                       ) ;_ end of mapcar
                              ) ;_ end of setq
                        ) ;_ end of lst-getboundingbox
               center (mapcar
                        '(lambda (a b)
                           (* (+ a b) 0.5)
                           ) ;_ end of lambda
                        (car lst)
                        (last lst)
                        ) ;_ end of mapcar
               ) ;_ end of setq
         (foreach sub selset
           (vla-scaleentity sub (vlax-3d-point center) scale)
           ) ;_ end of foreach
         (vla-endundomark adoc)
         ) ;_ end of while
       ) ;_ end of progn
     ) ;_ end of if
  ) ;_ end of defun

Re: Автоматизация группового изменения масштаба

Черт, форматирование слетело. Попробуем еще раз:

(defun c:mscale (/                 *error*           adoc
                 selset            _kpblc-conv-selset-to-ename
                 lst-getboundingbox                  scale
                 center            lst
                 )
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun
  (defun _kpblc-conv-selset-to-ename (selset)
                                     ;|
*    Функция преобразования набора, полученного через (ssget), в список
* ename-примитивов.
*    Параметры вызова:
*    selset    набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (if selset
      (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))
      ) ;_ end of if
    ) ;_ end of defun
  ;; https://www.caduser.ru/forum/topic22552.html
  (defun lst-getboundingbox (lst)
    (vl-load-com)
    (if (and lst (listp lst))
      ((lambda (x)
         (list
           (apply
             (function mapcar)
             (cons (function min) (mapcar (function car) x))
             ) ;_  apply
           (apply
             (function mapcar)
             (cons (function max) (mapcar (function cadr) x))
             ) ;_  apply
           ) ;_  list
         ) ;_  lambda
        (vl-remove-if
          (function null)
          (mapcar
            (function
              (lambda (x / minp maxp)
                (if (not (vl-catch-all-error-p
                           (vl-catch-all-apply
                             (function vla-getboundingbox)
                             (list x 'minp 'maxp)
                             ) ;_  vl-catch-all-apply
                           ) ;_  vl-catch-all-error-p
                         ) ;_  not
                  (list (vlax-safearray->list minp)
                        (vlax-safearray->list maxp)
                        ) ;_  list
                  ) ;_  if
                ) ;_  lambda
              ) ;_  function
            lst
            ) ;_  mapcar
          ) ;_  vl-remove-if
        )
      ) ;_  if
    ) ;_ end of defun
  (if
    (= (type (setq scale (vl-catch-all-apply
                           '(lambda ()
                              (cond
                                ((getdist
                                   (strcat "\nМасштабный коэффициент <"
                                           (vl-princ-to-string
                                             (cond
                                               (*scale*)
                                               (t 1.)
                                               ) ;_ end of cond
                                             ) ;_ end of vl-princ-to-string
                                           "> : "
                                           ) ;_ end of strcat
                                   ) ;_ end of getdist
                                 )
                                (t
                                 (cond (*scale*)
                                       (t 1.)
                                       ) ;_ end of cond
                                 )
                                ) ;_ end of cond
                              ) ;_ end of lambda
                           ) ;_ end of vl-catch-all-apply
                   ) ;_ end of setq
             ) ;_ end of type
       'real
       ) ;_ end of =
     (progn
       (setq *scale* scale
             adoc    (vla-get-activedocument (vlax-get-acad-object))
             ) ;_ end of setq
       (while (setq selset (ssget "_:L"))
         (vla-startundomark adoc)
         (setq lst    (lst-getboundingbox
                        (setq selset (mapcar
                                       'vlax-ename->vla-object
                                       (_kpblc-conv-selset-to-ename selset)
                                       ) ;_ end of mapcar
                              ) ;_ end of setq
                        ) ;_ end of lst-getboundingbox
               center (mapcar
                        '(lambda (a b)
                           (* (+ a b) 0.5)
                           ) ;_ end of lambda
                        (car lst)
                        (last lst)
                        ) ;_ end of mapcar
               ) ;_ end of setq
         (foreach sub selset
           (vla-scaleentity sub (vlax-3d-point center) scale)
           ) ;_ end of foreach
         (vla-endundomark adoc)
         ) ;_ end of while
       ) ;_ end of progn
     ) ;_ end of if
  ) ;_ end of defun

Re: Автоматизация группового изменения масштаба

Черт, совсем забыл. В самом начале надо добавить (vl-load-com)...

Re: Автоматизация группового изменения масштаба

Vova пишет:

Это сгодится? *^C^C_Scale;\\;\2 увеличивает в 2 раза. На что заменишь двойку, таков будет новый коэффициент.

А мона так? *^C^C_Scale;\\;\(getvar "USERR1")
Тока за 2-ой кнопкой закрепить^C^CUSERR1

Re: Автоматизация группового изменения масштаба

Можно. Масштаб хочешь установить на Userr1? Программисты поругивают применение User.. так как его может изменить другая прога, также его применяющая

Re: Автоматизация группового изменения масштаба

> Vova
Не поругивают, а не рекомендуют :)

Re: Автоматизация группового изменения масштаба

Следовательно, только очень старые проги могут применить User... Можно идти по второму кругу и опять его использовать

Re: Автоматизация группового изменения масштаба

или так
*^C^C_Scale;\\;\MyScale
а за 2-ой кнопкой закрепить^C^C(setq MyScale (getreal "\nШо? Опять? Ну давай, давай : "))

Re: Автоматизация группового изменения масштаба

В общем, ясно. Код писался зря.

Re: Автоматизация группового изменения масштаба

А что ты хочешь изменять Scalе-ом (брунетка (2008-07-09 15:38:22), какие объекты масштабировать?

Re: Автоматизация группового изменения масштаба

> Vova

А что ты хочешь изменять Scalе-ом


Все, что плохо читается в перенасыщеном чертеже (чтоб уменьшить и не налазило друг на друга)

Re: Автоматизация группового изменения масштаба

А причем здесь user?

Re: Автоматизация группового изменения масштаба

А user, то есть я, буду пользоваться етим средством.