乐筑天下

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

[编程交流] 文字到多行文字lisp-添加backgr

[复制链接]

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:51:55 | 显示全部楼层 |阅读模式
这是我第一次冒险进入世界。lsp和代码,需要一些指导。
 
我有下面的代码,它可以很好地将文本转换为多行文字,但不能将文本组合成一个多行文字块。我需要实现的是,让这段代码也添加一个空白为1的清晰背景掩码,然后在绘图顺序中带到前面。如果有人能给我指出一个好的资源来学习如何做到这一点,我将不胜感激。
 
  1. (defun c:t2m (/ sset count num en el mcontent bbox point1 point2 point3 point4 mwidth mheight mstyle njust mrotate nmtext)
  2. (setvar "cmdecho" 0)
  3. (setq sset (ai_aselect))
  4. (if (null sset)
  5.         (progn
  6.                 (princ "\nNo objects selected.")
  7.                 (exit)
  8.         )
  9. )
  10. (setq count 0)
  11. (while (/= (ssname sset COUNT) nil)
  12.         (setq EN (ssname sset COUNT))
  13.         (setq EL (entget EN))
  14.         (if (= (cdr (assoc 0 EL)) "TEXT")
  15.                 (progn
  16.                         (setq mcontent (cons '1 (strcase (cdr (assoc 1 el)))))
  17.                         (setq bbox (acet-geom-textbox EL 0.1))
  18.                         (setq point1 (car bbox))
  19.                         (setq point2 (cadr bbox))
  20.                         (setq point3 (cadr (cdr bbox)))
  21.                         (setq point4 (cadr (cdr (cdr bbox))))
  22.                         (setq mwidth (cons '41 (distance point1 point2)))
  23.                         (setq mheight (cons '40 (cdr (assoc 40 el))))
  24.                         (setq mstyle (cons '7 (cdr (assoc 7 el))))
  25.                         (setq nspace (cons '410 (cdr (assoc 410 EL))))
  26.                         (setq minsert (cons '10 (cdr (assoc 10 EL))))
  27.                         (cond
  28.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 1)));JY
  29.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 2)));JU
  30.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 3)));JI
  31.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 7)));JN
  32.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 7)));JN
  33.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 6)));JK
  34.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  35.                                 ((and (= (cdr (assoc 72 el)) 4)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  36.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 7)));JN
  37.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  38.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 ));JM
  39.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 9)));J,
  40.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  41.                         )
  42.                         (setq mrotate (cons '50 (cdr (assoc 50 el))))
  43.                         (setq nmtext (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(67 . 0) nspace '(8 . "TEXT") '(100 . "AcDbMText") minsert njust mheight mwidth mstyle mcontent mrotate))
  44.                         (entmake nmtext)
  45.                         (entdel en)
  46.                         (setq count (+ count 1))
  47.                 )
  48.                 (setq count (+ count 1))
  49.         )
  50. )
  51. (setvar "cmdecho" 1)(princ)
  52. )
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 11:03:13 | 显示全部楼层
试试看
  1. (defun c:t2m (/ sset count num en el mcontent bbox point1 point2 point3 point4 mwidth mheight mstyle njust mrotate nmtext ss)
  2. (setvar "cmdecho" 0)
  3. (setq sset (ai_aselect))
  4. (if (null sset)
  5.         (progn
  6.                 (princ "\nNo objects selected.")
  7.                 (exit)
  8.         )
  9. )
  10. (setq count 0 ss (ssadd))
  11. (while (ssname sset COUNT)
  12.         (setq EN (ssname sset COUNT))
  13.         (setq EL (entget EN))
  14.         (if (= (cdr (assoc 0 EL)) "TEXT")
  15.                 (progn
  16.                         (setq mcontent (cons '1 (strcase (cdr (assoc 1 el)))))
  17.                         (setq bbox (acet-geom-textbox EL 0.1))
  18.                         (setq point1 (car bbox))
  19.                         (setq point2 (cadr bbox))
  20.                         (setq point3 (cadr (cdr bbox)))
  21.                         (setq point4 (cadr (cdr (cdr bbox))))
  22.                         (setq mwidth (cons '41 (distance point1 point2)))
  23.                         (setq mheight (cons '40 (cdr (assoc 40 el))))
  24.                         (setq mstyle (cons '7 (cdr (assoc 7 el))))
  25.                         (setq nspace (cons '410 (cdr (assoc 410 EL))))
  26.                         (setq minsert (cons '10 (cdr (assoc 10 EL))))
  27.                         (cond
  28.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 1)));JY
  29.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 2)));JU
  30.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 3)));JI
  31.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 7)));JN
  32.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 7)));JN
  33.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 6)));JK
  34.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  35.                                 ((and (= (cdr (assoc 72 el)) 4)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  36.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 7)));JN
  37.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  38.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 ));JM
  39.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 9)));J,
  40.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  41.                         )
  42.                         (setq mrotate (cons '50 (cdr (assoc 50 el))))
  43.                         (setq nmtext (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(67 . 0) nspace '(8 . "TEXT") '(100 . "AcDbMText") minsert njust mheight mwidth mstyle mcontent mrotate))
  44.                         [color="Red"](ssadd
  45.                                  (mip-mtext-mask (entmakex nmtext) t)
  46.                                  ss
  47.                                  )[/color]
  48.                         (entdel en)
  49.                         (setq count (+ count 1))
  50.                 )
  51.                 (setq count (+ count 1))
  52.         )
  53. )
  54. (if (> (sslength ss) 0)(command "_draworder" ss "" "_F"))
  55. (setvar "cmdecho" 1)(princ)
  56. )
  57. (defun mip-mtext-mask (ent OnOff / ed)
  58. ;;; ent -mtext ename
  59. ;;; OnOff - t - on mtext mask
  60. ;;; nil - off (unmask mtext)
  61. (setq ed (vl-remove-if
  62.             '(lambda (x) (member (car x) '(90 63 421 45 441)))
  63.             (entget ent)
  64.           ) ;_ end of vl-remove-if
  65. ) ;_ end of setq
  66. (if OnOFF
  67.    (setq ed (append ed
  68.                     '((90 . 3)
  69.                       (63 . 9)
  70.                       (421 . 13158600)
  71.                       (45 . 1.01)
  72.                       (441 . 6042092)
  73.                      )
  74.             ) ;_ end of append
  75.    ) ;_ end of setq
  76.    (setq ed (append ed '((90 . 2))))
  77. ) ;_ end of if
  78. (entmod ed)
  79. (entupd ent)
  80. )
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 11:06:33 | 显示全部楼层
txt2mtxt-来自Express Tools
Lee Mac Text 2多行文字升级
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:12:09 | 显示全部楼层
谢谢,但是在运行lisp时出现以下错误:
 
