错误的DXF组
我试图用标题栏中另一个属性的值来更改一个属性,我想我差不多做到了,但不知道我必须对变量0chk做什么才能使用它,如下所示。如果将其替换为字符串,即“RR”,则一切正常。帮助文件表明cons需要列表或atom?(defun C:modchk (/)
(if (setq ss (ssget "X" (list (cons 0 "INSERT")(cons 2 "*BORDER*")
(cons 66 1)(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(foreach ent (mapcar 'cadr (ssnamex ss))
(setq att (entnext ent))
(while (not (eq "SEQEND" (cdadr (entget att))))
(cond ((eq "YEAR" (cdr (assoc 2 (entget att))))
(entmod (subst (cons 1 year) (assoc 1 (entget att)) (entget att))))
((eq "0CHECKED" (cdr (assoc 2 (entget att))))
(setq 0chk (cdr (assoc 1 (entget att)))))
((eq "0DDATE" (cdr (assoc 2 (entget att))))
(setq 0dat (cdr (assoc 1 (entget att))))
(if (>(strlen 0dat) 5)
(entmod (subst (cons 1 0chk) (assoc 1 (entget att)) (entget att))))))
(setq att (entnext att))))
(command "_regenall"))
(princ "\n<!> No Blocks Found <!>"))
(princ))
我觉得我应该知道这一点,但我已经花了太长时间寻找,所以任何帮助都会得到回应(甚至只是指向帮助的一个部分或网页)。
谢谢 嗨,RocketBott,
我不太清楚您试图从代码中实现什么-看起来您的变量“year”还没有定义。
你能解释一下用哪些值填充哪些属性标签吗?
李 不确定这是否接近你想要实现的目标?
(defun c:modchk ( / _Subst _dxf year ss )
;; © Lee Mac 2010
(setq year "2010")
(defun _Subst ( key value elist )
(if
(setq elist
(entmod
(subst
(cons key value) (assoc key elist) elist
)
)
)
(entupd (cdr (assoc -1 elist)))
)
)
(defun _dxf ( key elist ) (cdr (assoc key elist)))
(if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "*BORDER*") (66 . 1))))
(
(lambda ( i / e el tag chk )
(while (setq e (ssname ss (setq i (1+ i))))
(while
(not
(eq "SEQEND"
(_dxf 0
(setq el
(entget
(setq e (entnext e))
)
)
)
)
)
(cond
( (eq "YEAR" (setq tag (_dxf 2 el)))
(_Subst 1 year el)
)
( (eq "0CHECKED" tag)
(setq chk (_dxf 1 el))
)
( (eq "0DDATE" tag)
(if (and chk (< 5 (strlen (_dxf 1 el))))
(_Subst 1 chk el)
)
)
)
)
)
)
-1
)
(princ "\n--> No Border Blocks Found <--")
)
(princ)
)
谢谢 也许是这样?
(完全未经测试)
(defun c:rb (/)
(setq curryr (rtos(GETVAR "CDATE")2 6))
(setq year (substr curryr 1 4))
(command "-purge" "a" "" "n")
(if (setq ss (ssget "X" '((2 . "A1_BORDER")))) (command "._-insert" "A1_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A1_border.dwg" nil))
(if (setq ss (ssget "X" '((2 . "A0_BORDER")))) (command "._-insert" "A0_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A0_border.dwg" nil))
(if (setq ss (ssget "X" '((2 . "A2_BORDER")))) (command "._-insert" "A2_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A2_border.dwg" nil))
(if (setq ss (ssget "X" '((2 . "A2_BORDER")))) (command "._-insert" "A3_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A3_border.dwg" nil))
(if (setq ss (ssget "X" '((2 . "A0_Border_Primary")))) (command "._-insert" "A0_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A0_border_Primary.dwg" nil))
(if (setq ss (ssget "X" (list (cons 0 "INSERT")(cons 2 "*BORDER*")
(cons 66 1)(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(foreach ent (mapcar 'cadr (ssnamex ss))
(setq att (entnext ent))
(while (not (eq "SEQEND" (cdadr (entget att))))
(cond ((eq "YEAR" (cdr (assoc 2 (entget att))))
(entmod (subst (cons 1 year) (assoc 1 (entget att)) (entget att))))
((eq "0CHECKED" (cdr (assoc 2 (entget att))))
(setq 0chk (cdr (assoc 1 (entget att)))))
((eq "0DDATE" (cdr (assoc 2 (entget att))))
(setq 0dat (cdr (assoc 1 (entget att))))
(if (>(strlen 0dat) 5)
(entmod (subst (cons 1 0chk) (assoc 1 (entget att)) (entget att))))))
(setq att (entnext att))))
(command "_regenall"))
(princ "\n<!> No Blocks Found <!>"))
(princ))
不客气
看看您对代码所做的修改,我明白使用哪个“0CHECKED”值无关紧要,因此我可能会提出以下建议:
(定义c:rb(/*错误*_重新定义_Subst _dxfyear ocm ss);;©Lee Mac 2010(defun*error*(msg)(if ocm(setvar'CMDECHO ocm))(或(wcmatch(strcase msg)“*BREAK,*CANCEL*,*EXIT*”)(princ(strcat“\n**error:”msg“**”))(princ))(defun _重新定义(块文件名/fn)(if(ssget“\u X”(list(cons 0“INSERT”)(cons 2 block))(if(setq fn(findfile filename))(命令“-INSERT”(strcat block=“fn)nil)(princ)(strcat“\n**”filename“not found**”)))(defun _Subst(key value elist)(if(setq elist(entmod(Subst(cons key value)(assoc key elist)elist))(entupd(cdr(assoc-1 elist)))(defun _dxf(key elist)(cdr(assoc key elist))(setq year(LM:GetDate“YYYY”)ocm(getvar'CMDECHO))(setvar'CMDECHO 0)(命令“-purge”“\u A”“\u N”)(mapcar“u ReDefine”“(“A1\u BORDER”“A0\u BORDER”“A2\u BORDER”“A3\u BORDER”“A0\u BORDER\u Primary”)(“F:\\ENGINEER\\GENERIC\\Edinburgh\u Ring\\Symbols\\A1\u BORDER.dwg”“F:\\ENGINEER\\GENERIC\\Edinburgh\u Ring\\Symbols\\A0\u BORDER.dwg”“F:\\ENGINEER\\GENERIC\\Edinburgh\u Ring\\Symbols\\A3\u BORDER.dwg”“F:\\ENGINEER\\GENERIC\\Edinburgh\u Ring\\Symbols\\A0\u Border\u Primary.dwg”)(if(setq ss(ssget“\u X””((0。“INSERT”)(2。“*Border*”)(66.1))((lambda(i/e el tag chk v)(while(setq e(ssname ss(setq i(1+i)))))))(while(not(eq“sequend”(\u dxf 0(setq el))(entget(setq e(entnext e))))(cond((eq“YEAR”(setq tag(\u dxf 2 el)))(\u Subst 1 YEAR el))((eq“0CHECKED”tag)(setq chk(cond((/=“”(setq v(\u dxf 1 el)))v)(chk))((eq“0DDATE”tag)(if(和chk(<5(strlen(\u dxf 1 el)))(\u Subst 1 chk el))))-1)(princ“\n-->未找到边界块 You're welcome
Looking at the modification you made to your code, I understand that it doesn't matter which '0CHECKED' value is used, so I would perhaps propose this:
(defun c:rb ( / *error* _ReDefine _Subst _dxf year ocm ss ) ;; © Lee Mac 2010 (defun *error* ( msg ) (if ocm (setvar 'CMDECHO ocm)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ) ) (defun _ReDefine ( block filename / fn ) (if (ssget "_X" (list (cons 0 "INSERT") (cons 2 block))) (if (setq fn (findfile filename)) (command "_.-insert" (strcat block "=" fn) nil) (princ (strcat "\n** " filename " not found **")) ) ) )(defun _Subst ( key value elist ) (if (setq elist (entmod (subst (cons key value) (assoc key elist) elist ) ) ) (entupd (cdr (assoc -1 elist))) ) ) (defun _dxf ( key elist ) (cdr (assoc key elist))) (setq year (LM:GetDate "YYYY") ocm (getvar 'CMDECHO))(setvar 'CMDECHO 0) (command "_.-purge" "_A" "" "_N") (mapcar '_ReDefine '("A1_BORDER" "A0_BORDER" "A2_BORDER" "A3_BORDER" "A0_Border_Primary") '("F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A1_border.dwg" "F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A0_border.dwg" "F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A2_border.dwg" "F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A3_border.dwg" "F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A0_Border_Primary.dwg" ) ) (if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "*BORDER*") (66 . 1)))) ( (lambda ( i / e el tag chk v ) (while (setq e (ssname ss (setq i (1+ i)))) (while (not (eq "SEQEND" (_dxf 0 (setq el (entget (setq e (entnext e)) ) ) ) ) ) (cond ( (eq "YEAR" (setq tag (_dxf 2 el))) (_Subst 1 year el) ) ( (eq "0CHECKED" tag) (setq chk (cond ( (/= "" (setq v (_dxf 1 el))) v ) ( chk ))) ) ( (eq "0DDATE" tag) (if (and chk (< 5 (strlen (_dxf 1 el)))) (_Subst 1 chk el) ) ) ) ) ) ) -1 ) (princ "\n--> No Border Blocks Found
页:
[1]