Author Topic: Set alls object to layer "0"  (Read 2226 times)

0 Members and 1 Guest are viewing this topic.

Adesu

  • Guest
Set alls object to layer "0"
« on: December 06, 2007, 03:49:23 AM »
Hi Alls,
I have a problem, I think simple but I not yet solve it, here scenario
I set layer "0" to by layer with white color, layer 1 set by layer with red color, and layer 2 set by layer with yellow color.
Every layer 1 & 2 contained objects (object free), my question is how to set alls object to become in layer "0" with color not change.
here my code and look at attach file
Code: [Select]
(defun c:test (/ cnt col ed ename ent lay nlay ss sse
               sse_e ssl ssn tcol ve vevo xcol)
   (if
      (setq ss (ssget "x"))
      (progn
         (setq ssl (sslength ss))
         (setq cnt 0)
         (repeat
            ssl
            (setq ssn (ssname ss cnt))
            (setq sse (entget ssn))
            (setq col (cdr (assoc 62 sse_e)))
            (if
               (= col nil)
               (progn
                  (setq vevo (vlax-ename->vla-object ename))
                  (vlax-dump-object vevo)
                  (setq xcol (vlax-get vevo 'TrueColor))
                  (setq tcol (vlax-get xcol 'ColorIndex))
                  ) ; progn
               )    ; if
            (setq lay (cdr (assoc 8 sse)))
            (if
               (not (eq lay "0"))
               (progn
                  (setq nlay "0")
                  (setq ed (entmod (subst (cons 8 nlay)(assoc 8 sse) sse)))
                  (setq ent (cdr (assoc 5 ed)))
                  (setq ename (handent ent))
                  (setq ve (vlax-ename->vla-object ename))                  
                  (vla-put-color ve  (fix tcol))
                  ) ; progn
               )    ; if
            (setq cnt (1+ cnt))
            )       ; repeat
         )          ; progn
      )             ; if
   (princ)
   )                ; defun

Adesu

  • Guest
Re: Set alls object to layer "0"
« Reply #1 on: December 06, 2007, 03:54:18 AM »
Oops, sorry I wrong post with contained "Poll", please ignore the "Poll".
To Moderator please remove that "POll".

kpblc

  • Bull Frog
  • Posts: 396
Re: Set alls object to layer "0"
« Reply #2 on: December 06, 2007, 04:36:58 AM »
Two codes: first changes only entities in model and paper spaces, second proceed blocks. All layers should be unlocked and thaw; external references not filtered.
Here is the first:
Code: [Select]
(defun c:set-to-0 (/ adoc *error*)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (vlax-for blk_def (vla-get-blocks adoc)
    (if (equal (vla-get-islayout blk_def) :vlax-true)
      (vlax-for ent blk_def
        (if (/= (vla-get-layer ent) "0")
          (progn
            (vla-put-color
              ent
              (cond
                ((= (vla-get-color ent) 256)
                 (vla-get-color
                   (vla-item (vla-get-layers adoc) (vla-get-layer ent))
                   ) ;_ end of vla-get-color
                 )
                (t (vla-get-color ent))
                ) ;_ end of cond
              ) ;_ end of vla-put-color
            (vla-put-layer ent "0")
            ) ;_ end of progn
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Second:
Code: [Select]
(defun c:set-to-0-with-blocks (/ adoc *error*)
  (defun *error* (msg)
    (vla-endundomark adoc)
    (princ msg)
    (princ)
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (vlax-for blk_def (vla-get-blocks adoc)
    (vlax-for ent blk_def
      (if (/= (vla-get-layer ent) "0")
        (progn
          (vla-put-color
            ent
            (cond
              ((= (vla-get-color ent) 256)
               (vla-get-color
                 (vla-item (vla-get-layers adoc) (vla-get-layer ent))
                 ) ;_ end of vla-get-color
               )
              (t (vla-get-color ent))
              ) ;_ end of cond
            ) ;_ end of vla-put-color
          (vla-put-layer ent "0")
          ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of vlax-for
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Sorry for my English.

Adesu

  • Guest
Re: Set alls object to layer "0"
« Reply #3 on: December 06, 2007, 06:39:00 PM »
Hi kpblc,
That code is great, thanks for your help.


KewlToyZ

  • Guest
Re: Set alls object to layer "0"
« Reply #4 on: December 06, 2007, 09:38:03 PM »
Could have some major fun with that creating a no plot layer named "O"  :lmao: