Тема: Как сделать чтоб цифры сами увиличивались по возростанию

Как сделать чтоб цифры сами увиличивались по возростанию? Т.е. надо пронумеровать по порядку 200 точек 1 2 3 ... 199 200! Чтоб не изменять самому каждое число!!!

Re: Как сделать чтоб цифры сами увиличивались по возростанию

> KC
Надо написать простенькую программку на лиспе.

Re: Как сделать чтоб цифры сами увиличивались по возростанию

Или найти ее в этом форуме.
Точно была. И не одна.

Re: Как сделать чтоб цифры сами увиличивались по возростанию

Господа программеры, а ведь задачка не так проста, как кажется. Я написал два макроса:
На первую кнопку:

^P(setq nummer (1- (getint "\nЗадайте текущий номер: ")));(princ);

а на вторую кнопку - такой:

^P(setvar "USERS1" (itoa (setq nummer (1+ (if nummer nummer 0)))));$M=$(getvar,USERS1);

Теперь по первой кнопке можно задавать текущий номер, например, единицу, а по второй - вставлять этот текст в командную строку.
Только вот какая проблемка. В комстроку число попадает, на единицу увеличивается, всё отлично. Но вот команды TEXT и DTEXT ждут ввода с клавиатуры, а команда -MTEXT вписывает в текст лисп-выражение перед номером, который генерится дизелем. Да и неудобно MTEXT'ом номера-то проставлять.

Re: Как сделать чтоб цифры сами увиличивались по возростанию

Maxim T, ты чего... потерялся??? wink
Держи макрос и ставь номерки текстом

*^C^C_text;\;;$M=$(getvar,useri1);_useri1;$M=$(+,$(getvar,useri1),1);

Надеюсь разберешся с настройками smile

Re: Как сделать чтоб цифры сами увиличивались по возростанию

> VK
Так работает, но у вас нет защиты "от дурака", а у меня есть: (setq nummer (1+ (if nummer nummer 0))), и сделать её, имхо, можно только на лиспе. "От дурака" - то есть если юзер сразу нажмёт вторую из кнопок (вставка номера из счётчика), не проинициализировав сначала счётчик стартовым значением, и получит ту ерунду, которая хранилась в useri1 до него.

Re: Как сделать чтоб цифры сами увиличивались по возростанию

А так быстрее будет.

