找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3788|回复: 50

[求助] 请高人帮我完善这个代码,谢谢!

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-3-10 21:19:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
想删除空白文字同零线,高版本自带清理功能 :(command "_.-purge" "_Z" "_.-purge" "_E")但是低版本中没有这个选项,现有一段代码,有高手能帮我完善吗?谢谢!
  1. (setq ss (ssadd)
  2.       e  (entnext)
  3. )
  4. (while (and e (wcmatch (cdr (assoc 0 (setq en (entget e)))) "LINE,LWPOLYLINE,*TEXT"))
  5.   (if (or (and (vlax-property-available-p (setq v (vlax-ename->vla-object e)) 'LENGTH)
  6.                (zerop (vla-get-length v))
  7.           )
  8.           (and (vlax-property-available-p v 'TEXTSTRING) (eq (vla-get-textstring v) ""))
  9.       )
  10.     (ssadd e ss)
  11.   )
  12.   (setq e (entnext e))
  13. )
  14. (sssetfirst nil ss)




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-3-10 23:10:56 | 显示全部楼层

论坛上很多,删超短线、删白点 ....
  1. (defun c:tt (/ i)
  2.   (fy:begin)
  3.   (setq i 0)
  4.   (if (ssget "X" '((0 . "*line,text")))
  5.     (mapcar
  6.       '(lambda (x / str)
  7.          (if (vlax-property-available-p x 'Textstring)
  8.            (and        (setq str (vlax-get x 'textstring))
  9.                 (or
  10.                   (= str "")
  11.                   (= (vl-string-trim " " str) "")
  12.                 )
  13.                 (setq i (1+ i))
  14.                 (vla-delete x)
  15.            )
  16.            (and
  17.              (equal
  18.                (vlax-curve-getdistatparam x (vlax-curve-getendparam x))
  19.                0.0
  20.                1e-3
  21.              )
  22.              (setq i (1+ i))
  23.              (vla-delete x)
  24.            )
  25.          )
  26.        )
  27.       (fy:cset->objs)
  28.     )
  29.   )
  30.   (if (not (zerop i))
  31.     (princ (strcat "\nTotle Erased " (itoa i) " Lines & text!"))
  32.   )
  33.   (fy:end)
  34.   (princ)
  35. )

点评

大师呀,非得上我用你的函数库呀,哈哈,其实我发的那个选择集只要修改下就行了,还是谢谢你了,更期待有人能帮我完善楼主的代码。  详情 回复 发表于 2014-3-10 23:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-3-10 23:17:34 | 显示全部楼层
本帖最后由 lucas3 于 2014-3-10 23:20 编辑
Free-Lancer 发表于 2014-3-10 23:10
论坛上很多,删超短线、删白点 ....

大师呀,非得上我用你的函数库呀,测试了一下,多行文字的空白文本无法删除,其实我发的那个选择集只要修改下就行了,还是谢谢你了,更期待有人能帮我完善楼主的代码。

点评

只要修改下 ssget 的过滤条件就支持 Mtext 既然不喜欢加载库文件,又不愿意去收集或者自己写那几个函数,独立的 vlx 可以直接使用  详情 回复 发表于 2014-3-11 07:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-3-11 07:36:24 | 显示全部楼层
lucas3 发表于 2014-3-10 23:17
大师呀,非得上我用你的函数库呀,测试了一下,多行文字的空白文本无法删除,其实我发的那个选择集只要修 ...

只要修改下 ssget 的过滤条件就支持 Mtext

既然不喜欢加载库文件,又不愿意去收集或者自己写那几个函数,独立的 vlx 可以直接使用

tt.rar

29.08 KB, 下载次数: 2, 下载积分: D豆 -1 , 活跃度 1

vlx

点评

请教Free-Lancer大侠,以下函数都是起什么作用的呀,不知道怎么找呀 [*]fy:cset->objs, [*]fy:startundo, [*]fy:unsetv, [*]fy:endundo.  详情 回复 发表于 2014-3-11 22:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-3-11 11:18:00 | 显示全部楼层
帮帮改下楼主的代码可以吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-3-11 13:52:05 来自手机 | 显示全部楼层
lucas3 发表于 2014-3-11 11:18
帮帮改下楼主的代码可以吗?

你知道代码哪里有问题吗?
对上面代码理解了多少?

点评

大师,看了一个关键字,应该是一个选择集,判断长度为0的线以及空白的文字,现在要做的就是删除这结选择集的内容,不知道这样说对不对  详情 回复 发表于 2014-3-11 14:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-3-11 14:03:30 | 显示全部楼层
st788796 发表于 2014-3-11 13:52
你知道代码哪里有问题吗?
对上面代码理解了多少?

大师,看了一个关键字,应该是一个选择集,判断长度为0的线以及空白的文字,现在要做的就是删除这结选择集的内容,不知道这样说对不对{:soso_e127:}


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-3-11 14:15:37 来自手机 | 显示全部楼层
lucas3 发表于 2014-3-11 14:03
大师,看了一个关键字,应该是一个选择集,判断长度为0的线以及空白的文字,现在要做的就是删除这结选择 ...

楼主这个帖子想用entnext遍历数据库,cad的实体不都在一条道上,有支路的,entnext进了支路就回不到大道的。
正解是遍历选集,如free-lancer方法

点评

但是楼主代码的作者说: iterating database is more direct that iterating each space alone .  详情 回复 发表于 2014-3-13 12:52
谢谢大师的解释!  详情 回复 发表于 2014-3-11 16:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-3-11 16:03:55 | 显示全部楼层
st788796 发表于 2014-3-11 14:15
楼主这个帖子想用entnext遍历数据库,cad的实体不都在一条道上,有支路的,entnext进了支路就回不到大道 ...

谢谢大师的解释!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-3-11 22:07:03 | 显示全部楼层
Free-Lancer 发表于 2014-3-11 07:36
只要修改下 ssget 的过滤条件就支持 Mtext

既然不喜欢加载库文件,又不愿意去收集或者自己写那几个函 ...

请教Free-Lancer大侠,以下函数都是起什么作用的呀,不知道怎么找呀
  • fy:cset->objs,
  • fy:startundo,
  • fy:unsetv,
  • fy:endundo.

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-3-11 22:36:37 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-3-11 22:38 编辑
lucas3 发表于 2014-3-11 22:07
请教Free-Lancer大侠,以下函数都是起什么作用的呀,不知道怎么找呀
  • fy:cset->objs,
  • fy:startund ...


  • 1 应该是把 ssget 获取的选择集转换为Object 列表
    2 command undo be 的vla版本,配套的是fy:endundo
    3 恢复保存的最初系统变量

    没有多高深,不愿用就自己写一遍

    点评

    谢谢大师,晓东有你更精彩!  详情 回复 发表于 2014-3-11 23:04
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    已领礼包: 3199个

    财富等级: 富可敌国

     楼主| 发表于 2014-3-11 23:04:24 | 显示全部楼层
    st788796 发表于 2014-3-11 22:36
    1 应该是把 ssget 获取的选择集转换为Object 列表
    2 command undo be 的vla版本,配套的是fy:endundo
    ...

    谢谢大师,晓东有你更精彩!
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    已领礼包: 1268个

    财富等级: 财源广进

    发表于 2014-3-12 07:42:03 | 显示全部楼层
    lucas3 发表于 2014-3-11 23:04
    谢谢大师,晓东有你更精彩!

    遍历Modelspace实体就用
    (vlax-for obj (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
       (setq typ (vla-get-objectname obj))
       (cond
         ((wcmatch typ "*Text")
           ....
         ((wcmatch (strcase typ) "*LINE,ARC,ELLIPSE")
         ....
         )
        (t)
       )
    )

    点评

    那Layouts中的对象呢?  详情 回复 发表于 2014-3-13 08:10
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    已领礼包: 10247个

    财富等级: 富甲天下

    发表于 2014-3-12 08:01:37 | 显示全部楼层
    本帖最后由 zxq0220 于 2014-3-13 08:10 编辑

    1. <P>(defun c:tt ()
    2. (setvar "CMDECHO" 0)
    3. (vl-load-com)
    4. (setq ss (ssget "X" '((0 . "LINE,LWPOLYLINE,*TEXT"))))
    5. (setq i -1)
    6. (repeat (sslength ss)
    7. (setq e (ssname ss (setq i (1+ i))))
    8.   (if (or (and (vlax-property-available-p (setq v (vlax-ename->vla-object e)) 'LENGTH)
    9.            (zerop (vla-get-length v))
    10.       )
    11.           (and
    12.            (vlax-property-available-p v 'TEXTSTRING)
    13.            (eq (vl-string-left-trim " " (vla-get-textstring v)) ""))
    14.         )
    15.   (entdel e)
    16.   )
    17. )
    18. (setvar "CMDECHO" 1)
    19. (princ)
    20. )</P>
    21. <P>
    22. </P>

    点评

    z版,好像不能清理空白文字  详情 回复 发表于 2014-3-12 18:48

    评分

    参与人数 1D豆 +5 收起 理由
    lucas3 + 5 很给力!经验;技术要点;资料分享奖!

    查看全部评分

    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    已领礼包: 1268个

    财富等级: 财源广进

    发表于 2014-3-12 09:06:57 来自手机 | 显示全部楼层
    zxq0220 发表于 2014-3-12 08:01

    再说几句,这里曲线类有vlax-curve类函数支持entity的,所以用ssname的话可以不用vlax-ename->vla-object转换,写程序时先评估是否用vla,找到契合点用最佳方法,就是避免这种来回转换方法
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

    GMT+8, 2024-9-25 00:28 , Processed in 0.487306 second(s), 61 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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