乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 100|回复: 11

[编程交流] 下线过滤器故障-can和#03

[复制链接]

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:47:47 | 显示全部楼层 |阅读模式
您好-
 
这是更大的清理图形脚本的一部分,但由于某些原因,它无法关闭基于过滤器的图层。任何意见都会很好,我认为这对我来说是一个超级简单的混乱。。。。但是我找不到。
 
它确实调用了程序中其他一些运行良好的lisp例程。
 
  1. (DEFUN C:XCLEAN        ()        ;         Defines Command Prompt Function Name
  2. (Prompt "\n***  Working, Please wait purge and auditting drawing......\n")        ;        Feedback to user
  3. (getvar "cmdecho")        ;        Get cmd echo variable status
  4. (setvar "cmdecho" 0)        ;        Turn off command line
  5. (getvar "Nomutt")        ;        Get Nomutt variable status
  6. (setvar "Nomutt" 1)        ;        Turn off command line
  7. ;;        UNLOCK ALL        ;;
  8. (command "-layer" "ON" "*" "thaw" "*"        "u" "*" "color" "t" "255,0,255"        "*" \e )        ;         All layers on, unfrozen and unlock all layers, set color to magenta of all layers
  9. ;;        DELETE ALL DIMENSIONS        ;;
  10.         (command "_.erase" (ssget "X" '((0 . "DIMENSION,LEADER"))) "")
  11. ;;        SPECIALIZED BURST - SEE SCRIPTS BELOW ;;
  12. (C:DEMO)
  13. (C:DEMO)
  14. (C:DEMO)
  15. ;; DELETE ALL LAYOUTS        ;;
  16. (vl-load-com)
  17. (setq layouts
  18. (vla-get-layouts
  19. (vla-get-activedocument (vlax-get-acad-object))
  20. )
  21. )
  22. (mapcar '(lambda (layout)
  23. (vla-delete (vla-item layouts layout))
  24. )
  25. (layoutlist)
  26. )
  27.        
  28. ;;        DELETE ALL DIMENSIONS        ;;
  29.         (command "_.erase" (ssget "X" '((0 . "DIMENSION,LEADER"))) "")
  30. ;; SET ALL TO BY LAYER       
  31. (command "LAYON" "LAYTHW" "SETBYLAYER" "ALL" "" "Y" "Y")        ;        SET ALL TO BY LAYER
  32. ;;        PURGE AND AUDIT        ;;
  33. (command "-purge" "All" "*" "N" \e)        ;        Purge all unused
  34. (command "tilemode" "1")        ;         Makes Model Space Current
  35. (command "zoom" "e")        ;         Zoom Extents
  36. (command "tilemode" "0")        ;         Makes Paper Space Current
  37. (command "-purge" "All" "*" "N" \e)        ;        Purge all unused
  38. (command "zoom" "e")        ;         Zoom Extents
  39. (command "_qsave")        ;         Save File
  40. (command "tilemode" "1")        ;         Makes Model Space Current
  41. (command "-purge" "All" "*" "N")        ;         Purge all unused
  42. (command "-UNITS" "4" "16" "1" "0" "90" "N" \e)        ;         Sets unit Architectual, 1/16" Precision, Decimal Degrees with no decimal spaces, Angle Zero at top of screen                       
  43. (command "-purge" "All" "*" "N" \e)        ;        Purge all unused
  44. (command "-purge" "All" "*" "N" \e)        ;        Purge all unused
  45. (command "-purge" "All" "*" "N" \e)        ;        Purge all unused
  46. (command "-purge" "All" "*" "N" \e)        ;        Purge all unused
  47.   ;;        CHANGE ALL HATCH TO COLOR 8
  48. (command "_.chprop"
  49. (ssget "x" (list (cons 0 "HATCH")))
  50. ""
  51. "Color"
  52. 8
  53. ""
  54. )       
  55. [color="red"]           ;;        TURN OFF SPECIFIC LAYERS
  56. (command "-LAYER" "OFF" "*WALL-IDEN*" \e)
  57. (command "-LAYER" "OFF" "*DOOR-IDEN*" \e)
  58. (command "-LAYER" "OFF" "*DIMS*,*DEFPOINT*" \e)[/color]
  59. ;;        SET TO COLOR 8 BY LAYER Name
  60. (command "-LAYER" "COLOR" 8 "*TREE*,*BUSH*,*PLANTS*" \e)
  61. (command "-LAYER" "COLOR" 8 "*LTS*,*LITE*,*LIGHT*" \e)
  62. (command "-LAYER" "COLOR" 8 "*FURN*,*DETL*" \e)
  63. (command "-LAYER" "COLOR" 8 "*CURB*,*PARK*" \e)
  64. (command "-LAYER" "COLOR" 8 "*PITCH*,*SLOPE*" \e)
  65. (command "-LAYER" "COLOR" 8 "*GRID*" \e)
  66. (command "-LAYER" "COLOR" 8 "*ANNO*,*IDEN*,*PATT*" \e)
  67. (command "_.erase" (ssget "X" '((0 . "DIMENSION,LEADER"))) "")       
  68. (command "_qsave")        ;         Save File
  69. (setvar "Nomutt" 0)        ;        Turn on command line
  70. (Prompt "\n******************************************\n")        ;        Feedback to user
  71. (Prompt "\n******************************************\n")        ;        Feedback to user
  72. (Prompt "\n******************************************\n")        ;        Feedback to user
  73. (Prompt "\n******************************************\n")        ;        Feedback to user
  74. (Prompt "\n******************************************\n")        ;        Feedback to user
  75. (Prompt "\n******************************************\n")        ;        Feedback to user
  76. (Prompt "\n******* XCLEAN SCRIPT COMPLETE        *********\n")        ;        Feedback to user
  77. (gc)        ;        Free ram resources
  78. )
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:53:57 | 显示全部楼层
尝试使用冻结?这是我的工作:(命令“-LAYER”“FREEZE”“*WALL-IDEN*“nil)
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:03:27 | 显示全部楼层
这是可行的,只是奇怪的是关没有,但“冻结”有。。。。
 
在这种情况下,nil和e之间应该没有区别,对吗?
 
谢谢你!!!应该用那个部分打开。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:09:36 | 显示全部楼层
 
我从未在命令调用中使用过e,因此不知道它们是否相同。这一层的大部分内容可以在没有任何命令的情况下实现自动化。下面是更改图层颜色的快速示例:
  1. (vl-load-com)
  2. (defun layer2color (pattern color / n)
  3. (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  4.    (if        (wcmatch (setq n (strcase (vla-get-name l))) (strcase pattern))
  5.      (vla-put-color l color)
  6.    )
  7.    (princ)
  8. )
  9. )
  10. (layer2color
  11. "*TREE*,*BUSH*,*PLANTS*,*LTS*,*LITE*,*LIGHT*,*FURN*,*DETL*,*CURB*,*PARK*,*PITCH*,*SLOPE*,*ANNO*,*IDEN*,*PATT*"
  12. 8
  13. )
  14. (defun layer2colorvanilla (pattern color / e l n)
  15. (while (setq l (tblnext "layer" (null l)))
  16.    (and (setq n (cdr (assoc 2 l)))
  17. (wcmatch (strcase n) (strcase pattern))
  18. (setq e (tblobjname "layer" n))
  19. (setq e (entmod (append (entget e) (list (cons 62 color)))))
  20.    )
  21. )
  22. (princ)
  23. )
  24. (layer2colorvanilla
  25. "*TREE*,*BUSH*,*PLANTS*,*LTS*,*LITE*,*LIGHT*,*FURN*,*DETL*,*CURB*,*PARK*,*PITCH*,*SLOPE*,*ANNO*,*IDEN*,*PATT*"
  26. 8
  27. )

不客气
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:10:29 | 显示全部楼层
  1. (defun layer2colorvanilla (pattern color / e l n)
  2. ;; Make mask layer colors 255,255,255
  3. (while (setq l (tblnext "layer" (null l)))
  4.    (and (setq n (cdr (assoc 2 l)))
  5. (wcmatch (strcase n) (strcase pattern))
  6. (setq e (tblobjname "layer" n))
  7. (setq e (entmod (append (entget e) (list (cons 62 color)))))
  8.    )
  9. )
  10. (princ)
  11. )
  12. (layer2colorvanilla
  13. "*TREE*,*BUSH*,*PLANTS*,*LTS*,*LITE*,*LIGHT*,*FURN*,*DETL*,*CURB*,*PARK*,*PITCH*,*SLOPE*,*ANNO*,*IDEN*,*PATT*"
  14. 8
  15. )

 
这非常有效,并且可能比传递命令更快地进行更改。我真的不理解掩蔽部分。我在第一部分中使用了相同的定义,但在“香草”部分(就像名字选择一样,哈哈)。
 
我只是用这个传递它:
 
  1. (vl-load-com)
  2. (defun layer2color (pattern color / n)
  3. (vlax-for l (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  4.    (if        (wcmatch (setq n (strcase (vla-get-name l))) pattern)
  5. (vla-put-color l color)
  6.    )
  7.    (princ)
  8. )
  9. )
  10. (layer2color
  11. "*TREE*,*BUSH*,*PLANTS*,*LTS*,*LITE*,*LIGHT*,*FURN*,*DETL*,*CURB*,*PARK*,*PITCH*,*SLOPE*,*ANNO*,*IDEN*,*PATT*,*GENM*"
  12. 8
  13. )
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:19:11 | 显示全部楼层
还有一些需要仔细考虑
掩码注释是我为不同代码准备的。。你可以忽略它。
  1. (defun c:layerschtuff (/ doc n s)
  2. ;; To modelspace
  3. (setvar 'tilemode 1)
  4. (vlax-for l (vla-get-layers (setq doc (vla-get-activedocument (vlax-get-acad-object))))
  5.    ;; Unlock layers
  6.    (vl-catch-all-apply 'vla-put-lock (list l :vlax-false))
  7.    ;; Color magenta
  8.    (vla-put-color l 6)
  9.    (setq n (strcase (vla-get-name l)))
  10.    ;; Color 8
  11.    (if
  12.      (wcmatch
  13. n
  14. "*TREE*,*BUSH*,*PLANTS*,*LTS*,*LITE*,*LIGHT*,*FURN*,*DETL*,*CURB*,*PARK*,*PITCH*,*SLOPE*,*ANNO*,*IDEN*,*PATT*"
  15.      )
  16.       (vla-put-color l
  17.    )
  18.    ;; Freeze layers
  19.    (if        (wcmatch n "*WALL-IDEN*,*DOOR-IDEN*,*DIMS*,*DEFPOINT*")
  20.      (vl-catch-all-apply 'vla-put-freeze (list l :vlax-true))
  21.    )
  22. )
  23. ;; Delete dims and leaders
  24. (and (setq s (ssget "X" '((0 . "DIMENSION,LEADER")))) (mapcar 'entdel (mapcar 'cadr (ssnamex s))))
  25. ;; Delete layouts
  26. (vlax-for l (vla-get-layouts doc) (vl-catch-all-apply 'vla-delete (list l)))
  27. (princ)
  28. )
  29. (c:layerschtuff)
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:21:35 | 显示全部楼层
使用VBA/Activex代替传递命令是否更有效?
 
mapcar是否会使删除维度在所有实体中递归,或者需要多次运行该命令以在突发后消除突发实体中的这些维度?
 
你要把我整只编码兔送下去,哈哈。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:29:00 | 显示全部楼层
我喜欢不使用命令调用的地方是在AutoCAD版本之间工作的代码的一致性。。是的,通常速度要快得多。至于在爆炸后删除DIM,你需要在爆炸时重复x次。。差不多吧。
  1. ;; Repeat 10 times exploding block and deleting dims
  2. (repeat 10
  3.    (and (setq s (ssget "_X" '((0 . "insert") (410 . "Model")))) (command "_.explode" s))
  4.    (and (setq s (ssget "_X" '((0 . "DIMENSION,LEADER") (410 . "Model"))))
  5. (mapcar 'entdel (mapcar 'cadr (ssnamex s)))
  6.    )
  7. )

 
我希望如此。。一旦你开始理解代码,它就会变得非常上瘾!
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:33:01 | 显示全部楼层
重复命令太酷了!肯定不知道那件事。你把我的一段代码重新写成了更好的格式。。。。非常感谢。我想我也可以在清除命令中使用repeat。我正在考虑在最后一次清除之前运行dim delete例程。我只是想通过删除尽可能多的不需要的东西来加快速度。
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:41:17 | 显示全部楼层
好的,我被卖了。
 
  1. (vla-purgeall (vla-get-activeDocument (vlax-get-acad-object)))

 
安静且速度快于:
 
  1. (command "-purge" "All" "*" "N" nil)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:06 , Processed in 0.756875 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表