乐筑天下

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

[编程交流] 等距分割多段线

[复制链接]

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:45:47 | 显示全部楼层 |阅读模式
你好
 
我正在寻找一个lisp,该lisp将以给定的间隔(例如50m)沿多段线添加一个点,并且仅当两个相邻顶点之间的距离大于选定的线段间隔时,才在每个顶点处添加一个点。
 
非常感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:52:23 | 显示全部楼层
试试这个。。。
 
  1. (defun c:Test (/ _Pt ss in d)
  2. ;; Tharwat 11.11.2013 ;;
  3. (defun _Pt (pt) (entmakex (list '(0 . "POINT") (cons 10 pt))))
  4. (if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
  5.           (setq in (getdist "\n Specify the Interval :"))
  6.           (setq d in)
  7.      )
  8.    ((lambda (i / sn p)
  9.       (while (setq sn (ssname ss (setq i (1+ i))))
  10.         (while (setq p (vlax-curve-getpointatdist sn d)) (_Pt p) (setq d (+ d in)))
  11.         (mapcar '_Pt (mapcar 'cdr (vl-remove-if-not '(lambda (u) (eq (car u) 10)) (entget sn))))
  12.         (setq d in)
  13.       )
  14.     )
  15.      -1
  16.    )
  17. )
  18. (princ)
  19. )
  20. (vl-load-com)
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:56:50 | 显示全部楼层
谢谢你。
只有当两个顶点之间的距离大于选定的线段间隔时,才可能添加两个顶点之间的点吗?我的意思是,如果两个顶点相距20m,并且线段间隔为25m,那么这两个顶点之间应该没有点,无论从开始的分割落在哪里。
 
我希望避免两点(顶点和另一个顶点)太近。
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 00:05:28 | 显示全部楼层
正如我可以告诉你们的,你们想要根据每两个顶点来比较间隔长度,并在每个间隔处添加点,对吗?
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 00:06:08 | 显示全部楼层
是的,没错。
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 00:11:17 | 显示全部楼层
 
为了节省时间和一气呵成地完成日常工作,我希望您不介意上传一张示例图,用示例清楚地展示您的陈述
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 00:16:57 | 显示全部楼层
这是一个示例文件。
非常感谢。
绘画图纸
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:23:24 | 显示全部楼层
鲁荷,请看附件中的图纸。。。这个部门不是更好吗?
 
M、 R。
绘画图纸
回复

使用道具 举报

4

主题

20

帖子

16

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 00:26:33 | 显示全部楼层
的确,这太棒了!
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:31:09 | 显示全部楼层
这是我的版本:
 
  1. (defun c:divplsegs (/ ss mind i pl ep k j dk dj d n dd m p)
  2. (vl-load-com)
  3. (prompt "\nSelect 2d polylines...")
  4. (setq ss (ssget '((0 . "*POLYLINE") (-4 . "<not") (-4 . "&=") (70 .  (-4 . "not>"))))
  5. (initget 7)
  6. (setq mind (getdist "\nSpecify min. distance for segments division: "))
  7. (setq i -1)
  8. (while (setq pl (ssname ss (setq i (1+ i))))
  9.    (setq ep (vlax-curve-getendparam pl))
  10.    (setq k -1.0)
  11.    (while (< (setq k (1+ k)) ep)
  12.      (setq j (1+ k))
  13.      (setq dk (vlax-curve-getdistatparam pl k))
  14.      (setq dj (vlax-curve-getdistatparam pl j))
  15.      (setq d (- dj dk))
  16.      (setq n (fix (/ d mind)))
  17.      (if (> n 1)
  18.        (progn
  19.          (setq dd (/ d (float n)))
  20.          (setq m -1.0)
  21.          (repeat n
  22.            (setq p (vlax-curve-getpointatdist pl (+ dk (* dd (setq m (1+ m))))))
  23.            (entmake (list '(0 . "POINT") (cons 10 p)))
  24.          )
  25.        )
  26.        (progn
  27.          (setq p (vlax-curve-getpointatdist pl dk))
  28.          (entmake (list '(0 . "POINT") (cons 10 p)))
  29.        )
  30.      )
  31.    )
  32.    (entmake (list '(0 . "POINT") (cons 10 (vlax-curve-getendpoint pl))))
  33. )
  34. (princ)
  35. )

 
您好,M.R。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:22 , Processed in 0.599626 second(s), 72 queries .

© 2020-2025 乐筑天下

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