I have found this Lisp from Chaitanya Chikkala and it works great, but I was trying to edit it so that the selected blocks would be sorted by direction. I thought that I had it but I have hit a wall and could use some help.
The original code is
Code:
(defun c:incr (/ ent obj x i ST_STR)
(command "._undo" "_be")
(SETQ ST_STR1 (GETSTRING "\nENTER STARTING NUMBER OF THE SEQUENCE(ANY ALPHABET/WORD)"))
(SETQ ST_STR (GETSTRING "\nENTER STARTING NUMBER OF THE SEQUENCE(ANY INTEGER)"))
(vl-load-com)
(setq i 0)
(prompt "\nSelect blocks one at a time and in order")
(SETQ BLOCK_LIST (SSGET))
(SETQ BLOCK_LIST (FORM_SSSET BLOCK_LIST))
(while (< I (LENGTH BLOCK_LIST))
(SETQ ST_STR (STRCAT "" ST_STR))
(SETQ TEMP_ELE (NTH 0 (ATTRIBUTE_EXTRACT (NTH I BLOCK_LIST))))
(SETQ TEMP_ATTRIBUTE (STRCAT ST_STR1 ST_STR))
(SETQ TEMP_TAG (NTH 0 TEMP_ELE))
(MODIFY_ATTRIBUTES (NTH I BLOCK_LIST) (LIST TEMP_TAG) (LIST TEMP_ATTRIBUTE))
(SETQ ST_STR (ITOA (+ (ATOI ST_STR) 1)))
(setq i (+ i 1))
)
(command "._undo" "_e")
(princ))
(DEFUN FORM_SSSET (SSSET / I TEMP_ELE LIST1)
(SETQ I 0)
(SETQ TEMP_ELE NIL)
(SETQ LIST1 NIL_)
(WHILE (< I (SSLENGTH SSSET))
(SETQ TEMP_ELE (SSNAME SSSET I))
(SETQ LIST1 (CONS TEMP_ELE LIST1))
(SETQ I (+ I 1))
)
(REVERSE LIST1)
)
(DEFUN ATTRIBUTE_EXTRACT (ENTNAME / ENT_OBJECT SAFEARRAY_SET I LIST1)
(SETQ SAFEARRAY_SET NIL)
(SETQ ENT_OBJECT ENTNAME)
(SETQ ENT_OBJECT (VLAX-ENAME->VLA-OBJECT ENT_OBJECT))
(IF (= (VLAX-GET-PROPERTY ENT_OBJECT "HASATTRIBUTES") :VLAX-TRUE)
(PROGN
(SETQ SAFEARRAY_SET
(VLAX-SAFEARRAY->LIST
(VLAX-VARIANT-VALUE
(VLAX-INVOKE-METHOD ENT_OBJECT "GETATTRIBUTES")
)
)
)
(SETQ I 0)
(SETQ LIST1 NIL)
(WHILE (< I (LENGTH SAFEARRAY_SET))
(SETQ
LIST1 (CONS
(LIST
(VLAX-GET-PROPERTY (NTH I SAFEARRAY_SET) "TAGSTRING")
(VLAX-GET-PROPERTY (NTH I SAFEARRAY_SET) "TEXTSTRING")
)
LIST1
)
)
(SETQ I (+ I 1))
)
(SETQ LIST1 (REVERSE LIST1))
(SETQ LIST1 (SORT_FUN LIST1 0 0)))
(SETQ LIST1 NIL)
)LIST1
)
(DEFUN MODIFY_ATTRIBUTES (ENTNAME IDENTIFIER VALUE / TEMP_ELE ENT_OBJECT SAFEARRAY_SET I J)
(SETQ SAFEARRAY_SET NIL)
(SETQ ENT_OBJECT ENTNAME)
(SETQ ENT_OBJECT (VLAX-ENAME->VLA-OBJECT ENT_OBJECT))
(IF (= (VLAX-GET-PROPERTY ENT_OBJECT "HASATTRIBUTES") :VLAX-TRUE)
(PROGN
(SETQ SAFEARRAY_SET
(VLAX-SAFEARRAY->LIST
(VLAX-VARIANT-VALUE
(VLAX-INVOKE-METHOD ENT_OBJECT "GETATTRIBUTES")
)
)
)
(SETQ I 0)
(SETQ J 0)
(SETQ LIST1 NIL)
(WHILE (< I (LENGTH SAFEARRAY_SET))
(SETQ TEMP_ELE (VLAX-GET-PROPERTY (NTH I SAFEARRAY_SET) "TAGSTRING"))
(IF (/= (VL-POSITION TEMP_ELE IDENTIFIER) NIL) (PROGN (VLAX-PUT-PROPERTY (NTH I SAFEARRAY_SET) "TEXTSTRING" (NTH (VL-POSITION TEMP_ELE IDENTIFIER) VALUE)) ))
(SETQ I (+ I 1))
)
)))
(DEFUN SORT_FUN (LIST1 FLAG1 FLAG2 /)
(IF (= NIL (VL-CONSP (CAR LIST1)))
(PROGN (SETQ LIST1 (INDEX_ADD LIST1))
(SETQ LIST1
(VL-SORT LIST1
'(LAMBDA (X Y) (< (CADR X) (CADR Y)))
)
)
(SETQ LIST1 (MAPCAR '(LAMBDA (X) (CADR X)) LIST1))
)
(PROGN
(IF (NOT (ATOM (NTH FLAG1 (NTH 0 LIST1))))
(SETQ LIST1
(VL-SORT
LIST1
'(LAMBDA (X Y)
(< (NTH FLAG2 (NTH FLAG1 X)) (NTH FLAG2 (NTH FLAG1 Y)))
)
)
)
(PROGN (SETQ LIST1
(VL-SORT LIST1
'(LAMBDA (X Y) (< (NTH FLAG2 X) (NTH FLAG2 Y)))
)
)
)
)
)
)
LIST1
)
I tried to replace the (SETQ BLOCK_LIST (SSGET)) to sort the selected blocks. I want to be able to pick a direction but right now I was trying to just get one direction to work. Here is what I have so far any help would be greatly appreciated.
Code:
(defun c:slab(/ potSet ss ent obj x i ST_STR)
(princ "\n<<< Select points >>> ")
(command "._undo" "_be")
(SETQ ST_STR1 (GETSTRING "\nENTER STARTING NUMBER OF THE SEQUENCE(ANY ALPHABET/WORD)"))
(SETQ ST_STR (GETSTRING "\nENTER STARTING NUMBER OF THE SEQUENCE(ANY INTEGER)"))
(vl-load-com)
(setq i 0)
(SETQ BLOCK_LIST ((if
(setq potSet(ssget '((0 . "INSERT") (8 . "POLE_ID"))))
(setq ss (vl-sort
(vl-remove-if 'listp
(mapcar 'cadr(ssnamex potSet)))
'(lambda(x y)
(>
(cadr(assoc 10(entget x)))
(cadr(assoc 10(entget y)))))))
)))
(SETQ BLOCK_LIST (FORM_SSSET BLOCK_LIST))
(while (< I (LENGTH BLOCK_LIST))
(SETQ ST_STR (STRCAT "" ST_STR))
(SETQ TEMP_ELE (NTH 0 (ATTRIBUTE_EXTRACT (NTH I BLOCK_LIST))))
(SETQ TEMP_ATTRIBUTE (STRCAT ST_STR1 ST_STR))
(SETQ TEMP_TAG (NTH 0 TEMP_ELE))
(MODIFY_ATTRIBUTES (NTH I BLOCK_LIST) (LIST TEMP_TAG) (LIST TEMP_ATTRIBUTE))
(SETQ ST_STR (ITOA (+ (ATOI ST_STR) 1)))
(setq i (+ i 1))
)
(command "._undo" "_e")
(princ))
(DEFUN FORM_SSSET (SSSET / I TEMP_ELE LIST1)
(SETQ I 0)
(SETQ TEMP_ELE NIL)
(SETQ LIST1 NIL_)
(WHILE (< I (SSLENGTH SSSET))
(SETQ TEMP_ELE (SSNAME SSSET I))
(SETQ LIST1 (CONS TEMP_ELE LIST1))
(SETQ I (+ I 1))
)
(REVERSE LIST1)
)
(DEFUN ATTRIBUTE_EXTRACT (ENTNAME / ENT_OBJECT SAFEARRAY_SET I LIST1)
(SETQ SAFEARRAY_SET NIL)
(SETQ ENT_OBJECT ENTNAME)
(SETQ ENT_OBJECT (VLAX-ENAME->VLA-OBJECT ENT_OBJECT))
(IF (= (VLAX-GET-PROPERTY ENT_OBJECT "HASATTRIBUTES") :VLAX-TRUE)
(PROGN
(SETQ SAFEARRAY_SET
(VLAX-SAFEARRAY->LIST
(VLAX-VARIANT-VALUE
(VLAX-INVOKE-METHOD ENT_OBJECT "GETATTRIBUTES")
)
)
)
(SETQ I 0)
(SETQ LIST1 NIL)
(WHILE (< I (LENGTH SAFEARRAY_SET))
(SETQ
LIST1 (CONS
(LIST
(VLAX-GET-PROPERTY (NTH I SAFEARRAY_SET) "TAGSTRING")
(VLAX-GET-PROPERTY (NTH I SAFEARRAY_SET) "TEXTSTRING")
)
LIST1
)
)
(SETQ I (+ I 1))
)
(SETQ LIST1 (REVERSE LIST1))
(SETQ LIST1 (SORT_FUN LIST1 0 0)))
(SETQ LIST1 NIL)
)LIST1
)
(DEFUN MODIFY_ATTRIBUTES (ENTNAME IDENTIFIER VALUE / TEMP_ELE ENT_OBJECT SAFEARRAY_SET I J)
(SETQ SAFEARRAY_SET NIL)
(SETQ ENT_OBJECT ENTNAME)
(SETQ ENT_OBJECT (VLAX-ENAME->VLA-OBJECT ENT_OBJECT))
(IF (= (VLAX-GET-PROPERTY ENT_OBJECT "HASATTRIBUTES") :VLAX-TRUE)
(PROGN
(SETQ SAFEARRAY_SET
(VLAX-SAFEARRAY->LIST
(VLAX-VARIANT-VALUE
(VLAX-INVOKE-METHOD ENT_OBJECT "GETATTRIBUTES")
)
)
)
(SETQ I 0)
(SETQ J 0)
(SETQ LIST1 NIL)
(WHILE (< I (LENGTH SAFEARRAY_SET))
(SETQ TEMP_ELE (VLAX-GET-PROPERTY (NTH I SAFEARRAY_SET) "TAGSTRING"))
(IF (/= (VL-POSITION TEMP_ELE IDENTIFIER) NIL) (PROGN (VLAX-PUT-PROPERTY (NTH I SAFEARRAY_SET) "TEXTSTRING" (NTH (VL-POSITION TEMP_ELE IDENTIFIER) VALUE)) ))
(SETQ I (+ I 1))
)
)))
(DEFUN SORT_FUN (LIST1 FLAG1 FLAG2 /)
(IF (= NIL (VL-CONSP (CAR LIST1)))
(PROGN (SETQ LIST1 (INDEX_ADD LIST1))
(SETQ LIST1
(VL-SORT LIST1
'(LAMBDA (X Y) (< (CADR X) (CADR Y)))
)
)
(SETQ LIST1 (MAPCAR '(LAMBDA (X) (CADR X)) LIST1))
)
(PROGN
(IF (NOT (ATOM (NTH FLAG1 (NTH 0 LIST1))))
(SETQ LIST1
(VL-SORT
LIST1
'(LAMBDA (X Y)
(< (NTH FLAG2 (NTH FLAG1 X)) (NTH FLAG2 (NTH FLAG1 Y)))
)
)
)
(PROGN (SETQ LIST1
(VL-SORT LIST1
'(LAMBDA (X Y) (< (NTH FLAG2 X) (NTH FLAG2 Y)))
)
)
)
)
)
)
LIST1
)