Тема: Как сделать чтоб цифры сами увиличивались по возростанию
Как сделать чтоб цифры сами увиличивались по возростанию? Т.е. надо пронумеровать по порядку 200 точек 1 2 3 ... 199 200! Чтоб не изменять самому каждое число!!!
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Приемы работы → Текст (MTEXT) и шрифты → Как сделать чтоб цифры сами увиличивались по возростанию
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как сделать чтоб цифры сами увиличивались по возростанию? Т.е. надо пронумеровать по порядку 200 точек 1 2 3 ... 199 200! Чтоб не изменять самому каждое число!!!
> KC
Надо написать простенькую программку на лиспе.
Или найти ее в этом форуме.
Точно была. И не одна.
Господа программеры, а ведь задачка не так проста, как кажется. Я написал два макроса:
На первую кнопку:
^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'ом номера-то проставлять.
Maxim T, ты чего... потерялся???
Держи макрос и ставь номерки текстом
*^C^C_text;\;;$M=$(getvar,useri1);_useri1;$M=$(+,$(getvar,useri1),1);
Надеюсь разберешся с настройками
> VK
Так работает, но у вас нет защиты "от дурака", а у меня есть: (setq nummer (1+ (if nummer nummer 0))), и сделать её, имхо, можно только на лиспе. "От дурака" - то есть если юзер сразу нажмёт вторую из кнопок (вставка номера из счётчика), не проинициализировав сначала счётчик стартовым значением, и получит ту ерунду, которая хранилась в useri1 до него.
А так быстрее будет.
(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
Сорри.Не заметил пару ошибок.Дублирую.
(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
> Maxim T
А никто защиту от дурака и не обещал. Тем более, при использовании USERxx. Это известная тема и не раз обсуждалась.
Что касается "не проинициализировав"... Проинициализировать легко. Достаточно задать нужное значение с комстроки. Кстати, если в вопросе инициализации пойти дальше.... На Лиспе можно сделать запись последнего значения в словарь чтоб при следующем открытии чертежа продолжить нумерацию со следующего нужного номера (возможно даже раздельно по каждой из нескольких категорий или последовательностей), а не вбивать его ручками :)))
Главное вовремя остановиться, определяя степень "защиты от дурака". Простой кнопочный макрос пишется за три минуты и практически не требует отладки в отличии от внушительных (по сравнению с этим макросом) Лисп-программ.
> KC
Расположенные на чертеже цифры можно изменить в заданном порядке с помощью команды:
Express->Text->Automatic Text Numbering
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Приемы работы → Текст (MTEXT) и шрифты → Как сделать чтоб цифры сами увиличивались по возростанию
Форум работает на PunBB, при поддержке Informer Technologies, Inc