明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2069|回复: 7

[求助]如何检测一个块内是否有指定的单行或多行文字?(已解决,谢谢大家!)

[复制链接]
发表于 2009-5-29 11:08:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-5-30 12:03:04 编辑

比如,我要判断“车轮”这个块内是否包含“四英寸”这个多行文字或单行文字,如何判断?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-5-29 20:21:00 | 显示全部楼层
思路:首先得到"车轮"块的vla对象,然后用其item(i)方法,得到块内的每一个对象,然后再依次判断这个对象组码0数据是否为text或mtext即可。
 楼主| 发表于 2009-5-29 20:27:00 | 显示全部楼层
ljttjl发表于2009-5-29 20:21:00思路:首先得到\"车轮\"块的vla对象,然后用其item(i)方法,得到块内的每一个对象,然后再依次判断这个对象组码0数据是否为text或mtext即可。

我刚学了下lisp,对于vlisp我还是一点不懂呀,可是我现在又急着编出这个程序,能不能帮忙举个例子呢、老师

发表于 2009-5-29 23:15:00 | 显示全部楼层
使用entnext可以获得块子图元,再判断就可以啦
发表于 2009-5-30 00:02:00 | 显示全部楼层

1:临时在任意点插入块,然后炸开。

2:(setq ss (ssget "p") RetVal (ssget "_p" '(( 1 . "*四英寸*"))))

     (command "_.erase" ss "")

3:测试RetVal

发表于 2009-5-30 10:24:00 | 显示全部楼层

(defun TEST (BLKNAME TXTSTR / BLKS)
  (setq BLKS   (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))
        TXTSTR (strcat "*" TXTSTR "*")
  )
  (vlax-for X (vla-item BLKS BLKNAME)
    (if (and (wcmatch (vla-get-objectname X) "AcDb*Text")
             (wcmatch (vla-get-TextString X) TXTSTR)
        )
      (progn
        (alert "此块中包含所要搜索的文本内容。")
        (exit)
      )
    )
  )
)

;;(TEST "车轮" "四英寸")

 楼主| 发表于 2009-5-30 11:06:00 | 显示全部楼层
本帖最后由 作者 于 2009-5-30 11:59:19 编辑

caoyin发表于2009-5-30 10:24:00(defun TEST (BLKNAME TXTSTR / BLKS)  (setq BLKS   (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))        TXTSTR

谢谢,这些函数(vla-get-objectname X)看不懂 ,但我想让它返回一个T或nil,而不是跳出一个提示窗,上面用了(exit)好像就无法返回一个值了,如何改呢?我这样改一下行不行呀:

(defun TEST (BLKNAME TXTSTR / BLKS tt tn)
  (setq BLKS   (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))
        TXTSTR (strcat "*" TXTSTR "*")
  )
  (vlax-for X (vla-item BLKS BLKNAME)
    (if (and (wcmatch (vla-get-objectname X) "AcDb*Text")
             (wcmatch (vla-get-TextString X) TXTSTR)
        )

      (setq tt T )
   (setq tn nil)
    )
  )
  (if (= tt T) tt tn)
)

发表于 2009-5-30 14:58:00 | 显示全部楼层
(defun TEST (BLKNAME TXTSTR / BLKS TAG)
  (setq BLKS   (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object)))
        TXTSTR (strcat "*" TXTSTR "*")
  )
  (vl-catch-all-apply
   '(lambda ()
  (vlax-for X (vla-item BLKS BLKNAME)
    (if (and (wcmatch (vla-get-objectname X) "AcDb*Text")
             (wcmatch (vla-get-TextString X) TXTSTR)
        )
      (progn
        (setq TAG T)
        (exit);;强制退出,可以减少不必要的运算
      )
    )
  )
  ))
  TAG
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-24 23:21 , Processed in 0.190644 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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