明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1277|回复: 2

[提问] 文字循环检查【已解决】

[复制链接]
发表于 2020-12-4 00:58:22 | 显示全部楼层 |阅读模式
本帖最后由 tigcat 于 2020-12-4 17:03 编辑

;|程序又是组装的,想实现相邻不远处文字比较,请大神写了个,代码我看不懂,本着学习的态度,自己写了(组装)了下面这个,现在问题是我想批量选取所有文字比较,但尴尬的是我只能选两个文字检查,多了程序就没反应。想实现的功能是,两个文字,距离在一定范围(比如1500,假设字高300的情况下),如果两个文字内容不同,做个标记,写个文字或者画个圆都行;如果一个文字周边指定范围无其他文字,也做个标记。肯定大侠看看哪出了问题,帮我优化完善下代码,先谢谢了|;
;里面部分代码是Z版删除重叠文字的,dxf子函数代码复制某位大侠的,其他自己乱拼凑写的

(defun C:f1 (/            dxf1   dxf10  dxf101 dxf11        dxf40  dxf401 en
             en_data           en1          k         m        n      ss     dis
             pta    ptb           ss1          n2         i
            )
  (vl-load-com)
  (defun dxf (key ename) (cdr (assoc key (entget ename))))
  (setq ss (ssget '((0 . "*TEXT"))))
  (setq        i    -1
       i2   0;i2不应放在此处
        dist 2500
;;;        t0   (* 86400 (getvar "tdusrtimer"))
  )
;;;   (or (setq dist (getreal "\输入文字高度: <1500>")) (setq dist 1500))
  (setq lis (ssadd))
  (while (setq en (ssname ss (setq i (1+ i))))
    (setq dxf10 (dxf 10 en))
    (setq dxf1 (dxf 1 en)
          pta  (list (- (car dxf10) dist) (- (cadr dxf10) dist))
          ptb  (list (+ (car dxf10) dist) (+ (cadr dxf10) dist))
          ss1  (ssget "c" pta ptb)
          ss1  (ssget "P" '((0 . "*TEXT")))
          n2   (sslength ss1)应在此处放置i2变量
    )
    (if        (> n2 1)
      (progn
        (setq ss1 (ssdel en ss1))
        (setq n2 (1- (sslength ss1)))
        (while (<= i2 n2)
          (setq en2 (ssname ss1 i2))
          (setq dxf2 (dxf 1 en2))
          (setq i2 (1+ i2))
          (if (/= dxf2 dxf1)
            (progn
              (command "circle" (dxf 10 en2) "1000")
              (command "circle" (dxf 10 en) "1000")
            )
;;;            (command "circle" (dxf 10 en) "1000")
          )
        )
      )
      (command "circle" (dxf 10 en) "1000")
    )
;;;    (setq ss (ssdel en ss))
;;;    (setq s (1+ s))
  )
;;;  (setq t1 (* 86400 (getvar "tdusrtimer")))
;;;  (princ (strcat "耗时:"
;;;                 (rtos (- t1 t0) 2 3)
;;;         )
;;;  )
  (princ)
)
;请大侠帮忙看下程序到底哪出了问题。



本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2020-12-4 09:06:59 来自手机 | 显示全部楼层
是不是循环出问题了呢?
 楼主| 发表于 2021-8-3 14:32:56 | 显示全部楼层
本帖最后由 tigcat 于 2021-8-3 14:34 编辑

  1. (defun C:f1 (/            dxf1   dxf10  dxf101 dxf11        dxf40  dxf401 en
  2.              en_data           en1          k         m        n      ss     dis
  3.              pta    ptb           ss1          n2         i
  4.             )
  5.   (vl-load-com)
  6.   (defun dxf (key ename) (cdr (assoc key (entget ename))))
  7.   (setq ss (ssget '((0 . "*TEXT"))))
  8.   (setq        i    -1
  9.              dist 2500
  10. ;;;        t0   (* 86400 (getvar "tdusrtimer"))
  11.   )
  12. ;;;   (or (setq dist (getreal "\输入文字高度: <1500>")) (setq dist 1500))
  13.   (setq lis (ssadd))
  14.   (while (setq en (ssname ss (setq i (1+ i))))
  15.     (setq dxf10 (dxf 10 en))
  16.     (setq dxf1 (dxf 1 en)
  17.           pta  (list (- (car dxf10) dist) (- (cadr dxf10) dist))
  18.           ptb  (list (+ (car dxf10) dist) (+ (cadr dxf10) dist))
  19.           ss1  (ssget "c" pta ptb)
  20.           ss1  (ssget "P" '((0 . "*TEXT")))
  21.           n2   (sslength ss1)
  22.           i2 0
  23.     )
  24.     (if        (> n2 1)
  25.       (progn
  26.         (setq ss1 (ssdel en ss1))
  27.         (setq n2 (1- (sslength ss1)))
  28.         (while (<= i2 n2)
  29.           (setq en2 (ssname ss1 i2))
  30.           (setq dxf2 (dxf 1 en2))
  31.           (setq i2 (1+ i2))
  32.           (if (/= dxf2 dxf1)
  33.             (progn
  34.               (command "circle" (dxf 10 en2) "1000")
  35.               (command "circle" (dxf 10 en) "1000")
  36.             )
  37. ;;;            (command "circle" (dxf 10 en) "1000")
  38.           )
  39.         )
  40.       )
  41.       (command "circle" (dxf 10 en) "1000")
  42.     )
  43. ;;;    (setq ss (ssdel en ss))
  44. ;;;    (setq s (1+ s))
  45.   )
  46. ;;;  (setq t1 (* 86400 (getvar "tdusrtimer")))
  47. ;;;  (princ (strcat "耗时:"
  48. ;;;                 (rtos (- t1 t0) 2 3)
  49. ;;;         )
  50. ;;;  )
  51.   (princ)
  52. )

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

本版积分规则

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

GMT+8, 2025-5-16 16:53 , Processed in 0.175315 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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