明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 47967|回复: 143

[源码] 已解决:查找文字后,定位并统计数量

  [复制链接]
发表于 2011-1-27 13:09:55 | 显示全部楼层 |阅读模式
本帖最后由 xd-xdcad 于 2011-1-29 22:26 编辑

图形中有许多单行文本,具体内容类似:AA1-11m、AA2-34m、AA34-6m、AA3、AA55等等,要求查找某一文字,并用圆圈将选择的文字圈住,同时统计出文字数量,例如以查找AA34为例,执行命令后,效果如下
1、在命令行内输入或鼠标选择已有的AA34,
2、将选中的AA34画圈做个标记(方便醒目地直观看到)
3、同时得到结果,例如命令行内显示:找到AA34,共**个
4、查找的结果包括单纯的AA34,或者文字中含有AA34的其他内容,如AA34-3,准AA34-6m等
谢谢

点评

想法不错  发表于 2015-7-23 12:21
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-5-14 21:29:34 | 显示全部楼层
429014673 发表于 2012-5-14 19:54
严哥,这个很厉害,可以帮忙搞一个可以亮显的,没有画圆的吗?...我想找出相同的编号进行下一步操作....例如改 ...
  1. ;;;简易查找文本并亮显 by yjr111 2012-5-14
  2. (defun c:ttz (/ stxt s1 ent ss )
  3. (setq stxt (getstring "\n输入要查找的文本<右键选取>或设置(S):"))
  4. (cond ((or(= stxt "S")(= stxt "s"))
  5.         (initget"All Same")
  6.         (setq key (getkword "\n相似全选(All)或完全匹配(Same)"))
  7.         (if (not key)
  8.          (setq key "Same")
  9.         )
  10.         (setq stxt (getstring "\n输入要查找的文本<右键选取>或设置(S):"))
  11.        )
  12.   )
  13.   (cond((and (= stxt "")
  14.              (setq s1 (entsel "\n选择标记 :"))
  15.              (setq ent (entget (car s1)))
  16.              (= (cdr (assoc 0 ent)) "TEXT")
  17.         )
  18.         (redraw (car s1) 3)
  19.         (setq stxt (cdr (assoc 1 (entget (car s1)))))
  20.        )
  21. )
  22. (princ"\n选择文本的查找范围")
  23. (if (= key "Same")
  24.   (setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat stxt)))))
  25.   (setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat "*" stxt "*")))))
  26. )
  27. (if (and ss (> (sslength ss) 0))
  28.   (progn (princ (list "\n总共找到" (sslength ss) "处"))
  29.          (sssetfirst ss ss)
  30.   )
  31. )
  32. (princ)
  33. )

评分

参与人数 1明经币 +1 收起 理由
429014673 + 1 很给力!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2011-7-30 13:29:01 | 显示全部楼层
可以的,请使用下面的代码即可。
;选中文字做圆圈标记并显示数量 明经 ZZXXQQ 2011.1.27
;yjr学习并修改 2011.7.29
(DEFUN *ERROR* (msg)
  (COMMAND) (COMMAND)
  (PRINC (STRCAT "\n 警告! " "程序已经退出!"))
  (PRINC)
)
(defun c:ttz ()
(setvar "cmdecho" 0)
(setq stxt (getstring "\n输入标记<屏选> :"))
(if (and (= stxt "")
          (setq s1 (entsel "\n选择标记 :"))
          (setq ent (entget(car s1)))
          (= (cdr(assoc 0 ent)) "TEXT"))
  (setq stxt (cdr(assoc 1 (entget(car s1)))))
)
  
  (setq ybl (getreal"\n 请输入圆的大小:<右键默认1000>"))
    (if (not ybl )(setq ybl 1000))
    (command "layer" "make" "circle" "c" 1 "circle" "")
  
(if (setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat "*" stxt "*"))))) (progn
        
  (setq i 0)
  (repeat (sslength ss)
   (setq en (ssname ss i))
   (vla-getboundingbox(vlax-ename->vla-object en) 'minp 'maxp)
   (setq minp (vlax-safearray->list minp)
         maxp (vlax-safearray->list maxp))
   (setq pt (polar minp (angle minp maxp) (/ (distance minp maxp) 2)))
   
    (command ".CIRCLE" pt ybl)
    (setq i(1+ i))
   )
   (princ "\n")
  (princ (list "总共找到" (sslength ss)"处"))
))
  (princ "\n")
(initget 1  " Yes NO")
   (setq yorn(getkword "要删除圆吗?<Yes or No>:"))
  (if (= yorn "Yes")
    (progn
    (setq sss (ssget "x" '((0 . "circle")(8 . "circle"))))
    (command "erase" sss "")
    )
    (if (= yorn "No")(command ""))
    )
  (setvar "CMDECHO" 1)
(princ)
)

点评

非常好 实用 赞  发表于 2017-3-22 20:51
非常实用,赞  发表于 2015-1-13 10:12
非常使用,咱  发表于 2015-1-13 10:00
回复 支持 1 反对 0

使用道具 举报

发表于 2011-1-27 22:39:05 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2011-1-28 22:35 编辑

游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

评分

参与人数 1金钱 +50 收起 理由
xd-xdcad + 50 费心了,谢谢

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2011-1-28 08:36:24 | 显示全部楼层
非常感谢,我的是2002版本,暂时没有提示成功
TT命令改为TTA了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-1-28 09:01:51 | 显示全部楼层
是否漏了这个
(vl-load-com)
 楼主| 发表于 2011-1-28 11:11:03 | 显示全部楼层
Andyhon 发表于 2011-1-28 09:01
是否漏了这个
(vl-load-com)

经过试验,不是这个原因
发表于 2011-1-28 11:14:48 | 显示全部楼层
建议您上传调试用的文件(*.Dwg)
 楼主| 发表于 2011-1-28 13:49:53 | 显示全部楼层
Andyhon 发表于 2011-1-28 11:14
建议您上传调试用的文件(*.Dwg)

例如查找AA50,自动找到AA50.AA50-AA40.AA50,15M等,并在每个文字上画个圆圈或其他醒目的标记,方便命令执行后,在图形上直接看到查找到的文字

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-1-28 14:44:29 | 显示全部楼层
(setq pt (polar minp (angle minp maxp) (/ (length minp maxp) 2)))
(command ".CIRCLE" pt 50)
Try ==>
(setq pt (polar minp (angle minp maxp) (/ (Distance minp maxp) 2)))
(command ".CIRCLE" pt 10)

评分

参与人数 1金钱 +50 收起 理由
xd-xdcad + 50 谢谢,已经达到要求,就是“屏选”选项好像.

查看全部评分

发表于 2011-1-28 17:14:38 | 显示全部楼层
本帖最后由 crazylsp 于 2011-1-28 17:15 编辑

谢谢。这个思路很好,加上版主和大侠帮忙,  终于做成了
发表于 2011-2-4 21:11:16 | 显示全部楼层
不错。这很实用,弥补了CAD菜单里的查找功能不足的地方。版主很给力呀!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 14:44 , Processed in 0.217950 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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