乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 6

[编程交流] 错误的DXF组

[复制链接]

3

主题

15

帖子

12

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 10:08:14 | 显示全部楼层 |阅读模式
我试图用标题栏中另一个属性的值来更改一个属性,我想我差不多做到了,但不知道我必须对变量0chk做什么才能使用它,如下所示。如果将其替换为字符串,即“RR”,则一切正常。帮助文件表明cons需要列表或atom?
 
  1. (defun C:modchk (/)
  2. (if (setq ss (ssget "X" (list (cons 0 "INSERT")(cons 2 "*BORDER*")
  3.       (cons 66 1)(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
  4.              (cons 67 (- 1 (getvar "TILEMODE")))))))
  5.    (progn
  6.      (foreach ent (mapcar 'cadr (ssnamex ss))
  7.    (setq att (entnext ent))
  8.    (while (not (eq "SEQEND" (cdadr (entget att))))
  9.      (cond ((eq "YEAR" (cdr (assoc 2 (entget att))))
  10.         (entmod (subst (cons 1 year) (assoc 1 (entget att)) (entget att))))
  11.   ((eq "0CHECKED" (cdr (assoc 2 (entget att))))
  12.   (setq 0chk (cdr (assoc 1 (entget att)))))
  13.   ((eq "0DDATE" (cdr (assoc 2 (entget att))))
  14.   (setq 0dat (cdr (assoc 1 (entget att))))
  15.   (if (>(strlen 0dat) 5)
  16.         (entmod (subst (cons 1 0chk) (assoc 1 (entget att)) (entget att))))))
  17.      (setq att (entnext att))))
  18.      (command "_regenall"))
  19.    (princ "\n<!> No Blocks Found <!>"))
  20. (princ))

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:26:11 | 显示全部楼层
嗨,RocketBott,
 
我不太清楚您试图从代码中实现什么-看起来您的变量“year”还没有定义。
 
你能解释一下用哪些值填充哪些属性标签吗?
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:29:39 | 显示全部楼层
不确定这是否接近你想要实现的目标?
 
  1. (defun c:modchk ( / _Subst _dxf year ss )
  2. ;; © Lee Mac 2010
  3. (setq year "2010")
  4. (defun _Subst ( key value elist )
  5.    (if
  6.      (setq elist
  7.        (entmod
  8.          (subst
  9.            (cons key value) (assoc key elist) elist
  10.          )
  11.        )
  12.      )
  13.      (entupd (cdr (assoc -1 elist)))
  14.    )
  15. )
  16. (defun _dxf ( key elist ) (cdr (assoc key elist)))
  17. (if (setq ss (ssget "_X" '((0 . "INSERT") (2 . "*BORDER*") (66 . 1))))
  18.    (
  19.      (lambda ( i / e el tag chk )        
  20.        (while (setq e (ssname ss (setq i (1+ i))))         
  21.          (while
  22.            (not
  23.              (eq "SEQEND"
  24.                (_dxf 0
  25.                  (setq el
  26.                    (entget
  27.                      (setq e (entnext e))
  28.                    )
  29.                  )
  30.                )
  31.              )
  32.            )
  33.            (cond
  34.              ( (eq "YEAR" (setq tag (_dxf 2 el)))
  35.                (_Subst 1 year el)
  36.              )
  37.              ( (eq "0CHECKED" tag)
  38.                (setq chk (_dxf 1 el))
  39.              )
  40.              ( (eq "0DDATE" tag)
  41.                (if (and chk (< 5 (strlen (_dxf 1 el))))
  42.                  (_Subst 1 chk el)
  43.                )
  44.              )
  45.            )
  46.          )
  47.        )
  48.      )
  49.      -1
  50.    )
  51.    (princ "\n--> No Border Blocks Found <--")
  52. )
  53. (princ)
  54. )

 
谢谢
回复

使用道具 举报

3

主题

15

帖子

12

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 10:46:14 | 显示全部楼层
也许是这样?
 
(完全未经测试)
 
  1. (defun c:rb (/)
  2. (setq curryr (rtos(GETVAR "CDATE")2 6))
  3. (setq year (substr curryr 1 4))
  4. (command "-purge" "a" "" "n")
  5. (if (setq ss (ssget "X" '((2 . "A1_BORDER")))) (command "._-insert" "A1_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A1_border.dwg" nil))
  6. (if (setq ss (ssget "X" '((2 . "A0_BORDER")))) (command "._-insert" "A0_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A0_border.dwg" nil))
  7. (if (setq ss (ssget "X" '((2 . "A2_BORDER")))) (command "._-insert" "A2_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A2_border.dwg" nil))
  8. (if (setq ss (ssget "X" '((2 . "A2_BORDER")))) (command "._-insert" "A3_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A3_border.dwg" nil))
  9. (if (setq ss (ssget "X" '((2 . "A0_Border_Primary")))) (command "._-insert" "A0_BORDER=F:\\ENGINEER\\GENERIC\\Edinburgh_Ring\\Symbols\\A0_border_Primary.dwg" nil))
  10. (if (setq ss (ssget "X" (list (cons 0 "INSERT")(cons 2 "*BORDER*")
  11.       (cons 66 1)(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
  12.              (cons 67 (- 1 (getvar "TILEMODE")))))))
  13.    (progn
  14.      (foreach ent (mapcar 'cadr (ssnamex ss))
  15.    (setq att (entnext ent))
  16.    (while (not (eq "SEQEND" (cdadr (entget att))))
  17.      (cond ((eq "YEAR" (cdr (assoc 2 (entget att))))
  18.         (entmod (subst (cons 1 year) (assoc 1 (entget att)) (entget att))))
  19.   ((eq "0CHECKED" (cdr (assoc 2 (entget att))))
  20.   (setq 0chk (cdr (assoc 1 (entget att)))))
  21.   ((eq "0DDATE" (cdr (assoc 2 (entget att))))
  22.   (setq 0dat (cdr (assoc 1 (entget att))))
  23.   (if (>(strlen 0dat) 5)
  24.         (entmod (subst (cons 1 0chk) (assoc 1 (entget att)) (entget att))))))
  25.      (setq att (entnext att))))
  26.      (command "_regenall"))
  27.    (princ "\n<!> No Blocks Found <!>"))
  28. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:49:41 | 显示全部楼层
不客气
 
看看您对代码所做的修改,我明白使用哪个“0CHECKED”值无关紧要,因此我可能会提出以下建议:
 
[code](定义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-->未找到边界块
回复

使用道具 举报

3

主题

15

帖子

12

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 11:02:26 | 显示全部楼层
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 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:
 

[code](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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 20:57 , Processed in 0.439456 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表