hejiazhao
发表于 2012-5-2 16:49:39
G版说的好像是这个意思,能不能麻烦你说一下算法的思路
梦醒才知原是梦
发表于 2012-5-2 17:02:19
Gu_xl 发表于 2012-5-2 15:31 static/image/common/back.gif
请问G,这个检查的物体是需要块还是。。。。我自己弄一个图为什么没法选定对象
soly2006
发表于 2012-5-2 17:04:05
哈哈,谢谢GU版,就是这个效果。
自己水平太次了,我搞了几天的烂尾楼可以推倒了。
soly2006
发表于 2012-5-3 17:23:22
本帖最后由 soly2006 于 2012-5-3 17:30 编辑
Gu_xl 发表于 2012-5-2 15:31 static/image/common/back.gif
http://bbs.mjtd.com/data/attachment/album/201205/03/172136i44yyp0ox64o2tyx.jpg.thumb.jpgGU版请看一下,这种情况下不能处理,就是少结点的情况下,可能会出现。是否可以以结点为中心,对一定范围的线进行点对线距离求算,然后标出有小距离的位置,只是标有重复情况。
Gu_xl
发表于 2012-5-3 18:36:28
soly2006 发表于 2012-5-3 17:23
GU版请看一下,这种情况下不能处理,就是少结点的情况下,可能会出现。是否可以以结点为中心,对一定范围 ...
这也是比较不错的思路!
xyp1964
发表于 2012-5-3 19:10:16
边界检查:
soly2006
发表于 2012-5-4 11:17:20
xyp1964 发表于 2012-5-3 19:10 static/image/common/back.gif
边界检查:
院长把交叉、裂缝、冗余点检查集成,超强!
Gu_xl
发表于 2012-5-4 13:40:33
本帖最后由 Gu_xl 于 2012-5-11 16:02 编辑
soly2006 发表于 2012-5-4 11:17 http://bbs.mjtd.com/static/image/common/back.gif
院长把交叉、裂缝、冗余点检查集成,超强!
命令:zxjxjc
;;仅供思路参考
(defun c:ZXJXJC(/ MKCIRCLE GETBOX N NN PICKBOX SS
BOXSIZE S I L PL OLDPT PTBOX
PLS PLSS FLAG
) ;_ /
(defun mkcircle(pt r)
(entmake (list '(0 . "circle")
(cons 10 pt)
(cons 40 r)
(cons 62 1)
(cons 8 "检查标记")))
)
(defun getbox (pt size)
(list (polar pt (* pi 1.25) (sqrt (* 0.5 size size)))
(polar pt (* pi 0.25) (sqrt (* 0.5 size size)))
)
)
(setierr)
(setq n 0 nn 0 pickbox (getvar 'pickbox))
(setvar 'pickbox 5)
(while (progn
(princ "\n选择要检查的物体:")
(setq ss (ssget '((0 . "lwpolyline"))))
)
(gxl-SYS-STORESVIEWSIZE)
(gxl-SYS-ZOOM_WINDOW (gxl-GETSSBOX ss))
(setq boxsize (gxl-SYS-GETPICKBOX))
(setq s nil n 0)
(repeat (setq i (sslength ss))
(setq s (cons (ssname ss (setq i (1- i))) s))
)
(foreach en s
(setq l (vl-remove en s))
(setq pl (mapcar 'cdr
(vl-remove-if-not
'(lambda (x) (= 10 (car x)))
(entget en)))
oldpt nil)
(foreach ptpl
(if (equal pt oldpt 1e-6)
(progn
(mkcircle pt (* boxsize 2))
(setq n (1+ n))
)
)
(setq oldpt pt)
(setq ptbox (getbox pt boxsize))
(setq pls (ssget "c" (car ptbox) (cadr ptbox) '((0 . "lwpolyline"))))
(if pls
(progn
(setq plss nil)
(repeat (setq i (sslength pls))
(setq plss (cons (ssname pls (setq i (1- i))) plss))
) ;_ repeat
(setq Flag
(vl-some
'(lambda (x)
(not
(equal (vlax-curve-getclosestpointto en pt)
(vlax-curve-getclosestpointto x pt)
1e-6
) ;_ equal
)
) ;_ lambda
plss
) ;_ vl-some
) ;_ setq
(if Flag
(progn
(mkcircle pt (* boxsize 2))
(setq n (1+ n))
) ;_ progn
) ;_ if
) ;_ progn
) ;_ if
)
)
(gxl-SYS-RESTORESVIEWSIZE)
(princ (strcat "\n发现 " (itoa n) "处问题:"))
(setq nn (+ n nn))
)
(princ (strcat "\n总共发现 " (itoa nn) "处问题:"))
(setvar 'pickbox pickbox)
(reerr)
(princ)
)
(princ "\n折线间隙检查 By 明经通道 Gu_xl 命令:ZXJXJC")
梦醒才知原是梦
发表于 2012-5-4 14:02:14
请问楼主,这个检查的对象必须两个块嘛。。还是一般的线就行了?
jxjaxa
发表于 2012-5-4 14:30:37
看看 主要是为了学悍将