; 错误:错误字符读取(八进制):0
 
知道为什么吗?
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 11:19:11 | 显示全部楼层
使用expample附着dwg文件
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:25:21 | 显示全部楼层
我认为dwg无关紧要。错误在于加载lisp,而不是运行lisp。很抱歉给您带来困惑。
 
这是命令行文本(t2m2.lsp是您在第一篇文章中编写的代码):
 
命令:appload
t2m2.lsp已成功加载。
命令:;错误:错误字符读取(八进制):0
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 11:35:35 | 显示全部楼层
我认为您正在使用Autocad的中文版本。类似问题
我编辑#2(从评论中删除俄语文本)
现在可以了?
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:40:11 | 显示全部楼层
我想我已经删除了所有俄语文本,但在加载时仍然出现错误:
 
  1. (defun c:t2m (/ sset count num en el mcontent bbox point1 point2 point3 point4 mwidth mheight mstyle njust mrotate nmtext ss)
  2. (setvar "cmdecho" 0)
  3. (setq sset (ai_aselect))
  4. (if (null sset)
  5.         (progn
  6.                 (princ "\nNo objects selected.")
  7.                 (exit)
  8.         )
  9. )
  10. (setq count 0 ss (ssadd))
  11. (while (ssname sset COUNT)
  12.         (setq EN (ssname sset COUNT))
  13.         (setq EL (entget EN))
  14.         (if (= (cdr (assoc 0 EL)) "TEXT")
  15.                 (progn
  16.                         (setq mcontent (cons '1 (strcase (cdr (assoc 1 el)))))
  17.                         (setq bbox (acet-geom-textbox EL 0.1))
  18.                         (setq point1 (car bbox))
  19.                         (setq point2 (cadr bbox))
  20.                         (setq point3 (cadr (cdr bbox)))
  21.                         (setq point4 (cadr (cdr (cdr bbox))))
  22.                         (setq mwidth (cons '41 (distance point1 point2)))
  23.                         (setq mheight (cons '40 (cdr (assoc 40 el))))
  24.                         (setq mstyle (cons '7 (cdr (assoc 7 el))))
  25.                         (setq nspace (cons '410 (cdr (assoc 410 EL))))
  26.                         (setq minsert (cons '10 (cdr (assoc 10 EL))))
  27.                         (cond
  28.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 1)));JY
  29.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 2)));JU
  30.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 3))(setq NJUST (cons '71 3)));JI
  31.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 7)));JN
  32.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 7)));JN
  33.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 2))(setq NJUST (cons '71 6)));JK
  34.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  35.                                 ((and (= (cdr (assoc 72 el)) 4)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  36.                                 ((and (= (cdr (assoc 72 el)) 0)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 7)));JN
  37.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  38.                                 ((and (= (cdr (assoc 72 el)) 1)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 ));JM
  39.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 1))(setq NJUST (cons '71 9)));J,
  40.                                 ((and (= (cdr (assoc 72 el)) 2)(= (cdr (assoc 73 el)) 0))(setq NJUST (cons '71 7)));JN
  41.                         )
  42.                         (setq mrotate (cons '50 (cdr (assoc 50 el))))
  43.                         (setq nmtext (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(67 . 0) nspace '(8 . "TEXT") '(100 . "AcDbMText") minsert njust mheight mwidth mstyle mcontent mrotate))
  44.                         (ssadd
  45.                                  (mip-mtext-mask (entmakex nmtext) t)
  46.                                  ss
  47.                                  )
  48.                         (entdel en)
  49.                         (setq count (+ count 1))
  50.                 )
  51.                 (setq count (+ count 1))
  52.         )
  53. )
  54. (if (> (sslength ss) 0)(command "_draworder" ss "" "_F"))
  55. (setvar "cmdecho" 1)(princ)
  56. )
  57. (defun mip-mtext-mask (ent OnOff / ed)
  58. ;;; ent -mtext ename
  59. ;;; OnOff - t - on mtext mask
  60. ;;; nil - off (unmask mtext)
  61. (setq ed (vl-remove-if
  62.             '(lambda (x) (member (car x) '(90 63 421 45 441)))
  63.             (entget ent)
  64.           ) ;_ end of vl-remove-if
  65. ) ;_ end of setq
  66. (if OnOFF
  67. ;;;
  68.    (setq ed (append ed
  69.                     '((90 . 3)
  70.                       (63 . 9)
  71.                       (421 . 13158600)
  72.                       (45 . 1.01)
  73.                       (441 . 6042092)
  74.                      )
  75.             ) ;_ end of append
  76.    ) ;_ end of setq
  77.    (setq ed (append ed '((90 . 2))))
  78. ) ;_ end of if
  79. (entmod ed)
  80. (entupd ent)
  81. )
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 11:51:40 | 显示全部楼层
我不知道。这个代码适合我。我做了一些改变。尝试新版本。
  1. (defun c:t2m (/        sset     count    num      en       el
  2.              mcontent bbox     point1   point2   point3   point4
  3.              mwidth   mheight  mstyle   njust    mrotate  nmtext
  4.              ss
  5.             )
  6. (vl-load-com)
  7. (setvar "cmdecho" 0)
  8. (if (setq sset (ssget "_:L" '((0 . "TEXT"))))
  9. (progn  
  10. (setq count 0
  11.        ss    (ssadd)
  12. ) ;_ end of setq
  13. (while (ssname sset COUNT)
  14.    (setq EN (ssname sset COUNT))
  15.    (setq EL (entget EN))
  16.    (if (= (cdr (assoc 0 EL)) "TEXT")
  17.      (progn
  18.        (setq mcontent (cons '1 (strcase (cdr (assoc 1 el)))))
  19.        (setq EL (subst mcontent(assoc 1 EL) EL))
  20.        (setq bbox (acet-geom-textbox EL 0.1))
  21.        (setq point1 (car bbox))
  22.        (setq point2 (cadr bbox))
  23.        (setq point3 (cadr (cdr bbox)))
  24.        (setq point4 (cadr (cdr (cdr bbox))))
  25.        (setq mwidth (cons '41 (distance point1 point2)))
  26.        (setq mheight (cons '40 (cdr (assoc 40 el))))
  27.        (setq mstyle (cons '7 (cdr (assoc 7 el))))
  28.        (setq nspace (cons '410 (cdr (assoc 410 EL))))
  29.        (setq minsert (cons '10 (cdr (assoc 10 EL))))
  30.        (cond
  31.          ((and (= (cdr (assoc 72 el)) 0) (= (cdr (assoc 73 el)) 3))
  32.           (setq NJUST (cons '71 1))
  33.          )                                       ;JY
  34.          ((and (= (cdr (assoc 72 el)) 1) (= (cdr (assoc 73 el)) 3))
  35.           (setq NJUST (cons '71 2))
  36.          )                                       ;JU
  37.          ((and (= (cdr (assoc 72 el)) 2) (= (cdr (assoc 73 el)) 3))
  38.           (setq NJUST (cons '71 3))
  39.          )                                       ;JI
  40.          ((and (= (cdr (assoc 72 el)) 0) (= (cdr (assoc 73 el)) 2))
  41.           (setq NJUST (cons '71 7))
  42.          )                                       ;JN
  43.          ((and (= (cdr (assoc 72 el)) 1) (= (cdr (assoc 73 el)) 2))
  44.           (setq NJUST (cons '71 7))
  45.          )                                       ;JN
  46.          ((and (= (cdr (assoc 72 el)) 2) (= (cdr (assoc 73 el)) 2))
  47.           (setq NJUST (cons '71 6))
  48.          )                                       ;JK
  49.          ((and (= (cdr (assoc 72 el)) 0) (= (cdr (assoc 73 el)) 0))
  50.           (setq NJUST (cons '71 7))
  51.          )                                       ;JN
  52.          ((and (= (cdr (assoc 72 el)) 4) (= (cdr (assoc 73 el)) 0))
  53.           (setq NJUST (cons '71 7))
  54.          )                                       ;JN
  55.          ((and (= (cdr (assoc 72 el)) 0) (= (cdr (assoc 73 el)) 1))
  56.           (setq NJUST (cons '71 7))
  57.          )                                       ;JN
  58.          ((and (= (cdr (assoc 72 el)) 1) (= (cdr (assoc 73 el)) 0))
  59.           (setq NJUST (cons '71 7))
  60.          )                                       ;JN
  61.          ((and (= (cdr (assoc 72 el)) 1) (= (cdr (assoc 73 el)) 1))
  62.           (setq NJUST (cons '71 )
  63.          )                                       ;JM
  64.          ((and (= (cdr (assoc 72 el)) 2) (= (cdr (assoc 73 el)) 1))
  65.           (setq NJUST (cons '71 9))
  66.          )                                       ;J,
  67.          ((and (= (cdr (assoc 72 el)) 2) (= (cdr (assoc 73 el)) 0))
  68.           (setq NJUST (cons '71 7))
  69.          )                                       ;JN
  70.        ) ;_ end of cond
  71.        (setq mrotate (cons '50 (cdr (assoc 50 el))))
  72.        (setq nmtext (list '(0 . "MTEXT")   '(100 . "AcDbEntity")
  73.                           '(67 . 0)        nspace
  74.                           '(8 . "TEXT")    '(100 . "AcDbMText")
  75.                           minsert          njust
  76.                           mheight          mwidth
  77.                           mstyle           mcontent
  78.                           mrotate
  79.                          ) ;_ end of list
  80.        ) ;_ end of setq
  81.        (vla-put-backgroundfill
  82.          (vlax-ename->vla-object (entmakex nmtext))
  83.          :vlax-true
  84.        ) ;_ end of vla-put-BackgroundFill
  85.        (ssadd (entlast) ss)
  86.        (entdel en)
  87.        (setq count (+ count 1))
  88.      ) ;_ end of progn
  89.      (setq count (+ count 1))
  90.    ) ;_ end of if
  91. ) ;_ end of while
  92. (if (> (sslength ss) 0)
  93.    (command "_draworder" ss "" "_F")
  94. ) ;_ end of if
  95. )
  96. (princ "\nNo objects selected.")
  97. )
  98. (setvar "cmdecho" 1)
  99. (princ)
  100. ) ;_ end of defun
回复

使用道具 举报

1

主题

5

帖子

4

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:56:33 | 显示全部楼层
似乎正在工作。非常感谢你的帮助。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:12 , Processed in 0.537980 second(s), 72 queries .

© 2020-2025 乐筑天下

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