doru10 Posted June 2, 2011 Posted June 2, 2011 I have successfully used lisp ATTINC if normal blocks. If not working in dynamic blocks. When changes position of attribute becomes anonymous block (*U### = anonymous blocks). I tried to use Unanon.lsp but disappear dynamic properties of the block. Attach a drawing as an example. Thank you in advance for your help. All the best. Doru Nr Increm For Blok Dynamic.dwg Quote
ketxu Posted June 2, 2011 Posted June 2, 2011 Where 's lisp ^^? I don't sure knowing your question (English so Bad), but you can try this Lisp with OCA defun ;; free lisp from cadviet.com ;;;********************************************** ;;;CHUONG TRINH DANH SO THU TU VA COPY TANG DAN ;;;1. Lenh OD: danh so thu tu, tuy chon so bat dau (begin) va so gia (increment) tuy y ;;;2. Lenh OC: copy tang dan tu mot so thu tu co san ;;;3. Lenh oCA: copy tang dan voi doi tuong Attribute Block ;;;Chuong trinh chap nhan cac dinh dang bang so, chu, so va chu ket hop: ;;;1, 2... A, B..., A1, A2..., AB-01, AB-02..., AB-01-C1, AB-01-C2... ;;;Cac chu gioi han trong khoang tu A den Z. Cac so khong han che ;;;Copyright by ssg - www.cadviet.com - December 2008 ;;;********************************************** ;;;------------------------------------------------- (defun etype (e) ;;;Entity Type (cdr (assoc 0 (entget e))) ) ;;;------------------------------------------------- (defun wtxt (txt p / sty d h) ;;;Write txt on graphic screen, defaul setting (setq sty (getvar "textstyle") d (tblsearch "style" sty) h (cdr (assoc 40 d)) ) (if (= h 0) (setq h (cdr (assoc 42 d)))) (entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 40 h) (assoc 41 d)) ) ) ;;;------------------------------------------------- (defun incN (n dn / n2 i n1) ;;;Increase number n (setq n2 (itoa (+ dn (atoi n))) i (- (strlen n) (strlen n2)) ) (if (> i 0) (setq n1 (substr n 1 i)) (setq n1 "")) (strcat n1 n2) ) ;;;------------------------------------------------- (defun incC (c / i c1 c2) ;;;Increase character c (setq i (strlen c) c1 (substr c 1 (- i 1)) c2 (chr (1+ (ascii (substr c i 1)))) ) (if (or (= c2 "{") (= c2 "[")) (progn (command "erase" (entlast) "") (alert "Over character!") (exit)) (strcat c1 c2) ) ) ;;;============================ (defun C:OD( / cn dn c n p) ;;;Make OrDinal number with any format (setq cn (getstring "\nBegin at <1>: " T) dn (getint "\nIncrement <1>: ") ) (if (not dn) (setq dn 1)) (if (= cn "") (setq cn "1")) (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn)) (setq n (vl-string-subst "" c cn)) (if (/= n "") (setq mode 1) (setq mode 0)) (while (setq p (getpoint "\nBase point <exit>: ")) (wtxt cn p) (if (= n "") (setq cn (incC cn)) (setq cn (strcat c (incN (vl-string-subst "" c cn) dn))) ) ) (princ) ) ;;;============================ (defun C:OC( / e dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from template (setq e (car (entsel "\nSelect template text:")) dn (getint "\nIncrement <1>: ") p1 (getpoint "\nBase point:") cn (cdr (assoc 1 (entget e))) ) (if (not dn) (setq dn 1)) (if (= cn "") (setq cn "1")) (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn) n (vl-string-subst "" c cn) ) (while (setq p2 (getpoint p1 "\nNew point <exit>: ")) (command "copy" e "" p1 p2) (if (= n "") (setq cn (incC cn)) (setq cn (strcat c (incN (vl-string-subst "" c cn) dn))) ) (setq dat (entget (entlast)) dat (subst (cons 1 cn) (assoc 1 dat) dat) ) (entmod dat) ) (princ) ) ;;;============================ (defun C:oCA( / e e0 dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from Atttribute block (setq e0 (car (entsel "\nSelect attribute block:")) e (entnext e0) ) (if (/= (etype e) "ATTRIB") (progn (alert "Object is not a Attribute Block!") (exit))) (setq dn (getint "\nIncrement <1>: ") p1 (getpoint "\nBase point:") cn (cdr (assoc 1 (entget e))) ) (if (not dn) (setq dn 1)) (if (= cn "") (setq cn "1")) (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn) n (vl-string-subst "" c cn) ) (while (setq p2 (getpoint p1 "\nNew point <exit>: ")) (command "copy" e0 "" p1 p2) (if (= n "") (setq cn (incC cn)) (setq cn (strcat c (incN (vl-string-subst "" c cn) dn))) ) (setq dat (entget (entnext (entlast))) dat (subst (cons 1 cn) (assoc 1 dat) dat) ) (entmod dat) (command "regen") ) (princ) ) ;;;============================ Quote
doru10 Posted June 2, 2011 Author Posted June 2, 2011 Where 's lisp ^^?I don't sure knowing your question (English so Bad), but you can try this Lisp with OCA defun ;; free lisp from cadviet.com ;;;********************************************** ;;;CHUONG TRINH DANH SO THU TU VA COPY TANG DAN ;;;1. Lenh OD: danh so thu tu, tuy chon so bat dau (begin) va so gia (increment) tuy y ;;;2. Lenh OC: copy tang dan tu mot so thu tu co san ;;;3. Lenh oCA: copy tang dan voi doi tuong Attribute Block ;;;Chuong trinh chap nhan cac dinh dang bang so, chu, so va chu ket hop: ;;;1, 2... A, B..., A1, A2..., AB-01, AB-02..., AB-01-C1, AB-01-C2... ;;;Cac chu gioi han trong khoang tu A den Z. Cac so khong han che ;;;Copyright by ssg - www.cadviet.com - December 2008 ;;;********************************************** ;;;------------------------------------------------- (defun etype (e) ;;;Entity Type (cdr (assoc 0 (entget e))) ) ;;;------------------------------------------------- (defun wtxt (txt p / sty d h) ;;;Write txt on graphic screen, defaul setting (setq sty (getvar "textstyle") d (tblsearch "style" sty) h (cdr (assoc 40 d)) ) (if (= h 0) (setq h (cdr (assoc 42 d)))) (entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 40 h) (assoc 41 d)) ) ) ;;;------------------------------------------------- (defun incN (n dn / n2 i n1) ;;;Increase number n (setq n2 (itoa (+ dn (atoi n))) i (- (strlen n) (strlen n2)) ) (if (> i 0) (setq n1 (substr n 1 i)) (setq n1 "")) (strcat n1 n2) ) ;;;------------------------------------------------- (defun incC (c / i c1 c2) ;;;Increase character c (setq i (strlen c) c1 (substr c 1 (- i 1)) c2 (chr (1+ (ascii (substr c i 1)))) ) (if (or (= c2 "{") (= c2 "[")) (progn (command "erase" (entlast) "") (alert "Over character!") (exit)) (strcat c1 c2) ) ) ;;;============================ (defun C:OD( / cn dn c n p) ;;;Make OrDinal number with any format (setq cn (getstring "\nBegin at <1>: " T) dn (getint "\nIncrement <1>: ") ) (if (not dn) (setq dn 1)) (if (= cn "") (setq cn "1")) (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn)) (setq n (vl-string-subst "" c cn)) (if (/= n "") (setq mode 1) (setq mode 0)) (while (setq p (getpoint "\nBase point <exit>: ")) (wtxt cn p) (if (= n "") (setq cn (incC cn)) (setq cn (strcat c (incN (vl-string-subst "" c cn) dn))) ) ) (princ) ) ;;;============================ (defun C:OC( / e dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from template (setq e (car (entsel "\nSelect template text:")) dn (getint "\nIncrement <1>: ") p1 (getpoint "\nBase point:") cn (cdr (assoc 1 (entget e))) ) (if (not dn) (setq dn 1)) (if (= cn "") (setq cn "1")) (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn) n (vl-string-subst "" c cn) ) (while (setq p2 (getpoint p1 "\nNew point <exit>: ")) (command "copy" e "" p1 p2) (if (= n "") (setq cn (incC cn)) (setq cn (strcat c (incN (vl-string-subst "" c cn) dn))) ) (setq dat (entget (entlast)) dat (subst (cons 1 cn) (assoc 1 dat) dat) ) (entmod dat) ) (princ) ) ;;;============================ (defun C:oCA( / e e0 dn p1 cn c n p2 dat) ;;;Make Ordinal number. Copy from Atttribute block (setq e0 (car (entsel "\nSelect attribute block:")) e (entnext e0) ) (if (/= (etype e) "ATTRIB") (progn (alert "Object is not a Attribute Block!") (exit))) (setq dn (getint "\nIncrement <1>: ") p1 (getpoint "\nBase point:") cn (cdr (assoc 1 (entget e))) ) (if (not dn) (setq dn 1)) (if (= cn "") (setq cn "1")) (setq c (vl-string-right-trim "0 1 2 3 4 5 6 7 8 9" cn) n (vl-string-subst "" c cn) ) (while (setq p2 (getpoint p1 "\nNew point <exit>: ")) (command "copy" e0 "" p1 p2) (if (= n "") (setq cn (incC cn)) (setq cn (strcat c (incN (vl-string-subst "" c cn) dn))) ) (setq dat (entget (entnext (entlast))) dat (subst (cons 1 cn) (assoc 1 dat) dat) ) (entmod dat) (command "regen") ) (princ) ) ;;;============================ Thank you for your response and I apologize for my English. If you open the drawing find dynamic block. With attinc's lisp increasing number of attribute. If you change the position of attribute is given a provisional name anonymous. Lisp's above mentioned no longer work. All the best. Quote
ketxu Posted June 2, 2011 Posted June 2, 2011 I don't sure why it "no longer work", because i've test change Dynamic Properties and use Lisp normally (this afternoon). Tomorrow i will try test again and take a video ^^ Quote
qball Posted June 2, 2011 Posted June 2, 2011 you may have to attach the Lisp so people can figure out if there is something wrong with it. Quote
doru10 Posted June 3, 2011 Author Posted June 3, 2011 you may have to attach the Lisp so people can figure out if there is something wrong with it. Hello everyone, This lisp works perfectly, except when changing text position of blocks dynamics (see dwg's). If exist 300-400 blocks increment operate in split-second . All the best Increment Nr Block.zip Quote
ketxu Posted June 4, 2011 Posted June 4, 2011 I've tested agian and sure my lisp good done ^^, but it not same function with yours. Mine copy and inc, Yours auto renumber. Srr so much Quote
doru10 Posted June 6, 2011 Author Posted June 6, 2011 I've tested agian and sure my lisp good done ^^, but it not same function with yours. Mine copy and inc, Yours auto renumber. Srr so much Thanks for the reply. Your lisp works very well but looking for a solution to my problem which is a bit different. All the best Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.