明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2464|回复: 10

三角网边界,复制仓老师及73哥等大神函数,只能将就用

[复制链接]
发表于 2019-4-24 23:38:49 | 显示全部楼层 |阅读模式
仓老师有更完美的,用于南方CASS算土方时懒得画范围线用(自己觉得)


  1. ;;;;;;;;;;;;;;;;;;;;;;;;
  2. (defun zxd (pts / pts len pt )
  3. ;(setq pts (vxs ent))
  4.   (setq len (length pts))
  5. (setq pt (mapcar
  6.   '(lambda(x)
  7.     (/ x len)
  8.   )
  9.   (apply
  10.     'mapcar
  11.     (cons '+ pts)
  12.   )
  13.   )
  14.       )
  15.   pt
  16.   )




  17. (vl-load-com)

  18. (defun lwp ( lst / )
  19. (entmake (append    (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(8 . "SJWbj")'(100 . "AcDbPolyline") '(43 . 0.500)(cons 90 (length lst)))
  20.       (mapcar '(lambda (pt)(cons 10 pt)) lst ))
  21.   )

  22. )

  23. ;@[stoyer]起点或者方向不同的两个多边形,CAD不会认为它们相同,但是用数学上集合的概念来对待它们的顶点表就好了
  24. (defun remove(l e fun)(vl-remove'nil(mapcar'(lambda(x)(if(not(equal x e fun))x))l)))
  25. (defun lst-(l1 l2 fun)(foreach x l2(setq l1(remove l1 x fun)))l1)
  26. ;用lst-求两个多边形顶点坐标表的差集,如果为nil那么这两个多边形它们是相同的,不管它们起点以及方向是否相同
  27. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  28. ;货物分两组(样品 库存)
  29. (defun lst->2lst(lst / lst1 lst2)
  30.   (setq lst1 '() lst2 '())
  31. (foreach a lst
  32.     (if (or (member a lst2) (vl-some'(lambda(x)(not(lst- a x 0))) lst2))
  33.       (setq lst1 (cons a lst1))
  34.       (setq lst2 (cons a lst2))
  35.     )
  36.   )
  37. (cons (reverse lst2) (reverse lst1))
  38. )
  39. ;;;;;;;;;;;;;;;;;;;;;;;;==========================
  40. (setvar "cmdecho" 0)
  41.       (setq dxfz  (ssget '( (8 . "SJW") (0 . "POLYLINE"))))
  42.       (setq dxfc  (sslength dxfz) i3 0 bb nil)
  43.       (repeat dxfc
  44.        (setq dxf (ssname dxfz i3))
  45.        (setq pt0 (vlax-curve-getPointAtParam dxf 0) pt0 (list (car pt0) (cadr pt0)))
  46.              (setq pt1 (vlax-curve-getPointAtParam dxf 1) pt1 (list (car pt1) (cadr pt1)))
  47.        (setq pt2 (vlax-curve-getPointAtParam dxf 2) pt2 (list (car pt2) (cadr pt2)))
  48.              (setq bb (cons (list pt0 pt1) bb) bb (cons (list pt1 pt2) bb) bb (cons (list pt2 pt0) bb))
  49.        (setq i3 (+ 1 i3))
  50.       )
  51.   ;(setq bp0 bb bb1 nil bb2 nil);;(length bb)

  52. ;货物分两组(样品 库存)
  53. (defun lst->2lst(lst / lst1 lst2)
  54.   (setq lst1 '() lst2 '())
  55. (foreach a lst
  56.     (if (or (member a lst2) (vl-some'(lambda(x)(not(lst- a x 0))) lst2))
  57.       (setq lst1 (cons a lst1))
  58.       (setq lst2 (cons a lst2))
  59.     )
  60.   )
  61. (cons (reverse lst2) (reverse lst1))
  62. )


  63. (setq pzx (lst->2lst bb) )
  64. (setq bp nil)

  65. ;(mapcar '(lambda (x)(lwp x))   ) ;(car pzx)


  66.    (defun lst-a (l1 l2)
  67.   (vl-remove-if'(lambda(x)(member x l2))l1))

  68. ;(mapcar '(lambda (x)(lwp x))   (lst- (car pzx)  (cdr pzx) 0.1))

  69. (foreach n (car pzx)

  70. (foreach m (cdr pzx)

  71. (if (equal  (zxd n)  (zxd m) 0.1)  (setq bp0 (list n)) )
  72.   )
  73. ;(setq bp (vl-remove-if'(lambda(x)(equal (zxd x) (zxd n)  0.1 ))(car pzx)  )   )

  74. (setq bp (append bp bp0))
  75.   )



  76. (mapcar '(lambda (x)(lwp x))   (lst-a (car pzx) bp ))

 楼主| 发表于 2019-4-25 20:52:55 | 显示全部楼层
tu图片来了

本帖子中包含更多资源

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

x
 楼主| 发表于 2019-4-25 00:03:00 | 显示全部楼层
  1. (setq ssaa (ssget "x"'( (8 . "SJWbj") (0 . "lwPOLYLINE"))))
  2. (COMMAND "pedit" "m" ssaa "" "j" 0 "")
发表于 2019-4-25 15:31:10 | 显示全部楼层
群里还有个gif贴上就直观了.
发表于 2019-4-25 22:03:22 | 显示全部楼层
谢谢分享,学习学习
发表于 2019-5-26 21:41:36 | 显示全部楼层
我找这个找了好久了
发表于 2019-5-26 22:06:20 | 显示全部楼层
为啥我的生成的不是多段线呢  求老哥发个完整生成多段线的  小白不懂怎么改
发表于 2019-5-26 22:09:57 | 显示全部楼层
这样选择的边界也不行老哥  三角网如果有拐弯的话自动生成了三角网  面积就变大了
发表于 2019-5-26 22:15:05 | 显示全部楼层
不知道老哥能不能做过实测的坐标点生成最外围的多段线线呢  跟这个相似围起来就可以
发表于 2020-6-4 16:33:55 | 显示全部楼层
牛逼,我的大神,楼主出个工具箱呗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-23 03:53 , Processed in 0.195808 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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