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

看看 主要是为了学悍将
页: 1 [2] 3
查看完整版本: 检查折线间有无裂缝,请各高手提供个算法[已解决]