Announcements
Attention for Customers without Multi-Factor Authentication or Single Sign-On - OTP Verification rolls out April 2025. Read all about it here.

Gatte2 in dyinamic blocs

msarqui
Collaborator

Gatte2 in dyinamic blocs

msarqui
Collaborator
Collaborator

Hi guys,

 

I'm looking for a way to adapt the GATTE2 code to accept dynamic blocks.

I did a search and found several posts about it, but all unsolved.

http://www.theswamp.org/index.php?topic=37602.msg426157#msg426157

http://www.cadtutor.net/forum/showthread.php?93037-gatte-for-use-on-dynamic-blocks

http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/gatte-command-for-dyanmic-block/td-p/...

http://www.cadtutor.net/forum/showthread.php?44232-Gatte-for-Db-S

 

and the closest solution (in my opinion)

http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-to-change-atribute/td-p/3387047/...

 

I can not give up. So I'll ask... Someone could please change the GATTE2 code to also work with dynamic blocks?

I found the code here: http://www.cadtutor.net/forum/showthread.php?50268-GATTE2-%28Global-Attribute-Edit-with-Layout-Selec...

 

;|											;;
	GATTE2: By Steve K (Date 10/2009)						;;
	v1.0	Initial Release								;;
	v1.01	Minor amendments (nothing externally noticable)				;;
	v1.02	Localised variables & Working again..					;;
											;;
	Description: 	A drawback of the standard GATTE command is that the user	;;
			can not chose which layouts to replace text on (it will		;;
			overwrite the text on every layout). 				;;
			GATTE2 gives the user the option to select which layouts	;;
			to apply the attribute change to.				;;
											|;
											;;
