RocketBott 发表于 2022-7-6 10:08:14

错误的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))

 
我觉得我应该知道这一点,但我已经花了太长时间寻找,所以任何帮助都会得到回应(甚至只是指向帮助的一个部分或网页)。
 
谢谢

Lee Mac 发表于 2022-7-6 10:26:11

嗨,RocketBott,
 
我不太清楚您试图从代码中实现什么-看起来您的变量“year”还没有定义。
 
你能解释一下用哪些值填充哪些属性标签吗?
 

Lee Mac 发表于 2022-7-6 10:29:39

不确定这是否接近你想要实现的目标?
 

(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)
)

 
谢谢

RocketBott 发表于 2022-7-6 10:46:14

也许是这样?
 
(完全未经测试)
 

(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))

Lee Mac 发表于 2022-7-6 10:49:41

不客气
 
看看您对代码所做的修改,我明白使用哪个“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-->未找到边界块

RocketBott 发表于 2022-7-6 11:02:26

Lee Mac 发表于 2022-7-6 11:17:48

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]
查看完整版本: 错误的DXF组