乐筑天下

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

[编程交流] 需要帮助更新内的文本

[复制链接]

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 23:02:27 | 显示全部楼层 |阅读模式
当我生成一个新图形时,它会创建一个包含信息的文本文件。Autocad使用字符串位于图形中的特定图层自动更新该文件中的文字。根据字符串所在的层,这将决定更新时使用的信息。
 
尽管如此,它不会更新块内的属性。有人能帮忙吗。我愿意讨论并协助解决这个问题。我将为我的标题栏自动化一些信息,我们所有的标题栏都被属性阻止。
 
以下是用于更新信息的代码
  1. (defun uinfo () (princ "\nUpdating Drawing Information...")
  2. (if (= found 1)
  3. (progn (setq dummy (read-line infile))
  4.         (setq desc (read dummy))
  5.         (setq dummy (read-line infile))
  6.         (setq drawing (read dummy)))
  7. (progn (setq desc    '(1 . "- NEW EQUIPMENT -"))
  8.         (setq drawing '(1 . "- UNASSIGNED -"))))
  9. (setq sset (ssget "X" (list (cons 0 "TEXT") (cons 8 "TITLE"))))
  10. (setq lp 0)
  11. (while (< lp (sslength sset))
  12.   (setq ent (entget (ssname sset lp))) (setq entinfo (cdr (assoc 1 ent)))
  13.   (if (= (substr entinfo 1 4) "Desc") (entmod (subst desc (assoc 1 ent) ent)))
  14.   (if (= (substr entinfo 1 4) "Draw") (entmod (subst drawing (assoc 1 ent) ent)))
  15.   (if (= (substr entinfo 1 3) "Dwg") (entmod (subst drawing (assoc 1 ent) ent)))
  16.   (if (= (substr entinfo 1 4) "DESC") (entmod (subst desc (assoc 1 ent) ent)))
  17.   (if (= (substr entinfo 1 4) "DRAW") (entmod (subst drawing (assoc 1 ent) ent)))
  18.   (if (= (substr entinfo 1 3) "DWG") (entmod (subst drawing (assoc 1 ent) ent)))
  19.   (setq lp (1+ lp)))
  20. (setq sset nil) (setq lp nil)
  21. (setq sset (ssget "X" (list (cons 0 "TEXT") (cons 8 (strcat tcircuit "-EQMRK")))))
  22. (setq lp 0)
  23. (if (/= sset nil)
  24.   (while (< lp (sslength sset))
  25.    (setq ent (entget (ssname sset lp)))
  26.    (setq entinfo (cdr (assoc 1 ent)))
  27.    (if (= (substr entinfo 1 4) "Desc") (entmod (subst desc (assoc 1 ent) ent)))
  28.    (if (= (substr entinfo 1 4) "Draw") (entmod (subst drawing (assoc 1 ent) ent)))
  29.    (if (= (substr entinfo 1 3) "Dwg") (entmod (subst drawing (assoc 1 ent) ent)))
  30.    (if (= (substr entinfo 1 4) "DESC") (entmod (subst desc (assoc 1 ent) ent)))
  31.    (if (= (substr entinfo 1 4) "DRAW") (entmod (subst drawing (assoc 1 ent) ent)))
  32.    (if (= (substr entinfo 1 3) "DWG") (entmod (subst drawing (assoc 1 ent) ent)))
  33.    (setq lp (1+ lp))))
  34. (princ "Done.")
  35. (prin1))

 
以下是用于根据其各自的图层更新图形中所有信息的实际例程。
 
  1. (defun C:UPDATE ()
  2. (setvar "CMDECHO" 0)
  3. (setvar "MENUCTL" 0)
  4. ;; (command "._snap" "0.03125")
  5. (command "plinewid" "0.0")
  6. (if (null filename) (setq filename (getstring "\nPath and name of update file: ")))
  7. (if (null tcircuit)
  8. (progn (C:EQUIP2))
  9. (progn (makenames tcircuit) (checklayers tcircuit)))
  10. (if (null tcircuit)
  11. (progn
  12.   (princ "\nCurrent name has not been established")
  13.   (princ "\nplease type EQUIP and establish current equip. or make new"))
  14. (progn
  15.   (openfile)
  16.   (seek-tcircuit)
  17.   (if (= (getvar "userr1") 0.0) (setvar "userr1" 3.0))
  18.   (if (= (getvar "userr2") 0.0) (setvar "userr2" 1.0))
  19.   (if (ssget "X" (list (cons 8 "CIRCUIT-INFO") (cons 0 "TEXT"))) (uinfo) (repeat 2 (read-line infile)))
  20.   (if (ssget "X" (list (cons 8 "TITLE") (cons 0 "TEXT"))) (udates) (repeat 2 (read-line infile)))
  21. ;;   (uinfo)
  22. ;;   (udates)
  23.   (if (= found 1)
  24. ;;    (progn (udp) (uext) (uldar) (uvalve))
  25.    (princ "\nNO INFORMATION TO UPDATE"))
  26.   (closefile)))
  27. (command "._-layer" "s" PIPING "")
  28. (princ))

 
我需要添加到代码中,以便它将更新块中定义的属性文本字符串。如果您有任何意见或任何问题,我将不胜感激。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:15:01 | 显示全部楼层
下面是一个更改标题栏中值的示例,使用VL而不是ent。这意味着获取值或输入新值。使用属性标记名确定要更改的属性。
 
  1. ; changes to issued for construction
  2. : thanks to lee mac for original code
  3. (vl-load-com)
  4. ; 1.  Get current date in mm/dd/yy format.
  5. (defun ddmmyy (/ x today)
  6.     (setvar "cmdecho" 0)
  7.     (setq x (getvar "CDATE"))                 ; get current date
  8.     (setq today ( rtos x 2 4))                    ; convert to a string
  9.     (setq date (strcat (substr today 7 2) "."    (substr today 5 2) "." (substr today 3 2) ))
  10. )
  11. (setq oldtag1 "DRAWING_STATUS") ;attribute tag name
  12. (setq newstr1 "ISSUED FOR CONSTRUCTION")
  13. (setq oldtag2 "REV_NO")  ;attribute tag name
  14. (setq newstr2 "0")
  15. (setq ss1 (ssget "x"  '((0 . "INSERT") (2 . "DA1DRTXT"))))
  16. (setq inc (sslength ss1))
  17. (repeat inc      
  18. (foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 (setq inc (1- inc)) )) 'getattributes)
  19. (if (= oldtag1 (strcase (vla-get-tagstring att)))
  20. (vla-put-textstring att newstr1)
  21. ) ; end if
  22. (if (= oldtag2 (strcase (vla-get-tagstring att)))
  23. (vla-put-textstring att newstr2)
  24. ) ; end if
  25. ) ; end for
  26. ) ;end repeat
  27. (setq oldtag1 "REV-NO")
  28. (setq newstr1 "0")
  29. (ddmmyy)
  30. (setq oldtag2 "DATE")
  31. (setq newstr2 date)
  32. (setq oldtag3 "AMENDMENT")
  33. (setq newstr3 "ISSUED FOR CONSTRUCTION")
  34. (setq ss2 (ssget "x"  '((0 . "INSERT") (2 . "REVTABLE"))))
  35. (setq inc (sslength ss2))
  36. (repeat inc
  37. (foreach att (vlax-invoke (vlax-ename->vla-object (ssname ss2 (setq inc (1- inc)))) 'getattributes)
  38. (if (= oldtag1 (strcase (vla-get-tagstring att)))
  39. (vla-put-textstring att newstr1)
  40. )
  41. (if (= oldtag2 (strcase (vla-get-tagstring att)))
  42. (vla-put-textstring att newstr2)
  43. )
  44. (if (= oldtag3 (strcase (vla-get-tagstring att)))
  45. (vla-put-textstring att newstr3)
  46. )
  47. )
  48. )
  49. (setq ss1 nil)
  50. ; (setq ss2 nil)
  51. (princ)
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 23:21:32 | 显示全部楼层
有没有一段代码我可以添加到我现有的代码中,只告诉它在块和属性中搜索,而不仅仅是纯文本。谢谢
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:30:31 | 显示全部楼层
你可以使用很多
李·麦克的那个
 
  1. ;; Set Attribute Values  -  Lee Mac
  2. ;; Sets attributes with tags found in the association list to their associated values.
  3. ;; blk - [ent] Block (Insert) Entity Name
  4. ;; lst - [lst] Association list of ((<tag> . <value>) ... )
  5. ;; Returns: nil
  6. (defun LM:setattributevalues ( blk lst / enx itm )
  7.    (while (= "ATTRIB" (cdr (assoc 0 (setq enx (entget (setq blk (entnext blk)))))))
  8.        (if
  9.            (and
  10.                (setq itm (assoc (cdr (assoc 2 enx)) lst))
  11.                (entmod (subst (cons 1 (cdr itm)) (assoc 1 enx) enx))
  12.            )
  13.            (entupd blk)
  14.        )
  15.    )
  16. )

 
这是用于常规块。
 
ymg公司
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 23:38:28 | 显示全部楼层
也许值得一问的是,您对属性及其标记有多熟悉。也许每个图形文件都有几个标题栏块?你也需要根据图层更新吗?
回复

使用道具 举报

47

主题

257

帖子

216

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
229
发表于 2022-7-5 23:50:28 | 显示全部楼层
谢谢你打电话给男生。
 
我非常熟悉属性和它们的标签,因为我们每天都在使用它们。我们有。dwg模板基于图形将具有多少张图纸(1SHT、2SHT、3SHT),但每个模板包含相同的标题栏,并具有定义的属性/标记。(即DRAWBY、SURVEYBY、DRAWDATE、SURVEYDATE、CLIENT、FACILITY)我当前的例程从中检索信息。dat文件,并将更新特定层上的常规文本,但它不会在具有属性的块中搜索。代码张贴在上面。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:01:28 | 显示全部楼层
特梅拉康,
 
我跟不上你。
 
因为你发布的所有代码都没有找到一个区块,
它仅为文本。
 
现在,如果你有一个或多个标题栏,你可以使用
另一个例程用于获取块属性中的任何值。
该例程将是LM:GetAttributeValue。它可以在李的网站上找到。
 
如果要根据文件中的数据更新块属性
我在LM:setattributevalues上面发布的一个将设置所有属性
您将在列表中为给定块提供它们的新值。
 
你所需要做的就是做一个例行程序,把一个虚线列表放在一起
“((标记值)(…)”然后调用上面的:
 
  1. (setq  attriblst '("DRAWBY" "SURVEYBY" "DRAWDATE" "CLIENT" "FACILITY")
  2.        valuelst '("TM" "JB" "2014/05/16" "OUR BEST CLIENT" "WAREHOUSE #2")
  3.       updatelst (mapcar '(lambda (a b) (cons a b)) attriblst valuelst)
  4. )
  5. ( LM:setattributevalues "TitleBlock Name" updatelst)
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 00:08:23 | 显示全部楼层
 
这是“使用属性和/或文本”吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:16 , Processed in 0.730185 second(s), 68 queries .

© 2020-2025 乐筑天下

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