文字循环检查【已解决】
本帖最后由 tigcat 于 2020-12-4 17:03 编辑;|程序又是组装的,想实现相邻不远处文字比较,请大神写了个,代码我看不懂,本着学习的态度,自己写了(组装)了下面这个,现在问题是我想批量选取所有文字比较,但尴尬的是我只能选两个文字检查,多了程序就没反应。想实现的功能是,两个文字,距离在一定范围(比如1500,假设字高300的情况下),如果两个文字内容不同,做个标记,写个文字或者画个圆都行;如果一个文字周边指定范围无其他文字,也做个标记。肯定大侠看看哪出了问题,帮我优化完善下代码,先谢谢了|;
;里面部分代码是Z版删除重叠文字的,dxf子函数代码复制某位大侠的,其他自己乱拼凑写的
(defun C:f1 (/ dxf1 dxf10dxf101 dxf11 dxf40dxf401 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)
)
;请大侠帮忙看下程序到底哪出了问题。
是不是循环出问题了呢? 本帖最后由 tigcat 于 2021-8-3 14:34 编辑
(defun C:f1 (/ dxf1 dxf10dxf101 dxf11 dxf40dxf401 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
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 0
)
(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)
)
页:
[1]