找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 687|回复: 5

[求助] 请问怎么批量新建组过滤器

[复制链接]

已领礼包: 557个

财富等级: 财运亨通

发表于 2016-12-27 17:36:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
图层比较多,可以分很多种类,想用程序批量新建一些组过滤器来管理图层。请问谁有代码提供一下,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6473个

财富等级: 富甲天下

发表于 2016-12-28 00:21:41 | 显示全部楼层
谢谢提出来,大家来学习学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-12-29 09:16:03 | 显示全部楼层
平时用的还真不多,下面是移除层过滤器的代码

(defun c:RemoveLayerFilters
       (/ acDoc modelSpace extDict acLayer layerTable xRec)
  (setq save-cmdecho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (command "._undo" "begin")
  (setq
    acDoc (vlax-get-property (vlax-get-acad-object) 'ActiveDocument)
  )
  (setq layerTable (vlax-get-property acDoc 'Layers))
  (setq extDict (vlax-invoke-method layerTable 'GetExtensionDictionary))
  (if (/= (type        (setq layerFilters
                       (vl-catch-all-apply
                         'vlax-invoke-method
                         (list extDict 'Item "ACAD_LAYERFILTERS")
                       )
                )
          )
          'VL-CATCH-ALL-APPLY-ERROR
      )
    (vl-catch-all-apply
      'vla-Remove
      (list extDict "ACAD_LAYERFILTERS")
    )
  )
  (if (> (atof (getvar "ACADVER")) 16.0)

    (if        (/= (type (setq        layerFilters
                         (vl-catch-all-apply
                           'vlax-invoke-method
                           (list extDict 'Item "ACLYDICTIONARY")
                         )
                  )
            )
            'VL-CATCH-ALL-APPLY-ERROR
        )
      (vl-catch-all-apply
        'vla-Remove
        (list extDict "ACLYDICTIONARY")
      )


    )
  )
  (command "._undo" "end")
  (setvar "CMDECHO" 1)
  (princ)
)
(defun c:RLF () (c:RemoveLayerFilters))
(princ)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-12-29 09:21:33 | 显示全部楼层
(defun c:DeleteLayerPropertyFilters
       (/ ActiveDocument cnt lyrdct lyrfltdct x1 x2)
  (vl-load-com)
  (setq Acad-Object (vlax-get-Acad-Object))
  (setq ActiveDocument (vlax-get Acad-Object 'ActiveDocument))
  (vla-StartUndoMark ActiveDocument)
  (setq        lyrfltdct
         (vl-catch-all-apply
           '(lambda ()
              (vla-GetObject
                (vla-GetExtensionDictionary
                  (vla-Get-Layers ActiveDocument)
                )
                "ACAD_LAYERFILTERS"
              )
            )
         )
  )
  (setq        lyrdct (vl-catch-all-apply
                 'vla-item
                 (list
                   (vla-GetExtensionDictionary
                     (vla-Get-Layers ActiveDocument)
                   )
                   "AcLyDictionary"
                 )
               )
  )
  (if (not (vl-catch-all-error-p lyrdct))
    (progn
      (setq cnt 0)
      (vlax-for        flt lyrdct
        (vla-GetXRecordData flt 'x1 'x2)
        (setq x1 (vlax-safearray->list x1)
              x2 (vlax-safearray->list x2)
              x2 (if (= (car x1) 290)
                   (cdr x2)
                   x2
                 )
              x2 (mapcar 'vlax-variant-value x2)
        )
        (cond ((eq (car x2) "AcLyLayerFilter")
               (setq cnt (1+ cnt))
               (vla-Delete flt)
               (vl-catch-all-apply
                 '(lambda () (vla-Remove lyrfltdct (caddr x2)))
               )
              )
              ((eq (car x2) "AcLyLayerGroup"))
        )
      )
    )
  )
  (if (or (not cnt) (= cnt 0))
    (prompt "\nNo layer filters were found. ")
    (prompt
      (strcat "\n"
              (itoa cnt)
              " layer property filters have been deleted."
      )
    )
  )
  (vla-Update Acad-Object)
  (vla-EndUndoMark ActiveDocument)
  (princ)
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-12-29 09:24:55 | 显示全部楼层
获取

(defun jb:GetAcadLayerFilterDictionary (/ lext-dict ldict)
  (setq        lext-dict
         (entget
           (vlax-vla-object->ename
             (vla-GetExtensionDictionary
               (vla-get-layers
                 (vla-get-ActiveDocument
                   (vlax-get-acad-object)
                 )
               )
             )
           )
         )
  )
  (if (setq ldict (member (cons 3 "ACAD_LAYERFILTERS") lext-dict))
    (cdr (assoc 360 ldict))
    nil
  )
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-12-29 09:40:23 | 显示全部楼层
创建

(vl-load-com)
(defun C:test (/ n lst lfname)
(setq lfname (getstring t "\nEnter filter name:  " ))
(vlax-map-collection (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  (function (lambda (x) 
      (if 
        (and
           (wcmatch (setq n (strcase (vla-get-name x))) "M-*")
           (not (wcmatch n "*|*"))
        )
        (setq lst (cons n lst))
      )))
)
(command "-layer" "_filter" "n" "g" "" "" lfname "")
(mapcar (function (lambda (x) (command "-layer" "_filter" "e" lfname "a" x "x" ""))) lst) 
(princ)
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-24 05:45 , Processed in 0.344347 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表