baker 发表于 2022-7-6 08:58:32

从C-something中重新命名层

我有一个绘图,我需要简单地将层的前导字母(C-***)更改为V-***。
 
无论如何要找到并替换?

alanjt 发表于 2022-7-6 09:02:17

查看RENAME命令。
C-*至V-*

Tharwat 发表于 2022-7-6 09:06:24

试试这个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)
)


 
塔瓦特

Lee Mac 发表于 2022-7-6 09:09:59

 
*咳嗽*wcmatch*咳嗽*
 
 
但我尽量不在可能的情况下重新发明轮子

Tharwat 发表于 2022-7-6 09:12:38

 
我认为这是对层名称匹配的另一种访问,我同意在这种情况下,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)
)

BlackBox 发表于 2022-7-6 09:14:46

塔尔瓦特,
 
当然不是你必须这么做,但出于好奇。。。如果您不打算使用RENAME命令,而打算使用vl-*函数,那么为什么不直接迭代Layers集合呢?
 
伪代码:
 

((lambda (acDoc / )
(vlax-for lay (vla-get-layers acDoc)
   ;;<-- Check / rename layers here
   )
)
(vla-get-activedocument (vlax-get-acad-object)))

 
当做
 
塔瓦特

Tharwat 发表于 2022-7-6 09:20:03

alanjt 发表于 2022-7-6 09:22:38

我忘记了在Rename命令中允许使用多选方法。

Tharwat 发表于 2022-7-6 09:24:20

聪明地工作,不要努力。

alanjt 发表于 2022-7-6 09:28:19

 
说得好。
 
当被大量需要按时交付的项目压得喘不过气来时,除了继续工作(有时),没有时间花在思考上
页: [1] 2
查看完整版本: 从C-something中重新命名层