乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: amir0914

[编程交流] 将多边形坐标转换为

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:02:27 | 显示全部楼层
LRM很酷,使用图形显示结果添加了make pline位,只需复制并粘贴到Autocad J1-J6即可
223035l0kk565e0bx8k68z.png
回复

使用道具 举报

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 22:07:32 | 显示全部楼层
太棒了,非常感谢。
宏解决了我的问题,但是如果将来的点数超过4点,宏会工作吗?(例如10分)。就像这样:
 
223037sc5iju6jqzbcqzp6.png
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:09:00 | 显示全部楼层
您应该张贴xls以备将来测试。
 
无论如何,只要你总是有一个凸的形状,这应该工作。它观察点的内角,所以不需要图形的etc,H模式将不起作用。
 
在excel单元格中使用F2=(连接(“点”,B2,“,”,C2),然后向下复制并粘贴,就像样本F2-F11一样,因为“关闭”是代码的一部分,所以不需要最后一个点。 
 
  1. ; pline around points
  2. ; By AlanH info@alanh.com.au
  3. : June 2020
  4. (vl-load-com)
  5. (defun c:plpoints ( / ss pt pts x ent lst)
  6. (setq ss (ssget (list (cons 0 "POINT"))))
  7. (setq pt (getpoint "pick center point"))
  8. (setq lst '())
  9. (repeat (setq x (sslength ss))
  10. (setq ent (ssname ss (setq x (- x 1))))
  11. (setq pts (cdr (assoc 10 (entget ent))))
  12. (setq lst (cons (list (angle pts pt) (list (car pts)(cadr pts))) lst))
  13. )
  14. (setq lst (vl-sort lst '(lambda (x y) (< (car x)(car y)))))
  15. (entmakex (append (list  (cons 0 "LWPOLYLINE")
  16.                          (cons 100 "AcDbEntity")
  17.                          (cons 100 "AcDbPolyline")
  18.                          (cons 90 (length lst))
  19.                          (cons 70 1))
  20.                    (mapcar (function (lambda (p) (cons 10 (nth 1 p)))) lst))
  21. )
  22. (princ)
  23. )
  24. (c:clpoints)
回复

使用道具 举报

lrm

1

主题

257

帖子

282

银币

限制会员

铜币
-13
发表于 2022-7-6 22:13:10 | 显示全部楼层
 
@amir0914不,我的程序只适用于4分。
 
@比加尔很漂亮!!!
 
如果OP处理的点都是凸包的一部分,则可以修改代码,将中心点定义为点集的质心,从而无需用户指定中心点。
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:16:27 | 显示全部楼层
想给最终用户留下一些东西来添加,我确实想过,但更多的代码。注意这个地方。
 
是的,代码更新了。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 22:20:08 | 显示全部楼层
 
LISP try LM:ConvexHull

卓越论坛https://lebim.cn/a/[/img]-VB网站,由www.andypope托管。信息已被报告为不安全! 
 
 
 
回复

使用道具 举报

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 22:21:04 | 显示全部楼层
 
这真是个好主意,我把它改了一点,用平均点来寻找中心点:(只在规则形状上)
  1.                                         ; pline around points
  2.                                         ; By AlanH info@alanh.com.au
  3. :
  4. June
  5. 2020
  6. (vl-load-com)
  7. (defun c:plpoints (/ ss pt pts x ent lst)
  8.   (setq ss (ssget (list (cons 0 "POINT"))))
  9.   (setq ptlist nil)
  10.   (repeat (setq x (sslength ss))
  11.     (setq ent (ssname ss (setq x (- x 1))))
  12.     (setq pts (cdr (assoc 10 (entget ent))))
  13.     (setq ptlist (cons pts ptlist))
  14.     (setq pt (average ptlist))
  15.   )
  16. ;;;  (setq pt (getpoint "pick center point"))
  17.   (setq lst '())
  18.   (foreach a ptlist
  19.     (setq
  20.       lst (cons (list (angle a pt) (list (car a) (cadr a))) lst)
  21.     )
  22.   )
  23.   (setq lst (vl-sort lst '(lambda (x y) (< (car x) (car y)))))
  24.   (entmakex
  25.     (append (list (cons 0 "LWPOLYLINE")
  26.                   (cons 100 "AcDbEntity")
  27.                   (cons 100 "AcDbPolyline")
  28.                   (cons 90 (length lst))
  29.                   (cons 70 1)
  30.             )
  31.             (mapcar (function (lambda (p) (cons 10 (nth 1 p)))) lst)
  32.     )
  33.   )
  34.   (princ)
  35. )
  36. (c:clpoints)
  37. (defun average (lst)
  38.   (mapcar '(lambda (x) (/ x (length lst)))
  39.           (apply 'mapcar (cons '+ lst))
  40.   )
  41. )
回复

使用道具 举报

56

主题

175

帖子

119

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
280
发表于 2022-7-6 22:26:51 | 显示全部楼层
 
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-6 22:30:16 | 显示全部楼层
 
作者已经发表了很好的评论,所以只需省略sub m_AddPaddingPoints
  1. (Public Function CalculateHull () As Boolean
  2. ;<snippet>  
  3. '
  4. ' Use the hull points as the set of value to check
  5. ' adding an extra set of points
  6. '
  7.              <s>  m_AddPaddingPoints</s>
  8.                 blnAnimate = m_blnAnimate  
  9. ;<snippet>     
  10.                

 
  1.  
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:30:53 | 显示全部楼层
我在我的帖子中更新了代码,但平均defun更好,因为points正在尝试使用mapcar等做同样的事情。将保存它以供将来参考。
 
如果使用appload、drag drop或menu load,则有一个输入错误(c:clpoints)应该是(c:plpoints)straighaway。
 
 
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 14:52 , Processed in 1.280079 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表