找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: eachy

[每日一码] API应用 亮显重叠文字

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-23 18:31:16 | 显示全部楼层

http://bbs.xdcad.net/thread-709318-1-1.html
试试这个。




                               
登录/注册后可看大图

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

使用道具 举报

已领礼包: 48个

财富等级: 招财进宝

发表于 2017-5-24 09:26:37 | 显示全部楼层
本帖最后由 pxt2015 于 2017-5-25 09:02 编辑

  1. ;;按照版主的思路,自己整理了一下,献丑了。程序虽然执行正常,但是处理文字数量多时速度比较慢。;; 如果处理1001个文字,计算次数 (1000+1)*1000/2,超过50万,所以速度慢,哪位高人能解决这个问题?

  2. (defun c:wzCD ()
  3.   (Command "undo" "be")
  4.   (xdrx_begin)  
  5.   (setq  lay   "C文字重叠框"
  6.            color 1
  7.   )
  8.   (if (null (Tblsearch "layer" lay))
  9.     (Command "layer" "m" lay "c" color lay "p" "n" lay "")
  10.     (Command "layer" "s" lay "p" "n" lay "")
  11.   )
  12.   ;;============================== begin while is
  13.   (setq is t)
  14.   (while is
  15.     (setq note (strcat "\n是否划线:"
  16.                        (if not_hx_wzcd
  17.                          "No"
  18.                          "Yes"
  19.                        )
  20.                        "\n选择文字,"
  21.                        "查字重叠[划线(H)/删除重叠框(E)] <退出>:"
  22.                )
  23.     )
  24.     ;;不能使用的关键字 A C F G L M P R U W
  25.     (xdrx_initget "H E")
  26.     (xdrx_initssget NOTE "H E" "" "" "")
  27.     (setq ss (xdrx_ssget '((0 . "text,mtext"))))
  28.     (COND
  29.       ((null ss) (SETQ is NIL))
  30.       ((= "H" SS) (setq not_hx_wzcd (not not_hx_wzcd)))
  31.       ((= "E" SS)
  32.        ;;(setq is nil)
  33.        (if (and  (setq ss (ssget "x" (list (cons 8 lay))))
  34.                   (princ "\n全图删除重叠框")
  35.            )
  36.          (PROGN      
  37.                (princ
  38.                   (strcat ",共删除了 " (ITOA (sslength ss)) " 个重叠框")
  39.                 )
  40.                 (repeat        (setq i% (sslength ss))
  41.                   (setq en (ssname ss (setq i% (1- i%))))
  42.                   (entdel en)
  43.                 )
  44.          )
  45.        )
  46.       )
  47.       (T
  48.        (setq is nil)
  49.        (progn
  50.          (setq
  51.            lst (mapcar '(lambda        (x)
  52.                           (list        (xdrx_getpropertyvalue x "textbox") ;_实际包围盒
  53.                                 x
  54.                           )
  55.                         )
  56.                        (xdrx_pickset->ents ss)
  57.                )
  58.          )
  59.          ;; lst= '(((p1 p2 p3 p4) en1) ((p1 p2 p3 p4) en2)...)
  60.          ;; L1= '((p1 p2 p3 p4) en1)
  61.          (setq length_jdt (length lst))
  62.          (xdrx_statusbar_begin "已经完成:" length_jdt) ;_进度条 1/3
  63.          (setq i 0)
  64.          (setq LL nil)
  65.          ;;========================================= begin while lst 1/2
  66.          (while        lst
  67.            ;; cdr 1/3
  68.            (setq L1   (car lst)
  69.                  lst1 (cdr lst)
  70.                  Y_N  T
  71.            )         
  72.            (setq g1 (xdrx_polyline_make (car L1) t))
  73.            ;;----------------------------------  begin while lst1 2/2           
  74.            (while lst1
  75.              (setq L2 (car lst1))
  76.              (setq g2 (xdrx_polyline_make (car L2) t))
  77.              (if (xdrx_entity_intersectWith g1 g2)
  78.                (progn
  79.                  (if Y_N
  80.                    (setq LL  (cons (cadr L1) LL)
  81.                          LL  (cons (cadr L2) LL)
  82.                          Y_N nil
  83.                    )
  84.                    (setq LL (cons (cadr L2) LL))
  85.                  )
  86.                  (if not_hx_wzcd
  87.                    (xdrx_entity_delete g2)
  88.                  )
  89.                )
  90.                (xdrx_entity_delete g2)
  91.              )
  92.              ;; cdr循环 2/3
  93.              (setq lst1 (cdr lst1))
  94.            )
  95.            ;;----------------------------------  end while lst1 2/2
  96.            ;; cdr循环 3/3
  97.            (setq lst (cdr lst))
  98.            (if (or Y_N not_hx_wzcd)
  99.              (xdrx_entity_delete g1)
  100.            )
  101.            (xdrx_statusbar_setpos (setq i (1+ i))) ;_进度条 2/3
  102.          )
  103.          ;;========================================= end while lst 1/2
  104.          (xdrx_statusbar_end) ;_进度条 3/3         
  105.          (if ss
  106.            (if LL
  107.              (progn
  108.                ;;(sssetfirst nil (xd::entity->pickset LL))
  109.                (xdrx_prompt
  110.                  "\n找到了"
  111.                  (length LL)
  112.                  "个重叠文字. "
  113.                  ;;"已经夹点显示."
  114.                )
  115.              )
  116.              (princ "\n没有找到重叠的文字!")
  117.            )
  118.          )
  119.        )
  120.       ) ;_T
  121.     ) ;_COND
  122.   )
  123.   ;;============================== end while is
  124.   (xdrx_end)
  125.   (Command "undo" "e")
  126.   (princ)
  127. )




评分

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

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-24 09:32:30 | 显示全部楼层

自己写的代码,单独去发个帖子吧

另外,XDRX API里面,进度条函数都有
xdrx_statusbar_begin
xdrx_statusbar_setpos
xdrx_statusbar_end

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

使用道具 举报

已领礼包: 48个

财富等级: 招财进宝

发表于 2017-5-24 09:44:59 | 显示全部楼层

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-5-24 09:53:50 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:56 , Processed in 0.167058 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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