明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 674|回复: 7

[提问] 寻求 批量查找特定文字 在其 文字上方加入 带序号前缀

[复制链接]
发表于 2023-8-4 12:05 | 显示全部楼层 |阅读模式
5明经币
例如  以下数据   FM甲1021  M2535   MM00   C5800   FC1058  CC00

通过查找M和C(不区分大小写) 并且排除  MM和CC

最终实现效果为    1#                2#                     3#          4#
                       FM甲1021      M2535    MM00   C5800      FC1058     CC00

有以下要求:
1、需要注意的是 查找的文字 可以是单行文字,多行文字,块内文字,天正文字等等
2、考虑到加入前缀后文字会变宽,接近文字可能会重叠,最好就是前缀和文字平行显示, 不要在一行显示  。
例如不要显示为 (有时候会重叠)    1# FM甲10212#M2535    MM00   3#C58004# FC1058     CC00
3、序号前缀可以设置字体 大小和颜色,便于区分

说明:其实CAD自带的查找 替换 可以简单实现,但是需要手工的一个个的加入 数字前缀,导致很繁琐。

发表于 2023-8-4 12:05 | 显示全部楼层



  1. (defun check-text (ent / str)
  2.   (setq matchs '("*M*" "*C*"))
  3.   (setq notmatchs '("*MM*" "*CC*"))
  4.   (if (setq str (entity:getdxf ent 1))
  5.       (and
  6.        (apply 'or (mapcar '(lambda(x)(wcmatch (strcase str) x)) matchs))
  7.        (apply 'and (mapcar '(lambda(x)(wcmatch (strcase str) (strcat "~" x))) notmatchs)))))
  8.   
  9. (defun findtext ()
  10.   (setq txts (pickset:to-list (ssget '((0 . "*text,attrib,insert")))))
  11.   (setq txts
  12.   (vl-remove-if-not
  13.    '(lambda(txt)
  14.      (cond
  15.        ((/= "INSERT" (entity:getdxf txt 0))
  16.         (check-text txt))
  17.        ((= "INSERT" (entity:getdxf txt 0))
  18.         (setq entlst (block:ent-list (entity:getdxf txt 2)))
  19.         (setq flag nil)
  20.         (while (and (setq ent (car entlst))
  21.         (null flag))
  22.     (if (wcmatch (entity:getdxf ent 0) "*TEXT")
  23.         (setq flag
  24.         (check-text ent)))
  25.     (setq entlst (cdr entlst))
  26.     )
  27.         flag)))
  28.    txts)))

  29. (defun mark-order (ents)
  30.   (setq i 0)
  31.   (foreach
  32.    ent ents
  33.    (cond
  34.      ((/=  "INSERT" (entity:getdxf ent 0))
  35.       ;; 取文字中点
  36.       (setq pt-mid (apply 'point:mid (entity:getbox ent 0)))
  37.       ;; 高度,角度
  38.       (setq h (entity:getdxf ent 40))
  39.       (setq ang (entity:getdxf ent 50))
  40.       (entity:putdxf
  41.        (entity:make-text
  42.   (strcat (itoa (setq i (1+ i)))"#")
  43.   (polar pt-mid (+ (* 0.5 pi) ang) h)
  44.   (* 0.9 h)
  45.   ang 0.8 0 "MM")
  46.        62
  47.        1
  48.        ))
  49.      ;; 块引用
  50.      ((=  "INSERT" (entity:getdxf ent 0))
  51.       (setq pt-ins (entity:getdxf ent 10))
  52.       (setq ang-ins (entity:getdxf ent 50))
  53.       (setq scale-ins (entity:getdxf ent 41))
  54.       (setq subents (block:ent-list(setq blkname (entity:getdxf ent 2))))
  55.       (setq pt-base (entity:getdxf (tblobjname "block" blkname) 10))
  56.       (setq subents
  57.       (vl-remove-if-not
  58.        '(lambda(x)
  59.          (and (wcmatch (entity:getdxf x 0) "*TEXT")
  60.     (check-text x)))
  61.        subents)
  62.       )
  63.       (foreach
  64.        subent subents
  65.        ;; 取文字中点 坐标变换
  66.        ;;(print (entity:getbox subent 0))
  67.        (setq pt-mid(apply 'point:mid (entity:getbox subent 0)))
  68.        (setq pt-mid (block:bcs2wcs pt-mid pt-base pt-ins ang-ins scale-ins))
  69.        ;; 高度,角度
  70.        (setq h (entity:getdxf subent 40))
  71.        (setq ang (+ (entity:getdxf subent 50)
  72.         ang-ins
  73.         ))
  74.        (entity:putdxf
  75.   (entity:make-text
  76.    (strcat (itoa (setq i (1+ i)))"#")
  77.    (polar pt-mid (+ (* 0.5 pi) ang) h)
  78.    (* 0.9 h)
  79.    ang 0.8 0 "MM")
  80.   62
  81.   1
  82.   )))
  83.      
  84.       )))

回复

使用道具 举报

发表于 2023-8-4 13:44 | 显示全部楼层
快内文字,这么麻烦的替换,是不是绘图不规范啊。
回复

使用道具 举报

 楼主| 发表于 2023-8-4 14:42 | 显示全部楼层
liuhe 发表于 2023-8-4 13:44
快内文字,这么麻烦的替换,是不是绘图不规范啊。

是的,图纸很不规范,乱七八糟的,扒图和统计起来经常有漏的和错误的
回复

使用道具 举报

发表于 2023-8-4 15:27 | 显示全部楼层
有没有这种情况
M33MM55
如果有,算哪种?
回复

使用道具 举报

 楼主| 发表于 2023-8-4 15:30 | 显示全部楼层
vitalgg 发表于 2023-8-4 15:27
有没有这种情况
M33MM55
如果有,算哪种?

基本上 不会存在这种情况的,都是单独的 ,要不M33,要不MM55
回复

使用道具 举报

 楼主| 发表于 2023-8-4 19:36 | 显示全部楼层

老师,大概就是这种效果的,我是小白刚接触,不知道怎么使用这个代码,是复制下来做成LSP格式还是?启动命令是什么?我按照视频的命令 ERASE 是删除命令
回复

使用道具 举报

 楼主| 发表于 2024-4-4 23:36 | 显示全部楼层

老哥你好。这个能不能再帮忙更新一下,1、编号 和 查找的文字 用一个斜线连接或者 圈起来  2、编号和查找的文字 整体可以提取到EXCEL表格,例如提取出来为   1# FM甲1021    2#M2535    3#C5800
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 03:58 , Processed in 0.345374 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表