;;;Resets or increments selected attribute values having alphabetic values from "A" to "Z" or "AA" to "AZ" and so on to "CY" ;;;Optionally omits "I" and "O" to avoid confusion with "1" AND "O" (standard alphabetic detail bubble call-out method). ;;; ;;;Values are incremented one character alphabetically from the initially modified attribute value if the option to sequence values is selected. ;;; ;;;Reset values are determined by an integer offset value (±) which is applied to the current attribute value. ;;;It is not necesary to select the items in alphabetic order when resetting values by an offset. ;;; ;;; Author: Henry C. Francis ;;; 425 N. Ashe St. ;;; Southern Pines, NC 28387 ;;; http://paracadd.com ;;; All rights reserved. ;;; ;;; COPYRIGHT: 9/2/2009 ;;; EDITED: 10/18/2011 ;;; (DEFUN C:INCRASC () (SETQ ename_list NIL) (SETQ this_attr (NENTSELP)) (IF (AND this_attr (EQ (CDR (ASSOC 0 (SETQ this_entdef (entget (car this_attr))))) "ATTRIB") ) (PROGN (IF ukword NIL (LOAD "ukword" "\nFile UKWORD.LSP not loaded! ")) (SETQ protect_done (ukword 1 "Yes No" "Protect attributes from being modified more than once?" (IF protect_done protect_done "Yes"))) (SETQ skip_ambig (ukword 1 "Yes No" "Skip \"I\" and \"O\" (for unambiguous bubble call-outs) " (IF skip_ambig skip_ambig "Yes"))) (SETQ alpha_tags '("A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "AA" "AB" "AC" "AD" "AE" "AF" "AG" "AH" "AI" "AJ" "AK" "AL" "AM" "AN" "AO" "AP" "AQ" "AR" "AS" "AT" "AU" "AV" "AW" "AX" "AY" "AZ" "BA" "BB" "BC" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BK" "BL" "BM" "BN" "BO" "BP" "BQ" "BR" "BS" "BT" "BU" "BV" "BW" "BX" "BY" "BZ" "CA" "CB" "CC" "CD" "CE" "CF" "CG" "CH" "CI" "CJ" "CK" "CL" "CM" "CN" "CO" "CP" "CQ" "CR" "CS" "CT" "CU" "CV" "CW" "CX" "CY")) (IF (EQ skip_ambig "Yes") (SETQ detail_tags '("A" "B" "C" "D" "E" "F" "G" "H" "J" "K" "L" "M" "N" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" "AA" "AB" "AC" "AD" "AE" "AF" "AG" "AH" "AI" "AJ" "AK" "AL" "AM" "AN" "AO" "AP" "AQ" "AR" "AS" "AT" "AU" "AV" "AW" "AX" "AY" "AZ" "BA" "BB" "BC" "BD" "BE" "BF" "BG" "BH" "BI" "BJ" "BK" "BL" "BM" "BN" "BO" "BP" "BQ" "BR" "BS" "BT" "BU" "BV" "BW" "BX" "BY" "BZ" "CA" "CB" "CC" "CD" "CE" "CF" "CG" "CH" "CI" "CJ" "CK" "CL" "CM" "CN" "CO" "CP" "CQ" "CR" "CS" "CT" "CU" "CV" "CW" "CX" "CY")) (SETQ detail_tags alpha_tags) ) (SETQ next_subent (CDR (ASSOC -1 this_entdef))) (WHILE (NOT (EQ (CDR (ASSOC 0 (ENTGET (SETQ next_subent (ENTNEXT next_subent))))) "SEQEND"))) (SETQ block_header_ent (ENTGET (CDR (ASSOC -2 (ENTGET next_subent))))) (IF (MEMBER (CDR (ASSOC 1 this_entdef)) alpha_tags) (PROGN (IF uint NIL (LOAD "uint" "\nFile UINT.LSP not loaded! ")) (SETQ incr_offset (uint 1 "" "Offset (± number of characters)" (IF incr_offset incr_offset 1))) (SETQ incr_newval (ukword 1 "Yes No" (STRCAT "Sequence new values from \"" (CDR (ASSOC 1 this_entdef)) "\"? ") incr_newval)) (IF (EQ incr_newval "Yes") (PROGN (IF (< incr_offset 0) (PROGN (IF (MEMBER (CDR (ASSOC 1 this_entdef)) detail_tags) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) (REVERSE detail_tags)))) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) (REVERSE alpha_tags)))) ) (SETQ new_val_lst (MEMBER (CAR new_val_lst) (REVERSE detail_tags))) (REPEAT (1-(ABS incr_offset))(SETQ new_val_lst (CDR new_val_lst))) (SETQ new_val_lst (MEMBER (CAR (REVERSE new_val_lst)) detail_tags)) ) (PROGN (IF (MEMBER (CDR (ASSOC 1 this_entdef)) detail_tags) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) detail_tags))) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) alpha_tags))) ) (SETQ new_val_lst (MEMBER (CAR new_val_lst) detail_tags)) (REPEAT (1- incr_offset)(SETQ new_val_lst (CDR new_val_lst))) ) ) (WHILE (AND new_val_lst (SETQ this_attr (NENTSELP)) (EQ (CDR (ASSOC 0 (SETQ this_entdef (entget (car this_attr))))) "ATTRIB") ) (IF (AND (EQ protect_done "Yes")(MEMBER (CDR (ASSOC -1 this_entdef)) ename_list)) (PROGN (PRINC "\nThat attribute has already been modified by this operation. ") (PRINC) ) (PROGN (SETQ ename_list (APPEND ename_list (LIST (CDR (ASSOC -1 this_entdef))))) (SETQ next_subent (CDR (ASSOC -1 this_entdef))) (WHILE (NOT (EQ (CDR (ASSOC 0 (ENTGET (SETQ next_subent (ENTNEXT next_subent))))) "SEQEND"))) (SETQ block_header_ent (ENTGET (CDR (ASSOC -2 (ENTGET next_subent))))) (SETQ new_attr_val (CAR new_val_lst)) (SETQ new_val_lst (CDR new_val_lst)) (IF new_attr_val (PROGN (SETQ this_entdef (SUBST (CONS 1 new_attr_val) (ASSOC 1 this_entdef) this_entdef)) (ENTMOD this_entdef) (ENTUPD (CDR (ASSOC -1 this_entdef))) ) (PROGN (PRINC "\nThe proposed new value is out of range! ") (PRINC) ) ) ) ) ) ) (PROGN (WHILE (AND (SETQ this_attr (NENTSELP)) (EQ (CDR (ASSOC 0 (SETQ this_entdef (entget (car this_attr))))) "ATTRIB") ) (IF (AND (EQ protect_done "Yes")(MEMBER (CDR (ASSOC -1 this_entdef)) ename_list)) (PROGN (PRINC "\nThat attribute has already been modified by this operation. ") (PRINC) ) (PROGN (SETQ ename_list (APPEND ename_list (LIST (CDR (ASSOC -1 this_entdef))))) (SETQ next_subent (CDR (ASSOC -1 this_entdef))) (WHILE (NOT (EQ (CDR (ASSOC 0 (ENTGET (SETQ next_subent (ENTNEXT next_subent))))) "SEQEND"))) (SETQ block_header_ent (ENTGET (CDR (ASSOC -2 (ENTGET next_subent))))) (IF (< incr_offset 0) (PROGN (IF (MEMBER (CDR (ASSOC 1 this_entdef)) detail_tags) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) (REVERSE detail_tags)))) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) (REVERSE alpha_tags)))) ) (SETQ new_val_lst (MEMBER (CAR new_val_lst) (REVERSE detail_tags))) (REPEAT (1-(ABS incr_offset))(SETQ new_val_lst (CDR new_val_lst))) (SETQ new_val_lst (MEMBER (CAR new_val_lst) detail_tags)) ) (PROGN (IF (MEMBER (CDR (ASSOC 1 this_entdef)) detail_tags) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) detail_tags))) (SETQ new_val_lst (CDR (MEMBER (CDR (ASSOC 1 this_entdef)) alpha_tags))) ) (SETQ new_val_lst (MEMBER (CAR new_val_lst) detail_tags)) (REPEAT (1- incr_offset)(SETQ new_val_lst (CDR new_val_lst))) ) ) (SETQ new_attr_val (CAR new_val_lst)) (SETQ new_val_lst (CDR new_val_lst)) (IF new_attr_val (PROGN (SETQ this_entdef (SUBST (CONS 1 new_attr_val) (ASSOC 1 this_entdef) this_entdef)) (ENTMOD this_entdef) (ENTUPD (CDR (ASSOC -1 this_entdef))) ) (PROGN (PRINC "\nThe proposed new value is out of range! ") (PRINC) ) ) ) ) ) ) ) ) (ALERT "Current attribute value is not a letter tag between A and CY ") ) (SETQ this_attr NIL) ) (ALERT "No ATTRIBUTE entity was selected! ") ) (PRINC) )