乐筑天下

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

[编程交流] 矩形中的点

[复制链接]

26

主题

81

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 15:08:16 | 显示全部楼层 |阅读模式
在LISP中,我可以选择一个矩形并自动为我定位4个角点吗?
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:17:16 | 显示全部楼层
http://www.cadtutor.net/forum/showthread.php?35846-多段线点lisp例程
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:23:15 | 显示全部楼层
这可能有点简单,由您决定如何处理点列表,因为它很简单,不会检查您选择了什么。pline中的顶点数量相同。
 
  1. (setq obj2 (vlax-ename->vla-object (car(entsel))))
  2. (setq co-ords (vlax-safearray->list (vlax-variant-value (vlax-get-property obj2 "Coordinates" ))))
  3. (setq I 0)
  4. (repeat (/(length co-ords) 2)
  5. (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) ))
  6. (setq co-ordsxy (cons xy co-ordsxy))
  7. (setq I (+ I 2))
  8. )
  9. (princ co-ordsxy)
回复

使用道具 举报

26

主题

81

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 15:27:24 | 显示全部楼层
谢谢Bigal
 
我运行了那个代码,它给出了4个点的坐标。
要使用这4个点的位置,我需要每个角的名称吗?
例如,P1 P2 P3 P4的一条线
 
问候Tony
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 15:35:12 | 显示全部楼层
 
你好
 
使用以下简单代码,将第四个坐标分配给变量名“l”,每个坐标分配给变量,从p1、p2、p3和p4开始
  1. (and (setq s (car (entsel "\nSelect Polyline with four coordinates :")))
  2.     (or (= (cdr (assoc 0 (setq e (entget s)))) "LWPOLYLINE")
  3.         (alert "Invliad object. Try again")
  4.     )
  5.     (or (= (cdr (assoc 90 (setq e (entget s)))) 4)
  6.         (alert "Invliad number of coordinates")
  7.     )
  8.     (mapcar '(lambda (p) (and (= (car p) 10) (setq l (cons (cdr p) l)))) e)
  9.     (mapcar 'set '(p1 p2 p3 p4) l)
  10. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:38:35 | 显示全部楼层
很好的一个Tharwat。
 
Tunzagibbo由于点位于列表中,您也可以通过使用此方法检索每个垂直点来获得每个角点。
 
  1. ; the list of points starts with item zero not 1
  2. ; want 3rd point
  3. (setq pt3 (nth 2 co-ordsxy))
  4. ; want 4th point
  5. (setq pt4 (nth 3 co-ordsxy))
回复

使用道具 举报

26

主题

81

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 15:41:59 | 显示全部楼层
谢谢Bigal
 
如果你不介意的话,还有一个问题。
我有一个矩形,我用“setq”将其命名为INNERSHAPE
然后我想用你的代码找到INNERSHAPE的4个角,而不必在屏幕上再次选择该形状
该形状的质心是否也可以在相同的操作中定位?
 
问候Tony
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 15:46:44 | 显示全部楼层
 
谢谢你,比格尔。
回复

使用道具 举报

26

主题

81

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 15:54:54 | 显示全部楼层
嗨Bigal
我认为这应该行得通,但似乎没有得到4分(最后4行)
 
  1. (defun InnerShape (/ InnerShape co-ords I xy co-ordsxy Innerpt1 Innerpt2 Innerpt3 Innerpt4)
  2.    (setq InnerShape (vlax-ename->vla-object (entlast))) ;my name choice "InnerShape"
  3.    (setq co-ords (vlax-safearray->list (vlax-variant-value
  4.    (vlax-get-property InnerShape "Coordinates" )))) ;my name choice "InnerShape"
  5.    (setq I 0)
  6. (repeat (/(length co-ords) 2)
  7.    (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) ))
  8.    (setq co-ordsxy (cons xy co-ordsxy))
  9.    (setq I (+ I 2)))
  10. (princ co-ordsxy)
  11. (setq Innerpt1 (nth 0 co-ordsxy) :always start with 0 NOT 1
  12.        Innerpt2 (nth 1 co-ordsxy)
  13.        Innerpt3 (nth 2 co-ordsxy)
  14.        Innerpt4 (nth 3 co-ordsxy))
  15. )
回复

使用道具 举报

0

主题

946

帖子

978

银币

限制会员

铜币
-3
发表于 2022-7-5 16:00:43 | 显示全部楼层
见上文。如果您希望坐标按创建顺序(线是如何绘制的),您需要
  1. (setq co-ordsxy (reverse co-ordsxy))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:04 , Processed in 0.969183 second(s), 72 queries .

© 2020-2025 乐筑天下

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