Autolisp 通过关键字合并图层


;|

获得所有图层

参数:无

返回值:表

|;

; user defined function strsplit.
; strsplit splits a string with delimiter, and return a list.
; example: (strsplit "1,22,333,4444" ",")    -->> ("1","22","333","4444")
;          (strsplit ",1,22,333,4444," ",")  -->> ("" "1" "22" "333" "4444" "")


(defun strsplit(datastr delimiter)
    (setq strlist '()
          str ""
    )
    (setq n (strlen datastr))
    (setq i 1)
    (repeat n
        ; s is a single letter, starts from the first to the end. 
        (setq s (substr datastr i 1))

      
        (if (/= s delimiter)
            ; when s is't a delimiter
            (progn
                (setq str (strcat str s))
                ; if s is the last letter
                (if (= i n)
                    (setq strlist (cons str strlist))
                )
            )
            ; when s is a delimiter
            (progn
                (setq strlist (cons str strlist))
                (setq str "")
                ; if delimiter is the last letter
                (if (= i n)
                    (setq strlist (cons "" strlist))
                )
            )
        )
        (setq i (1+ i))
    )
    ; reverse list and retrun it
    (reverse strlist)
)




(defun XD::Layer:GetAll ( / e layerl obj)

  (setq obj (xdrx_object_get "layer"))

  (while (setq e (xdrx_object_next))

    (setq layerl (cons (car e) layerl))

  )

  (setq layerl (reverse layerl))

)




(defun main( / name lys addlys first others klens n)

	(setq name (getstring "要合并图层名称,多个用逗号隔开:"))
  
  	(if (/= name "")
		(progn
		  	(setq keys (strsplit name ","))
		  
			(setq lys (XD::Layer:GetAll))
		     	(setq addlys (list))

	  		(setq klens (length keys))
	  		
		  	
		     	(foreach e lys
			  	(setq n 0)
			  	(while (< n klens)

				  	(setq key (nth n keys))
				  
					(if (vl-string-search key e)
					  	(progn
							(setq addlys (append addlys (list e)))
					  		(setq n klens)
					  	)
					  	(setq n (+ n 1))
					  )
				  	
				)
			  
			  )

			     	

		  	(setq first (car addlys))
		  	(setq others (cdr addlys))
		  	(princ addlys)

		  	(foreach k others
			  	
			  	(command "laymrg" "N" k "" "N" first "Y")
			  )

		  
		)
     	
  	
  	
		(princ "input is nil")
	
  	)
  
     
  )


(defun c:mrly()
  	(main)

       )

合并CAD图层,

图层关键字,多个关键字,必需晓东工具箱

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值