zoukankan      html  css  js  c++  java
  • [原创]ssget过滤动态块的方式

    Autocad在2006增加了新的动态块功能,方便了对块的动态修改,但是修改动态块后,块名会变成一个匿名块,导致无法通过块名来快速过滤。

    明经论坛上有人通过全选块后再来遍历筛选,我通过研究简化了这个问题。采用同时改过的和没改过的块,减少了选择对象的数量,甚至可以说是直接过滤块名的效果。

    方法就是在过滤块名的增加一个匿名块的功能。

    (ssget '((2 . "`*U*,图框")))
    

      这样可以同时过滤到 图框和修改后的动态图框,这时候我们再来遍历验证一下选择的块是否正确,再来筛选一下,如果图中没有什么匿名块,几乎和过滤块名是一样的。

     再此基础之上,可以再更进一步,预先获取该块名的所有动态块的匿名名称,加入到当前选择过滤名称表中。这样就会比较精准的过滤到指定块名的对象,下面是个简单的例子.

    (vl-load-com)
    (defun c:tt(/ BLKNAME EN ENT LST OBJ SS SS2 TMPBLKNAME TMPOBJ)
      (if(setq ent(car(entsel "
    请选择需要过滤的参考图块: ")))
        (progn
          (setq obj(vlax-ename->vla-object ent))
          ;;先获取参考块的真实块名
          (setq blkName(vla-get-EffectiveName obj))
          ;;如果是动态块执行添加动态块的匿名块名进行过滤
          (if (= (vla-get-IsDynamicBlock obj) :vlax-true)
    	(progn
    	  ;;全选所有匿名块
    	  (if (setq ss(ssget "x" '((0 . "insert")(2 . "`*U*"))))
    	    (progn
    	      (setq lst '())
    	      ;;循环判定匿名块的块名是否是参考块的块名
    	      (while (setq en(ssname ss 0))
    		(setq Tmpobj(vlax-ename->vla-object en))
    		(setq TmpblkName(vla-get-EffectiveName Tmpobj))
    		(if (= TmpblkName blkName)
    		  (progn
    		    ;;添加到lst表中
    		    (setq lst (cons (vla-get-Name Tmpobj) lst))
    		    )
    		  )
    		(ssdel en ss)
    		)
    	      ;;反转表,可省略
    	      (setq lst(reverse lst))
    	      (if lst
    		(progn
    		  ;;将匿名块的块名表连接为一个字符串,并处理*问题.
    		  (setq blkName(strcat (apply 'strcat (mapcar '(lambda(x)(strcat "`" x ",")) lst)) blkName))		  
    		  )
    		)
    	      )
    	    )
    	  )
    	)
          ;;执行过滤选择
          (setq ss2(ssget  (list '(0 . "insert") (cons 2 blkName))))
          (if (and ss2 (= 0 (getvar "cmdactive"))) (command "._select" ss2 "" "._pselect" ss2 ""))
          )
        )
      )
    

      

    后记:感谢LTools 指出的一个错误,2019-4-3 15:01:10。

  • 相关阅读:
    linux内存管理之数据结构必备
    Script快速入门与查表
    Bash编程linux诸多熟记命令
    NandFlash/NorFlash源码模型和驱动编写方法
    linux内存管理之uboot第一步
    《Magus Night》
    《P2447 [SDOI2010]外星千足虫》
    DFS 树的理解
    《2021CCPC桂林》
    《GRAPH》
  • 原文地址:https://www.cnblogs.com/edata/p/6797362.html
Copyright © 2011-2022 走看看