明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: soly2006

检查折线间有无裂缝,请各高手提供个算法[已解决]

  [复制链接]
发表于 2012-5-4 14:33:40 | 显示全部楼层
如果线是多边形感觉还是用面域的 并 差 交 来得快
 楼主| 发表于 2012-5-4 18:11:27 | 显示全部楼层
高手们的代码有点看不懂,借助高手自已弄了一个,多指点谢谢。
  1. ;; | ---------------------------------------------------------------------------
  2. ;; | jn-cpts
  3. ;; | ---------------------------------------------------------------------------
  4. ;; | Function :  给定一个中心点和半径,等分数,返回圆上点列表
  5. ;; | Argument : (jn-cpts cpt r div-num)
  6. ;; | Returns  : 返回圆上点列表
  7. ;; | Updated  : 2011-12-4
  8. ;; | ---------------------------------------------------------------------------
  9. (defun jn-cpts(cpt r div-num / ptl parti-deg jd ) ;求圆上点传入中心点和半径
  10. (setq ptl NIL )
  11. (setq parti-deg (/ (* 2.0 PI) div-num))
  12. (setq jd parti-deg)
  13. (while (< jd (* 2 PI))
  14. (setq ptl (append (list (polar cpt jd r)) ptl))
  15. (setq jd (+ parti-deg jd))
  16. )
  17. (setq ptl ptl)
  18. )

  19. (defun mkcircle  (pt r) ;标记出错位置
  20.     (entmake (list '(0 . "circle")
  21.                    (cons 10 pt)
  22.                    (cons 40 r)
  23.                    (cons 62 1)
  24.                    (cons 8 "检查标记")))
  25. )

  26. ;;求多段线顶点----不知谁编的-------
  27. (defun GETPLVTX (E / ED )
  28. (defun DXF (NO)
  29. (cdr (assoc NO ED))
  30. )
  31. (defun GETLWPL (ED / PL)
  32. (while (setq ED (cdr (member (setq PL10 (assoc 10 ED))
  33.      ED
  34.     )   )  )
  35. (setq PL (cons (cdr PL10) PL))
  36. )
  37. (reverse PL)
  38. )
  39. (defun GETPL (ED / E PL P10)
  40. (setq E (DXF -1))
  41. (while (setq E (entnext E))
  42. (if (setq P10 (cdr (assoc 10 (entget E))))
  43.   (setq PL (cons P10 PL))
  44. ))
  45. (reverse PL)
  46. )
  47. (setq ED (entget E))
  48. (setq PLTYPE (DXF 0))
  49. (cond
  50. ((= "POLYLINE" PLTYPE)
  51. (GETPL ED))
  52. ((= "LWPOLYLINE" PLTYPE)
  53. (GETLWPL ED))))
  54. ;;---------------

  55. (defun c:tt2( / en s ptl ss i pt blc jx s2 s3 d1);主程序,求裂隙
  56. (SETVAR "CMDECHO" 0)
  57. (if (= (setq jx (getreal "请输入检查间隙阀值<0.2m>: ")) NIL)
  58.   (setq jx 0.2))
  59. (setq blc (/ (getvar "USERR1") 1000))
  60. (if (= blc 0.0) (setq blc 0.5) );cass图形比例尺
  61. (setq ss (ssget '((0 . "lwpolyline"))))

  62. (repeat (setq i (sslength ss))
  63. (setq s (cons (ssname ss (setq i (1- i))) s))  ;把图元名做成表
  64. )
  65. (foreach en s
  66. (setq ptl (GETPLVTX en))
  67. (foreach pt  ptl
  68.   (setq s2 (ssget "cp" (jn-cpts pt (* 2 jx) 100) '((0 . "lwpolyline"))))
  69.     (repeat (setq i (sslength s2))
  70.      (setq s3 (cons (ssname s2 (setq i (1- i))) s3)))  ;把图元名做成表
  71.   (setq s3 (vl-remove en s3))
  72.   (while s3
  73.   (princ s3)
  74.   (princ " -- ")
  75.   (setq d1 (distance (vlax-curve-getClosestPointTo (vlax-ename->vla-object (car s3)) pt) (list (car pt) (cadr pt))));只求平距
  76.   (if (and (< d1 jx) (> d1 0.0001))
  77.    (mkcircle pt (* 6 blc))
  78.   );endif
  79.   (setq s3 (cdr s3))
  80.   );endwhile
  81.   );endroeach
  82. )
  83. (SETVAR "CMDECHO" 1)
  84. (princ "jn 2012-5-4")
  85. )


点评

选择对象: jn 2012-5-4"jn 2012-5-4" 这个样子了用不了。。烦请高手更改  发表于 2012-6-8 15:52
支持!  发表于 2012-5-4 18:15

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 这个不能标注出来。。2006上试了~

查看全部评分

发表于 2012-5-5 08:59:25 | 显示全部楼层
看看 主要是为了学悍将
发表于 2012-5-11 13:16:34 | 显示全部楼层
发表于 2012-5-11 14:43:49 | 显示全部楼层


被院长吓到了。。偶只是想找那个命令~

本帖子中包含更多资源

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

x
发表于 2012-5-11 15:15:24 | 显示全部楼层
来学习学习啊,都是高手啊
发表于 2012-6-8 14:26:30 | 显示全部楼层
路过,留个记号
 楼主| 发表于 2012-6-8 23:23:42 | 显示全部楼层
本帖最后由 soly2006 于 2012-6-9 19:42 编辑
soly2006 发表于 2012-5-4 18:11
高手们的代码有点看不懂,借助高手自已弄了一个,多指点谢谢。

我的正常啊?哪里不对?应该比较理想了。

本帖子中包含更多资源

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

x
发表于 2012-6-8 23:54:52 来自手机 | 显示全部楼层
受g版程序启发,我自己也编了一个,在核对实宗虚宗面积的时候相当方便,感谢明经,感谢g版!
发表于 2014-1-22 14:03:10 | 显示全部楼层
顶出院长的程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-19 12:25 , Processed in 0.149615 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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