乐筑天下

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

[编程交流] LISP查找多个顶点的中点

[复制链接]

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:54:18 | 显示全部楼层 |阅读模式
您好,我正在尝试找到一个lisp,它将为我提供一组多段线的中心/中点。
我与船一起工作,经常需要找到船体中一组加强筋的总长度和重心(中点),目前我使用一个名为Tlen的LISP来给我提供加强筋的总长度,但必须估计或手动计算cog,我要找的是一个LISP,它将计算出许多多段线的组合中点。
我附上了一个我将使用的示例
谢谢,皮特
加强筋。图纸
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:59:44 | 显示全部楼层
也许这会帮助你:
 
  1. (defun c:MidPL( / PlinesSet thePline Dist1st Dist2nd PlineLen PointMid OldOsmode )
  2. (setq OldOsmode (getvar "OSMODE"))
  3. (setvar "OSMODE" 0)
  4. (prompt "\nSelect polylines to mark middle point:")
  5. (if (and (setq PlinesSet (ssget '((0 . "LWPOLYLINE"))))   ;select polylines
  6.          (> (sslength PlinesSet) 0))
  7. (while (> (sslength PlinesSet) 0)
  8.   (setq thePline (ssname PlinesSet 0))
  9.   (setq Dist1st  (vlax-curve-getDistAtPoint thePline (vlax-curve-getStartPoint thePline))
  10.         Dist2nd  (vlax-curve-getDistAtPoint thePline (vlax-curve-getEndPoint   thePline))
  11.         PlineLen (- Dist2nd Dist1st)
  12.         PointMid (vlax-curve-getPointAtDist thePline (+ Dist1st (* 0.5 PlineLen))))
  13.   (entmake (list (cons '0  "POINT")                       ;add point entity
  14.                  (cons '10 PointMid)))
  15.   (setq PlinesSet (ssdel thePline PlinesSet))             ;remove processed polyline
  16. )
  17. )
  18. (setvar "OSMODE" OldOsmode)
  19. (princ)
  20. )

 
当做
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:03:39 | 显示全部楼层
少一点跑腿。
 
  1. (defun c:TEst (/ ss)
  2. (vl-load-com)
  3. (if (setq ss (ssget '((0 . "ARC,LINE,*POLYLINE"))))
  4.    ((lambda (i)
  5.       (while (setq e (ssname ss (setq i (1+ i))))
  6.         (entmakex (list '(0 . "POINT")
  7.                         (cons 10
  8.                               (vlax-curve-GetPointAtDist
  9.                                 e
  10.                                 (/ (vlax-curve-GetDistAtParam e (vlax-curve-GetEndParam e)) 2.)
  11.                               )
  12.                         )
  13.                   )
  14.         )
  15.       )
  16.     )
  17.      -1
  18.    )
  19. )
  20. (princ)
  21. )
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:04:01 | 显示全部楼层
谢谢你的两个回复,他们会派上用场的,但我要找的是有点不同。我不知道我想要的是否可能,但我不明白为什么不能做到。有没有办法用一个数字得到这些点的平均距离,我假设如果我在加强筋的开始处设置一个新的USC,那么我应该能够得到这些线的平均中点的X坐标。
 
我已经附上了lisp,我用它来获得总长度,如果我能得到这样的东西,可以给我的平均x或x和y的位置为中点的所有线结合起来,这将是了不起的。
 
我还附上了一张基本图纸,显示了我需要找到的位置。
 
如果有更多帮助,我们将不胜感激
 
谢谢你,皮特。
特伦。lsp
中点。图纸
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:08:27 | 显示全部楼层
有人知道怎么做吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:12:48 | 显示全部楼层
试试这个:
 
  1. (defun c:AveMid ( / ss )
  2. ;; © Lee Mac  ~  24.05.10
  3. (vl-load-com)
  4. (if (setq ss (ssget '((0 . "ARC,*POLYLINE,LINE"))))
  5.    (
  6.      (lambda ( i / ent mLst l )
  7.        (while (setq ent (ssname ss (setq i (1+ i))))
  8.          (setq mLst
  9.            (cons
  10.              (vlax-curve-getPointatParam ent
  11.                (/ (+ (vlax-curve-getEndParam ent)
  12.                      (vlax-curve-getStartParam ent)) 2.)
  13.              )
  14.              mLst
  15.            )
  16.          )
  17.        )
  18.        (setq l (length mLst))
  19.        (
  20.          (lambda ( p )
  21.            (entmakex
  22.              (list
  23.                (cons 0 "POINT")
  24.                (cons 10 p)
  25.              )
  26.            )
  27.          )
  28.          (mapcar (function /)
  29.            (apply (function mapcar)
  30.              (cons
  31.                (function +) mLst
  32.              )
  33.            )
  34.            (list l l l)
  35.          )
  36.        )
  37.      )
  38.      -1
  39.    )
  40. )
  41. (princ)
  42. )
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:14:10 | 显示全部楼层
谢谢李的回复,
 
当我使用AveMid时,这就是我得到的
 
命令:avemid
选择对象:找到1个
选择对象:
; 错误:无函数定义:VLAX-CURVE-GETENDPARAM
 
有什么想法吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:17:24 | 显示全部楼层
这只是没有加载Visual LISP函数-代码已更新
 
如果您再次遇到这种情况,只需在代码顶部添加(vl load com)。
 
我们中的大多数人(vl load com)在一个ACADDOC中调用。lsp,所以我们没有注意到它是否丢失
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:21:37 | 显示全部楼层
非常感谢李,这正是我想要的。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:25:45 | 显示全部楼层
不客气,皮特
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 11:57 , Processed in 0.859602 second(s), 83 queries .

© 2020-2025 乐筑天下

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