乐筑天下

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

[编程交流] [LISP]选择方向

[复制链接]

46

主题

92

帖子

45

银币

后起之秀

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

铜币
235
发表于 2022-7-5 20:02:23 | 显示全部楼层 |阅读模式
你好
我使用ENTSEL函数选择LWPOLYLINE。
使用代码。
  1. (setq cor (vlax-get (vlax-ename->vla-object (car (entsel))) 'coordinates))

总是得到。
  1. '(1x 1y 2x 2y 3x 3y ...)

如何获得坐标列表,这取决于您选择的是哪一侧的多段线?
例子:
选择1-2侧的段。
 
210224h5s7p9up9z692jz2.jpg
 
获取:
  1. '(1x 1y 2x 2y 3x 3y ...)

 
选择4-5侧的段。
 
210226c7mdvn788chv7t7v.jpg
 
获取:
  1. '(5x 5y 4x 4y 3x 3y ...)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:13:39 | 显示全部楼层
试试这个。
 
  1. (if (and (setq s (entsel "\n Pick a LWPOLYLINE :"))
  2.         (eq (cdr (assoc 0 (entget (car s)))) "LWPOLYLINE")
  3.         (mapcar '(lambda (p)
  4.                    (if (eq (car p) 10)
  5.                      (setq lst (cons (cdr p) lst))
  6.                    )
  7.                  )
  8.                 (entget (setq o (car s)))
  9.         )
  10.    )
  11. (if (< (distance (cadr s) (vlax-curve-getstartpoint o)) (distance (cadr s) (vlax-curve-getendpoint o)))
  12.    (setq lst (reverse lst))
  13. )
  14. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:22:30 | 显示全部楼层
 
像这样的多段线呢?
  1. (entmake
  2.   '(
  3.        (000 . "LWPOLYLINE")
  4.        (100 . "AcDbEntity")
  5.        (100 . "AcDbPolyline")
  6.        (90 . 5)
  7.        (70 . 0)
  8.        (10 0.0 0.0)
  9.        (10 1.0 0.0)
  10.        (10 1.0 1.0)
  11.        (10 -0.01 1.0)
  12.        (10 -0.01 -4.0)
  13.    )
  14. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:32:45 | 显示全部楼层
我会提出以下建议:
  1. (defun c:test ( / e l s x )
  2.    (if (and (setq s (entsel "\nSelect polyline: "))
  3.             (= "LWPOLYLINE" (cdr (assoc 0 (setq x (entget (setq e (car s)))))))
  4.             (setq l (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) x)))
  5.        )
  6.        (if (< (/ (vlax-curve-getdistatparam e (vlax-curve-getendparam e)) 2.0)
  7.               (vlax-curve-getdistatpoint e (vlax-curve-getclosestpointto e (trans (cadr s) 1 0)))
  8.            )
  9.            (reverse l) l
  10.        )
  11.    )
  12. )
  13. (vl-load-com) (princ)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 20:44:59 | 显示全部楼层
 
我打算使用vlax curve getdistatpoint函数,我不知道为什么我改变了主意,尽管我在之前的第一篇文章中的第一个代码应该按照OP的要求工作。
 
无论如何,这很容易处理,以涵盖其他形状的LWpolyline李的例子。
 
  1. (defun c:Test (/ s o lst)
  2. (if (and (setq s (entsel "\n Pick a LWPOLYLINE :"))
  3.         (eq (cdr (assoc 0 (entget (setq o (car s))))) "LWPOLYLINE")
  4.         (mapcar '(lambda (p)
  5.                    (if (eq (car p) 10)
  6.                      (setq lst (cons (cdr p) lst))
  7.                    )
  8.                  )
  9.                 (entget o)
  10.         )
  11.    )
  12. (if (> (vlax-curve-getdistatpoint o (vlax-curve-getclosestpointto o (cadr s)))
  13.         (vlax-curve-getdistatparam o (vlax-curve-getendparam o))
  14.      )
  15.    (setq lst (reverse lst))
  16. )
  17. )
  18. lst
  19. )(vl-load-com)
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 20:48:21 | 显示全部楼层
最近,我有完全相同的问题要解决。首先,我必须确定在哪里拾取多段线。
在这里看到李的代码后,我意识到我的代码在任何UCS/View上都不起作用。但是(trans p 1 0)也不能实现这一点。
这对任何情况都可能是一个有效的解决方案,但我让辩论开始,因为我不太确定。
  1. (vlax-curve-getclosestpointtoprojection e (trans p 1 0) (trans (getvar 'viewdir) 1 0 T))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:55:29 | 显示全部楼层
我使用的一个简单方法是总是说“拾取开始-结束”。这里的想法是,如果你要这样做,就要说偏移量,你知道哪个是左偏移量,哪个是右偏移量,即使根据你的图像拾取的是上下偏移量。我能看到的唯一问题是,对于闭合样条线,您可能需要一个“再次拾取”选项,例如一个圆表示起点。
回复

使用道具 举报

46

主题

92

帖子

45

银币

后起之秀

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

铜币
235
发表于 2022-7-5 21:07:08 | 显示全部楼层
感谢您的回复。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 00:43 , Processed in 0.928014 second(s), 71 queries .

© 2020-2025 乐筑天下

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