乐筑天下

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

[编程交流] 从两里中间画一条线

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:39:11 | 显示全部楼层
 
  1. (defun midp3 ( pt1 pt2 / )
  2.    (list
  3.        (/ (+ (car   pt1) (car   pt2)) 2.0)
  4.        (/ (+ (cadr  pt1) (cadr  pt2)) 2.0)
  5.        (/ (+ (caddr pt1) (caddr pt2)) 2.0)
  6.    )
  7. )
  1. Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s):
  2.    (MIDP3 P1 P2)......1045 / 10.21 <fastest>
  3.    (MIDP1 P1 P2)......1185 / 9
  4.    (MIDP2 P1 P2)......1248 / 8.55
  5.    (MIDPT P1 P2).....10670 / 1 <slowest>
  1. Benchmarking ..................Elapsed milliseconds / relative speed for 32768 iteration(s):
  2.    (MIDP3 P1 P2).....1029 / 1.2 <fastest>
  3.    (MIDP1 P1 P2).....1201 / 1.03
  4.    (MIDP2 P1 P2).....1232 / 1 <slowest>
回复

使用道具 举报

10

主题

31

帖子

21

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 08:45:30 | 显示全部楼层
这可能比目前建议的速度还要慢,但autoCAD(至少2010年)已经有一个名为“中点之间”(Mid Between 2 Points)(_m2p)的捕捉选项,可以在shift+右键单击菜单中选择(无论称为什么,呵呵)。我不知道它是否可以通过AutoLISP访问,或者它是否有助于清理代码/减少资源消耗,但呃,我想我还是把它扔出去以防万一吧,哈哈。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:45:59 | 显示全部楼层
@比尔·蒂尔曼:当然,你已经收到了一系列很好的解决方案。我将试着对你的第一种方法发表一些评论。
如果要使用OSNAP模式定位点,则应匹配提示器上的操作(即它提供选择点,而不是实体名称),或使用OSNAP AutoLISP函数。
  1. (command "_LINE" "_MID" pt1 "_MID" pt3 "")


  1. (command "_LINE" (osnap pt1 "_MID") (osnap pt3 "_MID") "")

但是,这不是推荐的解决方案,因为它可能会受到缩放级别、该区域中图形的拥挤程度和拾取框的大小以及实体是否在屏幕上可见的影响-存在选择其他项目或根本没有选择的风险。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:51:26 | 显示全部楼层
@昏迷:AutoCAD将M2P或MTP列为命令修改器;它也可以用于AutoLISP代码中。
  1. (command "_LINE" "_M2P" pt1 pt2 "_M2P" pt3 pt4 "")
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 08:54:01 | 显示全部楼层
太棒了但是2D点呢?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:57:54 | 显示全部楼层
 
诚然,所需的条件可能会抵消使用此方法比mapcar在性能上的任何增益。。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 09:02:27 | 显示全部楼层
还不错:
  1. (defun midp4 (pt1 pt2 / z1 z2)
  2. (append (list (/ (+ (car   pt1) (car   pt2)) 2.0)
  3.                (/ (+ (cadr  pt1) (cadr  pt2)) 2.0))
  4.          (if (and (setq z1 (caddr pt1)) (setq z2 (caddr pt2)))
  5.            (list (/ (+ z1 z2) 2.0)))))
  1. 15
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 09:06:13 | 显示全部楼层
实际上,godofcad的想法更快:
  1. 16
  1. 17
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 22:14 , Processed in 0.598136 second(s), 66 queries .

© 2020-2025 乐筑天下

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