Re: Помогите переделать программу автоматической нумерации

> skkkk
Так должно работать

(defun c:numm2 (/ oldPref oldSuf oldStart curStr newNum
           actDoc actSp oldEcho oldSize *error*)
  (defun *error* (msg)
    (setvar "CMDECHO" oldEcho)
    (princ)
    ); end *error*
  (vl-load-com)
  (if(not num:Size)(setq num:Size(getvar "DIMTXT")))
  (if(not num:Pref)(setq num:Pref ""))
  (if(not num:Suf)(setq num:Suf ""))
  (if(not num:Num)(setq num:Num 1))
  (setq oldPref num:Pref
        oldSuf num:Suf
        oldStart num:Num
   oldSize num:Size
   actDoc(vla-get-ActiveDocument
      (vlax-get-acad-object))
   oldEcho(getvar "CMDECHO")
   ); end setq
  (setvar "CMDECHO" 0)
  (if(= (vla-get-ActiveSpace actDoc) 1)
    (setq actSp(vla-get-ModelSpace actDoc))
    (setq actSp(vla-get-PaperSpace actDoc))
    ); end setq
  (setq num:Size
    (getreal
      (strcat "\nSpecify text size <"(rtos num:Size)">: ")))
  (if(null num:Size)(setq num:Size oldSize))
  (setq num:Pref
    (getstring T
      (strcat "\nType prefix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"num:Pref"> :")))
  (if(= "" num:Pref)(setq num:Pref oldPref))
  (if(= " " num:Pref)(setq num:Pref ""))
  (setq num:Suf
    (getstring T
      (strcat "\nType suffix:(If you want to delete prefix type ' ' (press SPACE key on keyboard) <"num:Suf"> :")))
  (if(= "" num:Suf)(setq num:Suf oldSuf))
  (if(= " " num:Suf)(setq num:Suf ""))
;;;=============================================================================
;;; Степень \A1;12{\H0.7x;\S23^;}                                            ;_=
(if (/= num:Suf "")(setq num:Suf (strcat  "{\\A1;\\H0.7x;\\S" num:Suf "^;}")));_=
;;;=============================================================================
  (setq num:Num
    (getint
      (strcat "\nEnter start number <"(itoa num:Num)">: ")))
  (if(null num:Num)(setq num:Num oldStart))
(while T
  (setq curStr(strcat num:Pref(itoa num:Num)num:Suf)
        newNum(vla-AddMText actSp
         (vlax-3d-point '(0.0 0.0 0.0)) 0 curStr))
  (vla-put-height newNum num:Size)
  (vla-put-AttachmentPoint newNum acAttachmentPointMiddleCenter)
  (vla-put-InsertionPoint newNum (vlax-3d-point '(0.0 0.0 0.0)))
  (command "_.copybase"(trans '(0.0 0.0 0.0)0 1)(entlast)"")
  (command "_.erase" (entlast) "")
  (command "_.pasteclip" pause)
    (setq num:Num(1+ num:Num))
  ); end while
  (princ)
  )

Re: Помогите переделать программу автоматической нумерации

> VVA
Можно ли дополнить лисп numm2, чтобы вставляемый текст был подчеркнут, но не подчеркиванием в редакторе текста, а отрезком весом 0,18 и  соответствующим ширине текста, по аналогии с командой _tcircle из express tools? Заранее спасибо

Re: Помогите переделать программу автоматической нумерации

Есть проблемка с лиспом "renum1". При первом использовании в текущем сеансе работы на запрос суффикса (который в степень летит) по умолчанию не предлагается ничего. При втором ввожу суффикс, например, 2. При третьем опять хочу без суффикса, но он предлагает ввести якобы последний использованный (запомнил как бы)). Жму пробел, как по инструкции, а он все равно вставляет в степень то, что запомнил, причем в виде "{A1/2/^". Можно ввести любую цифру, и она полетит в степень, но вот без степени только в следующем сеансе, т.е. при перезагрузке КАДа
Пробовал убрать из строчки

type ' ' (press SPACE key on keyboard) <"rnm:Suf"> :")))

<"rnm:Suf">, результат тот же.
И еще вылетает при промахе. Можно исправить?

Re: Помогите переделать программу автоматической нумерации

В своей работе постоянно приходиться нумеровать большое количество элементов при помощи блока с атрибутом, поэтому взял на вооружение LISP - "apnum". Возможности данного LISPа вполне устраивают, за исключением существенного недостатка - невозможность задавать разрядность числа (0; 00; 000; ...).
Прошу помощи у знающих людей в устранение данного недостатка. И было бы совсем хорошо дополнить данный LISP окном для ввода начальных параметров, которые сейчас нужно вводить в командной строке.

Re: Помогите переделать программу автоматической нумерации

Команда ApnumA - ApnumAlign
Добавлена возможность "выравнивания" (добивание слева 0) начального номера атрибута. Если выбрать выравнивание 100, то значение атрибута
1 будет записано как 01
2 будет записано как 02
99 будет записано как 99

;;ApnumAlign
(defun c:apnumA (/ oldStart oldPref oldSuf oldEcho
        oldSize oldBlock temBl *error* att)
  (defun *error* (msg)
    (setvar "CMDECHO" oldEcho)
    (setvar "ATTDIA" att)
    (princ)
    ); end *error*
  (if(not apnum:Size)(setq apnum:Size 1.0))
  (if(not apnum:Num)(setq apnum:Num 1))
  (if(not apnum:Alig)(setq apnum:Alig "1"))
  (if(not apnum:Pref)(setq apnum:Pref ""))
  (if(not apnum:Suf)(setq apnum:Suf ""))
  (setq  oldStart apnum:Num
   oldSize apnum:Size
   oldPref apnum:Pref
   oldSuf apnum:Suf
   oldEcho(getvar "CMDECHO")
   att (getvar "ATTDIA")
   ); end setq
  (setvar "ATTDIA" 0)(setvar "ATTREQ" 1)
  (setvar "CMDECHO" 0)
    (setq apnum:Pref
    (getstring T
      (strcat "\nУкажите префикс:(Для удаления префикса наберите ' ' (нажать клавишу SPACE на клавиатуре) <"apnum:Pref"> :")))
  (if(= "" apnum:Pref)(setq apnum:Pref oldPref))
  (if(= " " apnum:Pref)(setq apnum:Pref ""))
  (setq apnum:Suf
    (getstring T
       (strcat "\nУкажите суффикс:(Для удаления суффикса наберите ' ' (нажать клавишу SPACE на клавиатуре) <"apnum:Suf"> :")))
  (if(= "" apnum:Suf)(setq apnum:Suf oldSuf))
  (if(= " " apnum:Suf)(setq apnum:Suf ""))
  (setq apnum:Num
    (getint
      (strcat "\nУкажите начальный номер <"(itoa apnum:Num)">: ")))
  (if(null apnum:Num)(setq apnum:Num oldStart))
   (setq  oldStart apnum:Alig)
  (initget "1 10 100 1000 10000 100000")
  (setq apnum:Alig
    (GETKWORD
      (strcat "\nУкажите варавнивание начального номера [1/10/100/1000/10000/100000] <"apnum:Alig">: ")))
  (if(null apnum:Alig)(setq apnum:Alig oldStart))
    (setq apnum:Size
    (getreal
      (strcat "\nУкажите масштаб блока <"(rtos apnum:Size)">: ")))
  (if(null apnum:Size)(setq apnum:Size oldSize))
  (if apnum:Block(setq oldBlock apnum:Block))
  (setq temBl
     (entsel(strcat "\nВыберите блок <"
         (if apnum:Block apnum:Block "не определен") "> > "))); end setq
  (cond
    ((and apnum:Block(not temBl)(tblsearch "BLOCK" apnum:Block))
    (setq apnum:Block oldBlock)
     ); end condition #1
    ((= 1 (cdr(assoc 66(entget(car temBl)))))
    (setq apnum:Block(cdr(assoc 2(entget(car temBl)))))
    ); end condition #2
    (t
     (princ "\nБлок не сожержит атрибутов! ")
     (setq apnum:Block nil)
     ); end condition #3
    ); end cond
  (if apnum:Block
    (progn
      (princ "\n>>> Укажите точку вставки или нажмите Esc для выхода <<<\n ")
(while T
  (setq temBl (itoa apnum:Num))
  (while (< (strlen temBl)(1- (strlen apnum:Alig)))
    (setq temBl (strcat "0" temBl)))
  (command "_-insert" apnum:Block "_s" apnum:Size pause "0"
       (strcat apnum:Pref
           temBl
           apnum:Suf)); end command
    (setq apnum:Num (1+ apnum:Num))
  ); end while
); end progn
    ); end if
  (setvar "ATTDIA" att)
  (princ)
  )

Re: Помогите переделать программу автоматической нумерации

Большое спасибо тебе,VVA!

Re: Помогите переделать программу автоматической нумерации

Большое спасибо тебе,VVA, но надо шо выбирало сначало блок и нумерацию делало начиная с максимум +1: <мах> - ето идиальная програма.

Re: Помогите переделать программу автоматической нумерации

проблема эсли в блоке больше атрибутов!!!!!!!!!

Re: Помогите переделать программу автоматической нумерации

> kovban
Ты про какую команду глаголишь?

но надо шо выбирало сначало блок и нумерацию делало начиная с максимум +1: <мах> — ето идиальная програма

Переведи

Re: Помогите переделать программу автоматической нумерации

надо опредилить мах число у атрибуте и начинать с наступного (по умолчанию)!

Re: Помогите переделать программу автоматической нумерации

VVA Спасибо за отличные лиспы. Хотелось бы чтобы еще и num/renum была с возможностью выравнивания (как в apnumA)

Re: Помогите переделать программу автоматической нумерации

VVA, нельзя ли изменить код из #26 так, чтоб прибавлялось плюс один не в основном числе, а в суффиксе? Заранее спасибо

Re: Помогите переделать программу автоматической нумерации

skkkk, Тогда получается будет только префикс и суффикс, который увеличивается?

Re: Помогите переделать программу автоматической нумерации

конструкция на выходе из кода #21
префикс+число+суфикс
1) префикс - А суфикс - пр  число - 13
А13пр -> А14пр -> А15пр -> ...
2) префикс - А13пр суфикс - "пробел" число - 1
А13пр1 -> А13пр2 -> А13пр3 -> ...
Или я опять ни кого не понял?

(изменено: Владимир Азарко, 14 июля 2009г. 13:40:12)

Re: Помогите переделать программу автоматической нумерации

Disney, В коде #26 есть нюанс: он нумерует mtext'ами и суффикс идет как степень.

Re: Помогите переделать программу автоматической нумерации

Извинясь,
сам невнимательный.

(изменено: Владимир Азарко, 27 января 2013г. 15:06:38)

Re: Помогите переделать программу автоматической нумерации

Вариант BINC с запросом блока и выбором атрибута