Author Topic: search and delete layers if exist  (Read 1191 times)

0 Members and 1 Guest are viewing this topic.

PM

  • Guest
search and delete layers if exist
« on: March 02, 2022, 01:03:39 PM »
Hi.I am trying to write a lisp code to search if same layers exist in the drawing and delete them. Some of this layer must  not exist in the drawing.

I add a list of layers , perhaps i add more if this code complete. The problem is when find the first not exist layers the code stop and gives me this

Quote

Command: DELLCAD
_laydel
Select object on layer to delete or [Name]: n
Enter layer name or [?]: 3DFLOOR
Invalid Layer name.
Enter layer name or [?]:
Select object on layer to delete or [Name/Undo]: yes
*Invalid selection*
Expects a point or Last/Name
; error: Function cancelled




Code - Auto/Visual Lisp: [Select]
  1.  
  2.   (defun c:dellcad ()
  3. (if (=(tblsearch "layer" "CLOSETS-3D") nil)
  4.       (command "_laydel" "n" "CLOSETS-3D" "" "yes")
  5.     );end if
  6.  
  7. (if (=(tblsearch "layer" "3DFLOOR") nil)
  8.       (command "_laydel" "n" "3DFLOOR" "" "yes")
  9.     );end if
  10.  
  11. (if (=(tblsearch "layer" "3DFURNIT") nil)
  12.       (command "_laydel" "n" "3DFURNIT" "" "yes")
  13.     );end if
  14.  
  15. (if (=(tblsearch "layer" "3DROOF") nil)
  16.       (command "_laydel" "n" "3DROOF" "" "yes")
  17.     );end if
  18.  
  19. (if (=(tblsearch "layer" "3DSTAIR") nil)
  20.       (command "_laydel" "n" "3DSTAIR" "" "yes")
  21.     );end if
  22.  
  23. (if (=(tblsearch "layer" "3DTERRAIN") nil)
  24.       (command "_laydel" "n" "3DTERRAIN" "" "yes")
  25.     );end if
  26.    
  27. (if (=(tblsearch "layer" "3DKITBATH") nil)
  28.       (command "_laydel" "n" "3DKITBATH" "" "yes")
  29.     );end if
  30.  
  31. (if (=(tblsearch "layer" "3DSILL_WALLS") nil)
  32.       (command "_laydel" "n" "3DSILL_WALLS" "" "yes")
  33.     );end if
  34.    
  35. (if (=(tblsearch "layer" "3DWDGLASS") nil)
  36.       (command "_laydel" "n" "3DWDGLASS" "" "yes")
  37.     );end if
  38.        
  39. (if (=(tblsearch "layer" "3DWIN_MARB") nil)
  40.       (command "_laydel" "n" "3DWIN_MARB" "" "yes")
  41.     );end if
  42.  
  43. (if (=(tblsearch "layer" "3DWINDR") nil)
  44.       (command "_laydel" "n" "3DWINDR" "" "yes")
  45.     );end if
  46.  
  47. (if (=(tblsearch "layer" "FURNITURE-3D") nil)
  48.       (command "_laydel" "n" "FURNITURE-3D" "" "yes")
  49.     );end if
  50.  
  51. (if (=(tblsearch "layer" "KITCBATH-3D") nil)
  52.       (command "_laydel" "n" "KITCBATH-3D" "" "yes")
  53.     );end if
  54.    
  55.     (princ)
  56.    )
  57.  
  58.  


Can any one help?

 Thanks

ronjonp

  • Needs a day job
  • Posts: 7533
Re: search and delete layers if exist
« Reply #1 on: March 02, 2022, 02:26:15 PM »
All of your logic is incorrect:
Code - Auto/Visual Lisp: [Select]
  1. (if (tblsearch "layer" "CLOSETS-3D")
  2.   (command "_laydel" "n" "CLOSETS-3D" "" "yes")
  3. )                                       ;end if

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

PM

  • Guest
Re: search and delete layers if exist
« Reply #2 on: March 02, 2022, 04:02:37 PM »
Hi ronjonp. I thanks for the help. I correct the code. Is any other way , perhaps better or faster,  to  write this code?

Code - Auto/Visual Lisp: [Select]
  1.   (defun c:dellcad ()
  2. (if (tblsearch "layer" "CLOSETS-3D")
  3.       (command "_laydel" "n" "CLOSETS-3D" "" "yes")
  4.     );end if
  5.  
  6. (if (tblsearch "layer" "3DFLOOR")
  7.       (command "_laydel" "n" "3DFLOOR" "" "yes")
  8.     );end if
  9.  
  10. (if (tblsearch "layer" "3DFURNIT")
  11.       (command "_laydel" "n" "3DFURNIT" "" "yes")
  12.     );end if
  13.  
  14. (if (tblsearch "layer" "3DROOF")
  15.       (command "_laydel" "n" "3DROOF" "" "yes")
  16.     );end if
  17.  
  18. (if (tblsearch "layer" "3DSTAIR")
  19.       (command "_laydel" "n" "3DSTAIR" "" "yes")
  20.     );end if
  21.  
  22. (if (tblsearch "layer" "3DTERRAIN")
  23.       (command "_laydel" "n" "3DTERRAIN" "" "yes")
  24.     );end if
  25.    
  26. (if (tblsearch "layer" "3DKITBATH")
  27.       (command "_laydel" "n" "3DKITBATH" "" "yes")
  28.     );end if
  29.  
  30. (if (tblsearch "layer" "3DSILL_WALLS")
  31.       (command "_laydel" "n" "3DSILL_WALLS" "" "yes")
  32.     );end if
  33.    
  34. (if (tblsearch "layer" "3DWDGLASS")
  35.       (command "_laydel" "n" "3DWDGLASS" "" "yes")
  36.     );end if
  37.        
  38. (if (tblsearch "layer" "3DWIN_MARB")
  39.       (command "_laydel" "n" "3DWIN_MARB" "" "yes")
  40.     );end if
  41.  
  42. (if (tblsearch "layer" "3DWINDR")
  43.       (command "_laydel" "n" "3DWINDR" "" "yes")
  44.     );end if
  45.  
  46. (if (tblsearch "layer" "FURNITURE-3D")
  47.       (command "_laydel" "n" "FURNITURE-3D" "" "yes")
  48.     );end if
  49.  
  50. (if (tblsearch "layer" "KITCBATH-3D")
  51.       (command "_laydel" "n" "KITCBATH-3D" "" "yes")
  52.     );end if
  53.  
  54. (if (tblsearch "layer" "CLOSETS-3D")
  55.       (command "_laydel" "n" "CLOSETS-3D" "" "yes")
  56.     );end if
  57.    
  58.     (princ)
  59.    )
  60.  
  61.  

Thanks

ronjonp

  • Needs a day job
  • Posts: 7533
Re: search and delete layers if exist
« Reply #3 on: March 02, 2022, 04:51:01 PM »
Yes .. put them in a list like so:
Code - Auto/Visual Lisp: [Select]
  1. (foreach layer '("CLOSETS-3D" "3DFLOOR" "3DFURNIT" "3DROOF" "3DSTAIR")
  2.   (if (tblsearch "layer" layer)
  3.     (command "_laydel" "n" layer "" "yes")
  4.   )
  5. )

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

PM

  • Guest
Re: search and delete layers if exist
« Reply #4 on: March 03, 2022, 01:57:50 AM »
Thanks ronjonp. I will try it  :smitten: :smitten: