乐筑天下

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

[编程交流] 文本操作

[复制链接]

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 15:13:04 | 显示全部楼层 |阅读模式
你好
提前道歉,但我在beg上,我在CAD(2007)中有一些文本写在3行上,但它应该只在2行上,顶行表示“围栏级别”,下一行表示级别和链测长度,例如29.00m@15:00,最后一行给出日期为2009年1月28日,它们应该在第一行上写为“围栏级别29.00m”,然后在下面的行上写为“@15:00 28/01/2009”,我有很多东西要更改,有没有人能快速生成lisp,这样我就可以快速更改它们。
提前谢谢。
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 15:26:23 | 显示全部楼层
是文字还是多行文字?
 
我不是自愿提出解决方案,但他们需要不同的方法。
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 15:32:47 | 显示全部楼层
它有三行独立的文字,所以不是多行文字。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:39:13 | 显示全部楼层
我想作为一种快速修复方法,你可以使用
 
TXT2MTXT(快速)。
 
但很明显,如果你有很多需要改变的地方,这会很烦人。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:44:18 | 显示全部楼层
都在同一层吗?
 
你可以发一张样图给我吗?
 
谢谢
 
回复

使用道具 举报

3

主题

8

帖子

5

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 15:49:40 | 显示全部楼层
我有,112个实例需要更改,我现在回家后无法发布示例图,就像我需要它连接文本,但必须拆分中间行,将一半添加到第一行,将另一半添加到底线。哦,是的,都在同一层。
上传了一个jpg文件的一个基本例子,我有文本在顶部的例子,它需要在底部的格式。仍在文本中,而不是多行文字。
161308ahsei3e9iz6bi5pi.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:57:17 | 显示全部楼层
事实上,我发现这比预期的更难,更让工程师恼火——但我坚持了一段时间:
 
  1. (defun c:fence (/ ss i tEnt tVal l1 l1list l1val l2 l2list
  2.          l2val l3 l3list l3val l2pos l1New l2New)
  3. (vl-load-com)
  4. (if (and (setq ss (ssget (list (cons 0 "TEXT")
  5.        (if (getvar "CTAB")
  6.              (cons 410 (getvar "CTAB"))
  7.            (cons 67 (- 1 (getvar "TILEMODE")))))))
  8.       (= (setq i (sslength ss)) 3))
  9.    (progn
  10.      (while (not (minusp (setq i (1- i))))
  11.    (setq tEnt (ssname ss i)
  12.          tVal (cdr (assoc 1 (entget tEnt))))
  13.    (cond ((wcmatch tVal "Fen*")
  14.           (setq l1 tEnt)
  15.           (setq l1list (entget l1))
  16.           (setq l1val tVal))
  17.          ((wcmatch tVal "*@*")
  18.           (setq l2 tEnt)
  19.           (setq l2list (entget l2))
  20.           (setq l2val tVal))
  21.          ((wcmatch tVal "*/*")
  22.           (setq l3 tEnt)
  23.           (setq l3list (entget l3))
  24.           (setq l3val tVal))))
  25.      (setq l2pos (vl-string-search "@" l2val)
  26.        l1New (strcat l1val (chr 32) (substr l2val 1 l2pos))
  27.        l2New (strcat (substr l2val (1+ l2pos)) (chr 32) l3val))
  28.      (setq l1list (subst (cons 1 l1New) (assoc 1 l1list) l1list)
  29.        l2list (subst (cons 1 l2New) (assoc 1 l2list) l2list))
  30.      (entmod l1list)
  31.      (entmod l2list)
  32.      (entdel l3))
  33.    (princ "\n<!> No Text Found <!>"))
  34. (princ))

 
不过,您仍然需要选择每个实例,但这可能会加快速度
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:01:06 | 显示全部楼层
我真的无法对上述LISP进行任何改进,因为如果使用“X”参数进入选择集的世界,您可以使用DXF表中的所有不同值进行过滤-但是,使用“fence…”的多个实例等等等等,几乎不可能确定哪些三行文字需要压缩成两行。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 16:11:48 | 显示全部楼层
这是我的2c
只需更改为标准选择过滤器
(突出显示红色)
 
  1. ;;__________________________________________;;
  2. (defun dxf (key alist)
  3. (cdr (assoc key alist))
  4. )
  5. ;;__________________________________________;;
  6. (defun ss_list        (ss / en i lst)
  7. (setq i -1)
  8. (while (setq en (ssname ss (setq i (1+ i))))
  9.    (setq lst (cons en lst)
  10.   )
  11.    )
  12. (reverse lst)
  13. )
  14. ;;__________________________________________;;
  15. (defun sort_txt_list  (lst)
  16. (vl-sort lst
  17.    (function (lambda (a b)
  18.                (< (cadr (dxf 10 (entget a)))
  19.                   (cadr (dxf 10 (entget b)))))))
  20. )
  21. ;;__________________________________________;;
  22. (defun C:txf (/ *error* com_list ctxt el el1 el2 en fst ip ll
  23.       ocm p1 p2 pos pt pt1 pt2 ss str1 str2 tx1 tx2 tx3
  24.       txt txt_list ur)
  25.            (defun *error*  (msg)
  26.       (if msg
  27.       (if
  28.         (not
  29.           (member
  30.             msg
  31.             '("console break"
  32.               "Function cancelled"
  33.               "quit / exit abort"
  34.               "")
  35.             )
  36.           )
  37.          (princ (strcat "\nError: " msg))
  38.          )
  39.         )
  40.       (if ocm
  41.         (setvar "cmdecho" ocm)
  42.         )
  43.       (command "._zoom" "_P")
  44.       (command "._ucs" "_P")
  45.       (command "undo" "end")
  46.       (prompt "\nResetting System Variables... ")
  47.       (princ)
  48.       )
  49. (setq ocm (getvar "cmdecho"))
  50. (command "._undo" "_BE")
  51. (command "._ucs" "_W")
  52. (command "._zoom" "_E")
  53. (alert "Select 3 lines of text by window\nwith small gap for using them\nlater as template")
  54. (princ "\nSelection start")
  55. (setq pt1 (getpoint "\nLOWER LEFT corner point: ")
  56.       pt2 (getcorner pt1 "\nUPPER RIGHT corner point: ")
  57. )
  58. (while (not
  59.    (and
  60. (setq ss (ssget "_W" pt1 pt2
  61.           (list (cons 0 "TEXT")
  62.                 [color=red](cons 8 "ANNO-TEXT");text layer
  63.                 (cons 7 "SHERIF");text style
  64.                 (cons 40 0.75);text size[/color]
  65.                 )
  66.            )
  67. )
  68. (= 3 (sslength ss))))
  69.    (alert "Select 3 text only from up to down")
  70.    )
  71. (setq txt_list (sort_txt_list (ss_list ss)))
  72. ;; absolute coordinates of selection window:
  73. (setq fst (car txt_list)
  74. pt (dxf 10 (entget fst))
  75. )
  76. (setq ll (mapcar '- pt1 pt)
  77. ur (mapcar '- pt2 pt)
  78. ss nil
  79. )
  80. (setq ss (ssget "_X"
  81.           (list (cons 0 "TEXT")
  82.                 (cons 1 (dxf 1 (entget fst)))
  83.                 [color=red](cons 8 "ANNO-TEXT");text layer
  84.                 (cons 7 "SHERIF");text style
  85.                 (cons 40 0.75);text size[/color]
  86.                 )
  87.            )
  88. )
  89. (setq com_list (ss_list ss) ss nil)
  90. (while (setq fst (car com_list))
  91. (setq pt (dxf 10 (entget fst))
  92. p1 (mapcar '+ pt ll)
  93. p2 (mapcar '+ pt ur)
  94. )
  95. (setq ss (ssget "_W" p1 p2
  96.           (list (cons 0 "TEXT")
  97.                 [color=red](cons 8 "ANNO-TEXT");text layer
  98.                 (cons 7 "SHERIF");text style
  99.                 (cons 40 0.75);text size[/color]
  100.                 )
  101.            )
  102. )
  103. (setq txt_list (sort_txt_list (ss_list ss))
  104. tx1 (car txt_list)
  105. tx2 (cadr txt_list)
  106. tx3 (last txt_list)
  107. el1 (entget tx1)
  108. el2 (entget tx2)
  109. )  
  110. (setq ctxt "" txt "")
  111. (while (setq en (car txt_list))   
  112.    (setq el (entget en))
  113.    (setq ip (dxf 10 el))
  114.    (setq txt (dxf 1 el))
  115.    (setq ctxt (strcat txt " " ctxt))
  116.    (setq txt_list (cdr txt_list))
  117.    )
  118. (setq str1 (substr ctxt (setq pos (1+ (vl-string-search "@" ctxt))))
  119. str2 (substr ctxt 1 (+ (- (strlen ctxt) pos) 2))
  120. )
  121. ;;;    (entdel (last txt_list))
  122.    (entmod (subst (cons 1 str1)(assoc 1 el1) el1))
  123.    (entupd tx1)  
  124.    (entmod (subst (cons 1 str2)(assoc 1 el2) el2))  
  125.    (entupd tx2)
  126.    (command "._erase" tx3 "")
  127. (setq com_list (cdr com_list))
  128.    
  129.    )   
  130. (*error* nil)
  131. (princ)
  132. )
  133. (princ "\nStart command with TXF")
  134. (princ)

 
~'J'~
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:14:47 | 显示全部楼层
好主意,Fixo-希望他只是将文本段复制/粘贴到不同的区域,这样所有实例都几乎相同
 
不错
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:23 , Processed in 1.988479 second(s), 74 queries .

© 2020-2025 乐筑天下

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