乐筑天下

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

[编程交流] 转换属性定义t

[复制链接]

7

主题

37

帖子

30

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:39:42 | 显示全部楼层 |阅读模式
请有人帮助我,是否有任何lisp用于将属性定义(非块属性)转换为文本或多行文字
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:47:05 | 显示全部楼层
这里有一个老掉牙的例子:
  1. ;=======================================================================
  2. ;    Atd2Text.Lsp                                    Feb 28, 2003
  3. ;    Change ATTDEF To Text Using Tag Name As Text Value
  4. ;================== Start Program ======================================
  5. (princ "\nCopyright (C) 2003, Fabricated Designs, Inc.")
  6. (princ "\nLoading Atd2Text v1.1 ")
  7. (setq a2t_ nil lsp_file "Atd2Text")
  8. ;================== Macros =============================================
  9. (defun PDot ()(princ "."))
  10. (PDot);++++++++++++ Set Modes & Error ++++++++++++++++++++++++++++++++++
  11. (defun a2t_smd ()
  12. (SetUndo)
  13. (setq olderr *error*
  14.      *error* (lambda (e)
  15.                (while (> (getvar "CMDACTIVE") 0)
  16.                       (command))
  17.                (and (/= e "quit / exit abort")
  18.                     (princ (strcat "\nError: *** " e " *** ")))
  19.                (command "_.UNDO" "_END" "_.U")
  20.                (a2t_rmd))
  21.       a2t_var '(("CMDECHO"   . 0) ("MENUECHO"   . 0)
  22.                 ("MENUCTL"   . 0) ("MACROTRACE" . 0)
  23.                 ("OSMODE"    . 0) ("SORTENTS"   . 119)
  24.                 ("BLIPMODE"  . 0) ("MODEMACRO" . ".")
  25.                 ("SNAPMODE"  . 0) ("UCSICON"    . 1)
  26.                 ("ORTHOMODE" . 0) ("GRIDMODE"   . 0)
  27.                 ("ELEVATION" . 0) ("THICKNESS"  . 0)
  28.                 ("HIGHLIGHT" . 0) ("REGENMODE"  . 1)
  29.                 ("CECOLOR"   . "BYLAYER")
  30.                 ("CELTYPE"   . "BYLAYER")))
  31. (foreach v a2t_var
  32.      (setq a2t_rst (cons (cons (car v) (getvar (car v))) a2t_rst))
  33.      (setvar (car v) (cdr v)))
  34. (princ (strcat (getvar "PLATFORM") " Release " (ver)
  35.        " -  Convert ATTDEF to TEXT ....\n"))
  36. (princ))
  37. (PDot);++++++++++++ Return Modes & Error +++++++++++++++++++++++++++++++
  38. (defun a2t_rmd ()
  39. (setq *error* olderr)
  40. (foreach v a2t_rst (setvar (car v) (cdr v)))
  41. (command "_.UNDO" "_END")
  42. (prin1))
  43. (PDot);++++++++++++ Set And Start An Undo Group ++++++++++++++++++++++++
  44. (defun SetUndo ()
  45. (and (zerop (getvar "UNDOCTL"))
  46.      (command "_.UNDO" "_ALL"))
  47. (and (= (logand (getvar "UNDOCTL") 2) 2)
  48.      (command "_.UNDO" "_CONTROL" "_ALL"))
  49. (and (= (logand (getvar "UNDOCTL")  8)
  50.      (command "_.UNDO" "_END"))
  51. (command "_.UNDO" "_GROUP"))
  52. (PDot);************ Main Program ***************************************
  53. (defun a2t_ (/ olderr a2t_var a2t_rst st tc ss en ed i)
  54. (a2t_smd)
  55. (initget 1 "Tag Default Prompt")
  56. (setq st (getkword "\nMake Text Show ATTDEF -> Default/Prompt/Tag:   "))
  57. (cond ((= st "Tag")      (setq tc 2))
  58.        ((= st "Prompt")   (setq tc 3))
  59.        ((= st "Default")  (setq tc 1)))
  60. (while (not ss)
  61.         (setq ss (ssget '((0 . "ATTDEF")))))
  62. (setq i (sslength ss))
  63. (princ (strcat "\nChanging " (rtos i 2 0) " ATTDEFs to TEXT\n"))
  64. (while (not (minusp (setq i (1- i))))
  65.         (princ (strcat "\r" (rtos i 2 0) "         "))
  66.         (setq en (ssname ss i)
  67.               ed (entget en))
  68.         (entdel en)
  69.         (entmake (list (cons 0 "TEXT")
  70.                        (cons 1 (cdr (assoc tc ed)))
  71.                        (assoc 7 ed)
  72.                        (assoc 8 ed)
  73.                        (assoc 10 ed)
  74.                        (assoc 11 ed)
  75.                        (if (assoc 39 ed)
  76.                            (assoc 39 ed)
  77.                            (cons 39 0.0))
  78.                        (assoc 40 ed)
  79.                        (assoc 41 ed)
  80.                        (assoc 50 ed)
  81.                        (assoc 51 ed)
  82.                        (if (assoc 62 ed)
  83.                            (assoc 62 ed)
  84.                            (cons 62 256))
  85.                        (assoc 71 ed)
  86.                        (assoc 72 ed)
  87.                        (cons 73 (cdr (assoc 74 ed)))
  88.                        (assoc 210 ed))))
  89. (a2t_rmd))
  90. (PDot);************ Load Program ***************************************
  91. (defun C:Atd2Text () (a2t_))
  92. (if a2t_ (princ "\nAtd2Text Loaded\n"))
  93. (prin1)
  94. ;|================== End Program =======================================

 
-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:51:15 | 显示全部楼层
David,不要试图踩到你的脚趾,但这也应该解释多行文字attdef:
 
  1. (defun c:AttDef2Text ( / ss )
  2. ;; © Lee Mac  ~  01.06.10
  3. (vl-load-com)
  4. (if (setq ss (ssget "_:L" '((0 . "ATTDEF"))))
  5.    (
  6.      (lambda ( i / e o )
  7.        (while (setq e (ssname ss (setq i (1+ i))))
  8.          (if
  9.            (
  10.              (if (and (vlax-property-available-p
  11.                         (setq o (vlax-ename->vla-object e)) 'MTextAttribute)
  12.                       (eq :vlax-true (vla-get-MTextAttribute o)))
  13.                MAttDef2MText AttDef2Text
  14.              )
  15.              (entget e)
  16.            )
  17.            (entdel e)
  18.          )
  19.        )
  20.      )
  21.      -1
  22.    )
  23. )
  24. (princ)
  25. )
  26. (defun AttDef2Text ( eLst / dx74 dx2 )
  27. ;; © Lee Mac  ~  01.06.10
  28. (setq dx74 (cdr (assoc 74 eLst)) dx2 (cdr (assoc 2 eLst)))
  29. (entmake
  30.    (append '( (0 . "TEXT") ) (RemovePairs '(0 100 1 2 3 73 74 70 280) eLst)
  31.      (list
  32.        (cons 73 dx74)
  33.        (cons  1  dx2)
  34.      )
  35.    )
  36. )
  37. )
  38. (defun MAttDef2MText ( eLst )
  39. ;; © Lee Mac  ~  01.06.10
  40. (entmake
  41.    (append '( (0 . "MTEXT") (100 . "AcDbEntity") (100 . "AcDbMText") )
  42.      (RemoveFirstPairs '(40 50 41 7 71 72 71 72 73 10 11 11 210)
  43.        (RemovePairs '(-1 102 330 360 5 0 100 101 1 2 3 42 43 51 74 70 280) eLst)
  44.      )
  45.      (list (cons 1 (cdr (assoc 2 eLst))))
  46.    )
  47. )
  48. )
  49. (defun RemoveFirstPairs ( pairs lst )
  50. ;; © Lee Mac
  51. (defun foo ( pair lst )
  52.    (if lst
  53.      (if (eq pair (caar lst))
  54.        (cdr lst)
  55.        (cons (car lst) (foo pair (cdr lst)))
  56.      )
  57.    )
  58. )
  59. (foreach pair pairs
  60.    (setq lst (foo pair lst))
  61. )
  62. lst
  63. )
  64. (defun RemovePairs ( pairs lst )
  65. ;; © Lee Mac
  66. (vl-remove-if
  67.    (function
  68.      (lambda ( pair )
  69.        (vl-position (car pair) pairs)
  70.      )
  71.    )
  72.    lst
  73. )
  74. )
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 16:53:47 | 显示全部楼层
李,
 
没问题。OP有点模糊-大卫
回复

使用道具 举报

7

主题

37

帖子

30

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:00:44 | 显示全部楼层
亲爱的朋友们:,
David和Lee,这两个代码都很好地工作,并且正在进行修改。。。。。。。。。。。。。。。。。。。。。
多谢…………:D: D:D
马尼
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:03:21 | 显示全部楼层
不客气
回复

使用道具 举报

7

主题

29

帖子

22

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:07:19 | 显示全部楼层
我试过了(第#3页),得到了如下错误:
 
 
我也尝试了#2,它成功了,但无法保留属性值。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:11:40 | 显示全部楼层
你复制了我帖子中的所有代码吗?
回复

使用道具 举报

7

主题

29

帖子

22

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:16:25 | 显示全部楼层
 
S、 O.B。
 
浏览器中的“全选”不会保留在报价框中。所以我强调了“all”,但显然“all”不包括最后一个括号。因此,再一次,我的用户名。
 
现在可以了。谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:21:53 | 显示全部楼层
不客气
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:54 , Processed in 0.369531 second(s), 72 queries .

© 2020-2025 乐筑天下

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