从C-something中重新命名层
我有一个绘图,我需要简单地将层的前导字母(C-***)更改为V-***。无论如何要找到并替换? 查看RENAME命令。
C-*至V-* 试试这个baker,它是区分大小写的,这意味着(c-(小写字母)不等于c-(大写字母))。
代码优于命令调用。
(defun c:TesT (/ nxt layrs Nme)
;; == TharwaT 01. 09. 2011 == ;;
(while
(setq nxt (tblnext "LAYER" (null nxt)))
(setq
layrs
(entget (tblobjname "LAYER" (setq Nme (cdr (assoc 2 nxt)))))
)
(if (and (not (eq Nme "0"))
(eq (vl-string-search "C-" Nme 0) 0)
)
(entmod
(subst (cons 2 (vl-string-subst "V-" "C-" (cdr (assoc 2 layrs))))
(assoc 2 layrs)
layrs
)
)
)
)
(princ)
)
塔瓦特
*咳嗽*wcmatch*咳嗽*
但我尽量不在可能的情况下重新发明轮子
我认为这是对层名称匹配的另一种访问,我同意在这种情况下,wcmatch函数比vl字符串搜索要好得多。
不管怎样,就这样。
欢迎发表意见。
(defun c:TesT (/ nxt layrs Nme)
;; == TharwaT 01. 09. 2011 == ;;
(while
(setq nxt (tblnext "LAYER" (null nxt)))
(setq
layrs
(entget (tblobjname "LAYER" (setq Nme (cdr (assoc 2 nxt)))))
)
(if (and (not (eq Nme "0"))
(wcmatch Nme "C-*")
)
(entmod
(subst (cons 2 (vl-string-subst "V-" "C-" (cdr (assoc 2 layrs))))
(assoc 2 layrs)
layrs
)
)
)
)
(princ)
)
塔尔瓦特,
当然不是你必须这么做,但出于好奇。。。如果您不打算使用RENAME命令,而打算使用vl-*函数,那么为什么不直接迭代Layers集合呢?
伪代码:
((lambda (acDoc / )
(vlax-for lay (vla-get-layers acDoc)
;;<-- Check / rename layers here
)
)
(vla-get-activedocument (vlax-get-acad-object)))
当做
塔瓦特 我忘记了在Rename命令中允许使用多选方法。 聪明地工作,不要努力。
说得好。
当被大量需要按时交付的项目压得喘不过气来时,除了继续工作(有时),没有时间花在思考上
页:
[1]
2