(defun c:gatte2(/ *error* en obj doc tag atts attstr txtstr tablst laystr count
		blkObj blkName sel)
  (vl-load-com)

  ; Error Handler (Lee Mac's)							;
  (defun *error* (err)
    (if doc (vla-EndUndoMark doc))
    (if (not (wcmatch (strcase err) "*BREAK,*CANCEL*,*EXIT*"))
      (princ (strcat "\n** Error: " err " **")))
    (princ))

  ; Get Layout Name Function							;
  ; @param	An object.							;
  ; @return	Layout Name object is on.					;
  (defun getlayout (Obj)
    (vla-get-Name
      (vla-get-layout
	(vla-objectidtoobject
	  (vla-get-ActiveDocument
	    (vlax-get-acad-object))
	  (vla-get-ownerid Obj)))))

  ; Main Process								;
  (Cond ((not (setq en (nentsel)))
	 (princ "\nNothing Selected."))
	((and (not (= (length en) 4))
	      (not (eq (cdr (assoc 0 (entget (setq en (car en))))) "ATTRIB")))
	 (princ "\nEntity not an Attribute or Block."))
	((if (listp en)
	   (progn
	     (setq blkObj (vlax-ename->vla-object (car (nth 3 en))))
	     (if (setq atts (vlax-invoke blkObj 'getAttributes))
	       (progn
		 (foreach att atts
		   (if attstr
		     (setq attstr (strcat attstr " " (vla-get-tagstring att)))
		     (setq attstr (vla-get-tagstring att))))
		 (while (not (member (setq tag (strcase (getstring (strcat
								     "\nKnown tag names for block: " attstr
								     "\nEnter an attribute name: "))))
				     (mapcar 'vla-get-tagstring atts)))
		   (princ "Entry not an Attribute.")
		   )
		 (setq obj (nth (vl-position tag (mapcar 'vla-get-tagstring atts)) atts))
		 nil
		 )
	       T
	       )
	     )
	     (not (setq obj (vlax-ename->vla-object en)))
	   )
	 (princ "\nNo Tags Exist.")
	 )
	((not (setq tablst (GetTabList)))
	 (princ "\nNo Tabs Selected."))
	( T; Else Proceed
	 (setq count 0
	       doc (vla-get-activedocument (vlax-get-acad-object))
	       blkName (vla-get-name
			 (vla-ObjectIdtoObject doc
			   (vla-get-OwnerId Obj))))
	 (princ (strcat "\nBlock Name: " blkName " \tAttribute tag: " (vla-get-tagstring obj)))
	 (vla-StartUndoMark doc)
	 (setq txtstr (getstring T "\nEnter new Text String: "))
	 (setq laystr (car tablst))
	 (foreach lay (cdr tablst)
	   (setq laystr (strcat laystr (chr 44) lay))
	   )
	 (if (ssget "_X" (list (cons 0 "insert") (cons 2 blkName) (cons 410 laystr) (cons 67 1)))
	   (progn
	     (princ (strcat "\nThe following attributes were changed to \"" txtstr "\".."))
	     (vlax-for bl (setq sel (vla-get-activeselectionset doc))
	       (foreach att (vlax-invoke bl 'getAttributes)
		 (if (eq (vla-get-tagstring att) (vla-get-tagstring obj))
		   (progn
		     (setq count (1+ count))
		     (princ (strcat "\nLayout: " (getlayout bl) "\tOld Text: " (if (eq (vla-get-textstring att) "")
										 "*empty*" (vla-get-textstring att))))
		     (vla-put-textstring att txtstr))
		   )
		 )
	       )
	     (vla-delete sel)
	     (princ (strcat "\nModified " (itoa count) " attributes total.\n"))
	     (vla-EndUndoMark doc)
	     )(princ "\nNo Blocks Found."))
	 ))
  (princ)
  )
											;;
;|									End: GATTE2	;;
											|;


;; CAB's Get Layouts Program								;;
											;;
(defun GetTabList (/ dclfile dcl# layouts ptr tablist)
  (setq dclfile "LayoutSelect.dcl")
  (cond
    ((< (setq dcl# (load_dialog dclfile)) 0) ; Error 
     (prompt (strcat "\nCannot load " dclfile "."))
    )
    ((not (new_dialog "layoutselect" dcl#)) ; Error 
     (prompt (strcat "\nProblem with " dclfile "."))
    )
    (t ; No DCL problems: fire it up 
     (setq layouts (orderedLayoutList))
     (start_list "layouts")
     (foreach one layouts
       (add_list one)
     )
     (end_list)
    (action_tile "layouts" "(setq ptr $value)")
    (action_tile "ok" "(done_dialog 5)")
    (action_tile "cancel" "(done_dialog 1)")
     (setq action (start_dialog))
     (unload_dialog dcl#)
     (if (and ptr (= action 5)) ;  get the list of selections to list of numbers
       (setq ptr     (read (strcat "(" ptr ")"))
             tablist (mapcar '(lambda (x) (nth x layouts)) ptr))
     )
    ) ; end cond T
  ) ; end cond
  tablist
)
											;;
;;											;;


;; 	OrderedLayoutList:	Similar to (layoutlist) except returns list that is	;;
;;				ordered by current tab order (not alphabetically)	;;
											;;
(defun orderedLayoutList (/ laylst)
  (vl-load-com)
  (vlax-for lay (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
    (setq laylst (cons lay laylst))
    )
  (cdr (mapcar 'vla-get-name (vl-sort laylst
				      (function
					(lambda (a b)
					  (< (vla-get-taborder a)(vla-get-taborder b))
					  )))))
  )
											;;
;;											;;

LayoutSelect.DCL

 

layoutselect : dialog { label = "   Layout Selector by CAB v1.0";
   : boxed_row { label = "< Tabs >";
      :list_box { key  = "layouts"; height = 15 ; width = 30 ;
        fixed_width = true; multiple_select = true; alignment = centered ;
      }
    } 
    : row {
     : button { key = "ok" ; label = "OK" ; fixed_width = true ;} 
     : cancel_button {}
   }
}

Many thanks!

Marcelo

0 Likes
Reply
Accepted solutions (1)
1,073 Views
6 Replies
Replies (6)

marko_ribar
Advisor
Advisor

Marcelo, I've modified your code and not quite sure if it's 100% OK, but it worked for me on my example DWG...

 

;|											;;
	GATTE2: By Steve K (Date 10/2009)						;;
	v1.0	Initial Release								;;
	v1.01	Minor amendments (nothing externally noticable)				;;
	v1.02	Localised variables & Working again..					;;
											;;
	Description: 	A drawback of the standard GATTE command is that the user	;;
			can not chose which layouts to replace text on (it will		;;
			overwrite the text on every layout). 				;;
			GATTE2 gives the user the option to select which layouts	;;
			to apply the attribute change to.				;;
											|;
;;
(defun c:gatte2 ( /       *error* en      obj     doc     tag
                  atts    attstr  txtstr  tablst  laystr  count
                  blkobj  blkname sel
                )
  (vl-load-com)

                                        ; Error Handler (MR's)							;
  (defun *error* ( err )
    (if doc
      (vla-endundomark doc)
    )
    (if err
      (prompt err)
    )
    (princ)
  )

                                        ; Get Layout Name Function							;
                                        ; @param	An object.							;
                                        ; @return	Layout Name object is on.					;
  (defun getlayout ( Obj )
    (vla-get-name
      (vla-get-layout
        (vla-objectidtoobject
          (vla-get-activedocument
            (vlax-get-acad-object)
          )
          (vla-get-ownerid Obj)
        )
      )
    )
  )

                                        ; Main Process								;
  (cond
    ((not (setq en (nentsel)))
     (princ "\nNothing Selected.")
    )
    ((and (not (= (length en) 4))
          (not
            (eq (cdr (assoc 0 (entget (setq en (car en))))) "ATTRIB")
          )
     )
     (princ "\nEntity not an Attribute or Block.")
    )
    ((if (listp en)
       (progn
         (setq blkobj (vlax-ename->vla-object (car (nth 3 en))))
         (if (setq atts (vlax-invoke blkobj 'getAttributes))
           (progn
             (foreach att atts
               (if attstr
                 (setq
                   attstr (strcat attstr " " (vla-get-tagstring att))
                 )
                 (setq attstr (vla-get-tagstring att))
               )
             )
             (while (not (member (setq tag
                                        (strcase
                                          (getstring (strcat
                                                       "\nKnown tag names for block: "
                                                       attstr
                                                       "\nEnter an attribute name: "
                                                     )
                                          )
                                        )
                                 )
                                 (mapcar 'vla-get-tagstring atts)
                         )
                    )
               (princ "Entry not an Attribute.")
             )
             (setq obj
                    (nth
                      (vl-position tag (mapcar 'vla-get-tagstring atts))
                      atts
                    )
             )
             nil
           )
           T
         )
       )
       (not (setq obj (vlax-ename->vla-object en)))
     )
     (princ "\nNo Tags Exist.")
    )
    ((not (setq tablst (gettablist)))
     (princ "\nNo Tabs Selected.")
    )
    (T                                  ; Else Proceed
     (setq count   0
           doc     (vla-get-activedocument (vlax-get-acad-object))
           blkname (vla-get-effectivename
                     (vla-objectidtoobject
                       doc
                       (vla-get-ownerid obj)
                     )
                   )
     )
     (princ (strcat "\nBlock Name: "
                    blkname
                    " \tAttribute tag: "
                    (vla-get-tagstring obj)
            )
     )
     (vla-startundomark doc)
     (setq txtstr (getstring T "\nEnter new Text String: "))
     (setq laystr (car tablst))
     (foreach lay (cdr tablst)
       (setq laystr (strcat laystr (chr 44) lay))
     )
     (cond 
       ( (ssget "_A"
                (list (cons 0 "INSERT")
                      (cons 2 blkname)
                      (cons 410 laystr)
                )
         )
         (princ
           (strcat "\nThe following attributes were changed to \""
                   txtstr
                   "\".."
           )
         )
         (vlax-for bl (setq sel (vla-get-activeselectionset doc))
           (foreach att (vlax-invoke bl 'getattributes)
             (if (eq (vla-get-tagstring att) (vla-get-tagstring obj))
               (progn
                 (setq count (1+ count))
                 (princ (strcat "\nLayout: "
                                (getlayout bl)
                                "\tOld Text: "
                                (if (eq (vla-get-textstring att) "")
                                  "*empty*"
                                  (vla-get-textstring att)
                                )
                        )
                 )
                 (vla-put-textstring att txtstr)
               )
             )
           )
         )
         (vla-delete sel)
         (princ
           (strcat "\nModified " (itoa count) " attributes total.\n")
         )
       )
       ( (ssget "_A"
                (list (cons 0 "INSERT")
                      (cons 410 laystr)
                )
         )
         (princ
           (strcat "\nThe following attributes were changed to \""
                   txtstr
                   "\".."
           )
         )
         (vlax-for bl (setq sel (vla-get-activeselectionset doc))
           (if (eq blkname (vla-get-effectivename bl))
             (foreach att (vlax-invoke bl 'getattributes)
               (if (eq (vla-get-tagstring att) (vla-get-tagstring obj))
                 (progn
                   (setq count (1+ count))
                   (princ (strcat "\nLayout: "
                                  (getlayout bl)
                                  "\tOld Text: "
                                  (if (eq (vla-get-textstring att) "")
                                    "*empty*"
                                    (vla-get-textstring att)
                                  )
                          )
                   )
                   (vla-put-textstring att txtstr)
                 )
               )
             )
           )
         )
         (vla-delete sel)
         (princ
           (strcat "\nModified " (itoa count) " attributes total.\n")
         )
       )
       ( t (princ "\nNo Blocks Found.") )
     )
    )
  )
  (*error* nil)
)
;;
;|									End: GATTE2	;;
											|;


;; CAB's Get Layouts Program								;;
;;
(defun gettablist ( / dclfile fn dcl# layouts ptr tablist )
                                        ;(setq dclfile "LayoutSelect.dcl")
  (setq dclfile (vl-filename-mktemp nil nil ".dcl"))
  (setq fn (open dclfile "w"))
  (write-line
    "layoutselect : dialog { label = \"   Layout Selector by CAB v1.0\";"
    fn
  )
  (write-line "   : boxed_row { label = \"< Tabs >\";" fn)
  (write-line
    "      :list_box { key  = \"layouts\"; height = 15 ; width = 30 ;"
    fn
  )
  (write-line
    "        fixed_width = true; multiple_select = true; alignment = centered ;"
    fn
  )
  (write-line "      }" fn)
  (write-line "    } " fn)
  (write-line "    : row {" fn)
  (write-line
    "     : button { key = \"ok\" ; label = \"OK\" ; fixed_width = true ;} "
    fn
  )
  (write-line "     : cancel_button {}" fn)
  (write-line "   }" fn)
  (write-line "}" fn)
  (close fn)
  (cond
    ((< (setq dcl# (load_dialog dclfile)) 0) ; Error 
     (prompt (strcat "\nCannot load " dclfile "."))
    )
    ((not (new_dialog "layoutselect" dcl#)) ; Error 
     (prompt (strcat "\nProblem with " dclfile "."))
    )
    (t                                  ; No DCL problems: fire it up 
     (setq layouts (orderedLayoutList))
     (start_list "layouts")
     (foreach one layouts
       (add_list one)
     )
     (end_list)
     (action_tile "layouts" "(setq ptr $value)")
     (action_tile "ok" "(done_dialog 5)")
     (action_tile "cancel" "(done_dialog 1)")
     (setq action (start_dialog))
     (unload_dialog dcl#)
     (vl-file-delete dclfile)
     (if (and ptr (= action 5))         ;  get the list of selections to list of numbers
       (setq ptr     (read (strcat "(" ptr ")"))
             tablist (mapcar '(lambda (x) (nth x layouts)) ptr)
       )
     )
    )                                   ; end cond T
  )                                     ; end cond
  tablist
)
;;
;;											;;


;; 	OrderedLayoutList:	Similar to (layoutlist) except returns list that is	;;
;;				ordered by current tab order (not alphabetically)	;;
;;
(defun orderedlayoutlist ( / laylst )
  (vl-load-com)
  (vlax-for lay (vla-get-layouts
                  (vla-get-activedocument (vlax-get-acad-object))
                )
    (setq laylst (cons lay laylst))
  )
  (mapcar 'vla-get-name
          (vl-sort laylst
                   (function
                     (lambda (a b)
                       (< (vla-get-taborder a) (vla-get-taborder b))
                     )
                   )
          )
  )
)
;;
;;

Regards,

HTH, M.R.

Marko Ribar, d.i.a. (graduated engineer of architecture)
0 Likes

marko_ribar
Advisor
Advisor
Accepted solution

There were some mistakes (lascks) in my previously posted code... Please, verify this one...

 

;|											;;
	GATTE2: By Steve K (Date 10/2009)						;;
	v1.0	Initial Release								;;
	v1.01	Minor amendments (nothing externally noticable)				;;
	v1.02	Localised variables & Working again..					;;
											;;
	Description: 	A drawback of the standard GATTE command is that the user	;;
			can not chose which layouts to replace text on (it will		;;
			overwrite the text on every layout). 				;;
			GATTE2 gives the user the option to select which layouts	;;
			to apply the attribute change to.				;;
											|;
;;
(defun c:gatte2 ( /       *error* en      obj     doc     tag
                  atts    attstr  txtstr  tablst  laystr  count
                  blkobj  blkname sel
                )
  (vl-load-com)

  ; Error Handler (MR's)							;
  (defun *error* ( err )
    (if doc
      (vla-endundomark doc)
    )
    (if err
      (prompt err)
    )
    (princ)
  )

  ; Get Layout Name Function							;
  ; @param	An object.							;
  ; @return	Layout Name object is on.					;
  (defun getlayout ( obj )
    (vla-get-name
      (vla-get-layout
        (vla-objectidtoobject
          (vla-get-activedocument
            (vlax-get-acad-object)
          )
          (vla-get-ownerid obj)
        )
      )
    )
  )

  ; Main Process								;
  (cond
    ((not (setq en (nentsel)))
     (princ "\nNothing Selected.")
    )
    ((and (not (= (length en) 4))
          (not
            (eq (cdr (assoc 0 (entget (setq en (car en))))) "ATTRIB")
          )
     )
     (princ "\nEntity not an Attribute or Block.")
    )
    ((if (listp en)
       (progn
         (setq blkobj (vlax-ename->vla-object (car (nth 3 en))))
         (if (and (not (vl-catch-all-error-p
                         (setq atts (vl-catch-all-apply
                                      'vlax-invoke
                                      (list blkobj 'getattributes)
                                    )
                         )
                       )
                  )
                  atts
             )
           (progn
             (foreach att atts
               (if attstr
                 (setq
                   attstr (strcat attstr " " (vla-get-tagstring att))
                 )
                 (setq attstr (vla-get-tagstring att))
               )
             )
             (while (not (member (setq tag
                                        (strcase
                                          (getstring (strcat
                                                       "\nKnown tag names for block: "
                                                       attstr
                                                       "\nEnter an attribute name: "
                                                     )
                                          )
                                        )
                                 )
                                 (mapcar 'vla-get-tagstring atts)
                         )
                    )
               (princ "Entry not an Attribute.")
             )
             (setq obj
                    (nth
                      (vl-position tag (mapcar 'vla-get-tagstring atts))
                      atts
                    )
             )
             nil
           )
           T
         )
       )
       (not (setq obj (vlax-ename->vla-object en)))
     )
     (princ "\nNo Tags Exist.")
    )
    ((not (setq tablst (gettablist)))
     (princ "\nNo Tabs Selected.")
    )
    (T ; Else Proceed
     (setq count   0
           doc     (vla-get-activedocument (vlax-get-acad-object))
           blkname (vla-get-effectivename
                     (vla-objectidtoobject
                       doc
                       (vla-get-ownerid obj)
                     )
                   )
     )
     (princ (strcat "\nBlock Name: "
                    blkname
                    " \tAttribute tag: "
                    (vla-get-tagstring obj)
            )
     )
     (vla-startundomark doc)
     (setq txtstr (getstring T "\nEnter new Text String: "))
     (setq laystr (car tablst))
     (foreach lay (cdr tablst)
       (setq laystr (strcat laystr (chr 44) lay))
     )
     (cond
       ((ssget "_A"
               (list (cons 0 "INSERT")
                     (cons 2 blkname)
                     (cons 410 laystr)
               )
        )
        (princ
          (strcat "\nThe following attributes were changed to \""
                  txtstr
                  "\".."
          )
        )
        (vlax-for bl (setq sel (vla-get-activeselectionset doc))
          (foreach att (vlax-invoke bl 'getattributes)
            (if (eq (vla-get-tagstring att) (vla-get-tagstring obj))
              (progn
                (setq count (1+ count))
                (princ (strcat "\nLayout: "
                               (getlayout bl)
                               "\tOld Text: "
                               (if (eq (vla-get-textstring att) "")
                                 "*empty*"
                                 (vla-get-textstring att)
                               )
                       )
                )
                (vla-put-textstring att txtstr)
              )
            )
          )
        )
        (vla-delete sel)
        (princ
          (strcat "\nModified " (itoa count) " attributes total.\n")
        )
       )
       ((if
          (ssget "_A"
                 (list (cons 0 "INSERT")
                       (cons 2 "`**")
                       (cons 410 laystr)
                 )
          )
           (vl-position
             blkname
             (mapcar 'vla-get-effectivename
                     (mapcar 'vlax-ename->vla-object
                             (vl-remove-if
                               'listp
                               (mapcar 'cadr
                                       (ssnamex
                                         (ssget "_P")
                                       )
                               )
                             )
                     )
             )
           )
        )
        (princ
          (strcat "\nThe following attributes were changed to \""
                  txtstr
                  "\".."
          )
        )
        (vlax-for bl (setq sel (vla-get-activeselectionset doc))
          (if (eq blkname (vla-get-effectivename bl))
            (foreach att (vlax-invoke bl 'getattributes)
              (if (eq (vla-get-tagstring att) (vla-get-tagstring obj))
                (progn
                  (setq count (1+ count))
                  (princ (strcat "\nLayout: "
                                 (getlayout bl)
                                 "\tOld Text: "
                                 (if (eq (vla-get-textstring att) "")
                                   "*empty*"
                                   (vla-get-textstring att)
                                 )
                         )
                  )
                  (vla-put-textstring att txtstr)
                )
              )
            )
          )
        )
        (vla-delete sel)
        (princ
          (strcat "\nModified " (itoa count) " attributes total.\n")
        )
       )
       (t (princ "\nNo Blocks Found."))
     )
    )
  )
  (*error* nil)
)
;;
;|									End: GATTE2	;;
											|;


;; CAB's Get Layouts Program								;;
;;
(defun gettablist ( / dclfile fn dcl# layouts ptr tablist )
  ;(setq dclfile "LayoutSelect.dcl")
  (setq dclfile (vl-filename-mktemp nil nil ".dcl"))
  (setq fn (open dclfile "w"))
  (write-line
    "layoutselect : dialog { label = \"   Layout Selector by CAB v1.0\";"
    fn
  )
  (write-line "   : boxed_row { label = \"< Tabs >\";" fn)
  (write-line
    "      :list_box { key  = \"layouts\"; height = 15 ; width = 30 ;"
    fn
  )
  (write-line
    "        fixed_width = true; multiple_select = true; alignment = centered ;"
    fn
  )
  (write-line "      }" fn)
  (write-line "    } " fn)
  (write-line "    : row {" fn)
  (write-line
    "     : button { key = \"ok\" ; label = \"OK\" ; fixed_width = true ;} "
    fn
  )
  (write-line "     : cancel_button {}" fn)
  (write-line "   }" fn)
  (write-line "}" fn)
  (close fn)
  (cond
    ((< (setq dcl# (load_dialog dclfile)) 0) ; Error 
     (prompt (strcat "\nCannot load " dclfile "."))
    )
    ((not (new_dialog "layoutselect" dcl#)) ; Error 
     (prompt (strcat "\nProblem with " dclfile "."))
    )
    (t ; No DCL problems: fire it up 
     (setq layouts (orderedLayoutList))
     (start_list "layouts")
     (foreach one layouts
       (add_list one)
     )
     (end_list)
     (action_tile "layouts" "(setq ptr $value)")
     (action_tile "ok" "(done_dialog 5)")
     (action_tile "cancel" "(done_dialog 1)")
     (setq action (start_dialog))
     (unload_dialog dcl#)
     (vl-file-delete dclfile)
     (if (and ptr (= action 5))
  ;  get the list of selections to list of numbers
       (setq ptr     (read (strcat "(" ptr ")"))
             tablist (mapcar '(lambda (x) (nth x layouts)) ptr)
       )
     )
    ) ; end cond T
  ) ; end cond
  tablist
)
;;
;;											;;


;; 	OrderedLayoutList:	Similar to (layoutlist) except returns list that is	;;
;;				ordered by current tab order (not alphabetically)	;;
;;
(defun orderedlayoutlist ( / laylst )
  (vl-load-com)
  (vlax-for lay (vla-get-layouts
                  (vla-get-activedocument (vlax-get-acad-object))
                )
    (setq laylst (cons lay laylst))
  )
  (mapcar 'vla-get-name
          (vl-sort laylst
                   (function
                     (lambda (a b)
                       (< (vla-get-taborder a) (vla-get-taborder b))
                     )
                   )
          )
  )
)
;;
;;

Sorry for my inconveniences...

Hope that now should be fine...

Regards, M.R.

Marko Ribar, d.i.a. (graduated engineer of architecture)

msarqui
Collaborator
Collaborator
Hello Marco
I'll do some tests and I will feedback you soon.
Thank you
Marcelo
0 Likes

msarqui
Collaborator
Collaborator
It is working for me.
Thank you Marko!
0 Likes

rapidcad
Collaborator
Collaborator

So, I'm testing a little bit here - are you sure it works on invisible attributes? - mine fail, says "Entry not an Attribute"...

 

example.JPG

ADN CAD Developer/Operator
0 Likes

peesemte
Observer
Observer

Apologies for necroing this post but it is the closest solution to what I'd like to achieve.

Sooooooooooo:

 

-I would like to autonumber block attribute ''ZONE''.

-I am using various blocks (different shapes and sizes) and they all have ''ZONE'' attribute in them.

-So far I have tested a number of lisps, including Lee Mac's solutions.

 

Why nothing worked so far?

-Seems like all the lisps work only on one kind of block at the time so when I batch select different blocks it only works on one kind and ignores the rest.

-I have tested this GATTE2 and it does all of them at once only it doesn't sequence them

-this leads me to believe that perhaps I was working on normal and dynamic blocks without knowing it and this is what caused other lisps to fail.

 

So here is my question: 

 

Can we adapt above GATTE2 to not only override an attributes but also do so in a sequence?

Ideally after I plan and place my blocks (other lisps usually sequence while placing blocks one at the time and I work on big floor plans so it is obviously better to have ability to renumber blocks once plans are approved)

 

Many thanks to anyone willing to take a swing at this oldie but goodie and best regards to all of you who contributed so far.

0 Likes