(vl-load-com)
(defun C:avt-num ()
  (if
    (and (setvar "nomutt" 1)
     (not (prompt "\nВыберите текст:"))
     (setq s-text (ssget '((0 . "text"))))
     (setvar "nomutt" 0)
    ) ;_ end of and
     (progn
       (vla-StartUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
       ) ;_ end of vla-StartUndoMark
       (prompt
     "Нумерация будет происходить:
               L- слева направо
               R- справа налево
               U-снизу вверх
               D-сверху вниз"
       ) ;_ end of prompt
       (textscr)
       (initget "L R U D")
       (cond
     (
      (setq
        gwrd (getkword "\nВыберите способ нумерации:[L/ R U D]<L>:")
      ) ;_ end of setq
      gwrd
     )
     (t (setq gwrd "L"))
       ) ;_ end of cond
       (graphscr)
       (setq
     s-text
      (mapcar (function (lambda (x)
                  (list (vlax-safearray->list
                      (vlax-variant-value
                    (vla-get-InsertionPoint x)
                      ) ;_ end of vlax-variant-value
                    ) ;_ end of vlax-safearray->list
                    x
                  ) ;_ end of list
                ) ;_ end of lambda
          ) ;_ end of function
          (mapcar 'vlax-ename->vla-object
              (vl-remove-if
                'listp
                (mapcar 'cadr
                    (ssnamex s-text)
                ) ;_ end of mapcar
              ) ;_ end of vl-remove-if
          ) ;_ end of mapcar
      ) ;_ end of mapcar
       ) ;_ end of setq
       (cond
     (
      (= gwrd "L")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (< (caar x) (caar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
     (
      (= gwrd "R")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (> (caar x) (caar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
     (
      (= gwrd "U")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (< (cadar x) (cadar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
     (
      (= gwrd "D")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (> (cadar x) (cadar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
       ) ;_ end of cond
       (cond
     (
      (setq n-nom (1- (getint "\nВведите начальный номер <1>:")))
      n-nom
     )
     (t (setq n-nom 0))
       ) ;_ end of cond
       (foreach    i s-text
     (vla-put-textstring (cadr i) (setq n-nom (1+ n-nom)))
       ) ;_ end of foreach
       (vla-endUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
       ) ;_ end of vla-StartUndoMark
     ) ;_ end of progn
  ) ;_ end of if
  (princ)
) ;_ end of defun

Re: Как сделать чтоб цифры сами увиличивались по возростанию

Сорри.Не заметил пару ошибок.Дублирую.

(vl-load-com)
(defun C:avt-num (/ n-nom s-text gwrd)
  (if
    (and (not (prompt "\nВыберите текст:"))
     (setvar "nomutt" 1)
     (setq s-text (ssget '((0 . "text"))))
     (setvar "nomutt" 0)
    ) ;_ end of and
     (progn
       (vla-StartUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
       ) ;_ end of vla-StartUndoMark
       (prompt
     "Нумерация будет происходить:
               L- слева направо
               R- справа налево
               U-сверху вниз
               D-снизу вверх"
       ) ;_ end of prompt
       (textscr)
       (initget "L R U D")
       (cond
     (
      (setq
        gwrd (getkword "\nВыберите способ нумерации[L/R/U/D]<L>:")
      ) ;_ end of setq
      gwrd
     )
     (t (setq gwrd "L"))
       ) ;_ end of cond
       (graphscr)
       (setq
     s-text
      (mapcar (function (lambda (x)
                  (list (vlax-safearray->list
                      (vlax-variant-value
                    (vla-get-InsertionPoint x)
                      ) ;_ end of vlax-variant-value
                    ) ;_ end of vlax-safearray->list
                    x
                  ) ;_ end of list
                ) ;_ end of lambda
          ) ;_ end of function
          (mapcar 'vlax-ename->vla-object
              (vl-remove-if
                'listp
                (mapcar 'cadr
                    (ssnamex s-text)
                ) ;_ end of mapcar
              ) ;_ end of vl-remove-if
          ) ;_ end of mapcar
      ) ;_ end of mapcar
       ) ;_ end of setq
       (cond
     (
      (= gwrd "L")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (< (caar x) (caar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
     (
      (= gwrd "R")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (> (caar x) (caar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
     (
      (= gwrd "U")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (< (cadar x) (cadar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
     (
      (= gwrd "D")
      (setq    s-text (vl-sort    s-text
                '(lambda (x y)
                   (> (cadar x) (cadar y))
                 ) ;_ end of lambda
               ) ;_ end of vl-sort
      ) ;_ end of setq
     )
       ) ;_ end of cond
       (cond
     (
      (setq n-nom (getint "\nВведите начальный номер<1>:"))
      (setq n-nom (1- n-nom))
     )
     (t (setq n-nom 0))
       ) ;_ end of cond
       (foreach    i s-text
     (vla-put-textstring (cadr i) (setq n-nom (1+ n-nom)))
       ) ;_ end of foreach
       (vla-endUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
       ) ;_ end of vla-StartUndoMark
     ) ;_ end of progn
  ) ;_ end of if
  (princ)
) ;_ end of defun

Re: Как сделать чтоб цифры сами увиличивались по возростанию

> Maxim T
А никто защиту от дурака и не обещал. Тем более, при использовании USERxx. Это известная тема и не раз обсуждалась.
Что касается "не проинициализировав"... Проинициализировать легко. Достаточно задать нужное значение с комстроки. Кстати, если в вопросе инициализации пойти дальше.... На Лиспе можно сделать запись последнего значения в словарь чтоб при следующем открытии чертежа продолжить нумерацию со следующего нужного номера (возможно даже раздельно по каждой из нескольких категорий или последовательностей), а не вбивать его ручками :)))
Главное вовремя остановиться, определяя степень "защиты от дурака". Простой кнопочный макрос пишется за три минуты и практически не требует отладки в отличии от внушительных (по сравнению с этим макросом) Лисп-программ.

Re: Как сделать чтоб цифры сами увиличивались по возростанию

> KC
Расположенные на чертеже цифры можно изменить в заданном порядке с помощью команды:
Express->Text->Automatic Text Numbering