乐筑天下

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

[编程交流] 对矩形的天真怀疑

[复制链接]

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 06:49:45 | 显示全部楼层 |阅读模式
我用rec命令创建一个矩形,好的。这是一条多段线。
所以,我需要得到4个拐点。
我尝试这样做:
  1. (setq retangulo (entget(car(entsel))))

但我只能得到第一点,很难过:/
  1. (setq pt1 (cdr (assoc 10 retangulo)))

我怎样才能得到其他的分数?
  1. ((-1 . <Entity name: 7ef21ce0>) (0 . "LWPOLYLINE") (330 .
  2. <Entity name: 7ef0ac10>) (5 . "4B1BC") (100 . "AcDbEntity") (67 . 0) (410 .
  3. "Model") (8 . "layer") (100 . "AcDbPolyline") (90 . 4) (70 . 1)
  4. (43 . 0.0) (38 . 0.0) (39 . 0.0) (10 329020.0 7.3941e+006) (40 . 0.0) (41 .
  5. 0.0) (42 . 0.0) (91 . 0) (10 329098.0 7.3941e+006) (40 . 0.0) (41 . 0.0) (42 .
  6. 0.0) (91 . 0) (10 329098.0 7.39408e+006) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 .
  7. 0) (10 329020.0 7.39408e+006) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210
  8. 0.0 0.0 1.0))

我知道这是一份清单。
谢谢(:
 
-编辑:
也许使用Visual Lisp代码会更容易,但最好同时使用这两种代码来比较D:
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 06:55:31 | 显示全部楼层
试试这个未经测试的代码。
 
  1. (foreach pt retangulo
  2. (if (eq (car pt) 10)
  3. (setq lst (cons (cdr pt) lst))
  4. )
  5. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:02:24 | 显示全部楼层
  1. (vl-load-com)
  2. (defun c:GetCoordinates (/ ss)
  3. (if (setq ss (ssget ":S:E" '((0 . "*POLYLINE"))))
  4.    (princ (vlax-get (vlax-ename->vla-object (ssname ss 0))
  5.                     'coordinates
  6.           )
  7.    )
  8.    (prompt "\n** Nothing selected ** ")
  9. )
  10. (princ)
  11. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:06:41 | 显示全部楼层
或者这个。。。
 
  1. (vl-remove-if-not '(lambda (x) (eq (car x) 10)) retangulo)
回复

使用道具 举报

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 07:12:18 | 显示全部楼层
 
是 啊你成功了!
嗯,这么简单(:
我需要改进我的列表处理。
谢谢你,塔瓦
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:16:52 | 显示全部楼层
 
不客气。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:21:50 | 显示全部楼层
 
英雄所见略同,塔尔瓦。。。下面是一个快速测试:
 
  1. (setq rec (ssname (ssget ":S:E" '((0 . "*POLYLINE"))) 0))
  2. (setq oRec (vlax-ename->vla-object rec))
  3. (defun _foreach (/ lst)
  4. (foreach pt (entget rec)
  5.    (if (eq (car pt) 10)
  6.      (setq lst (cons (cdr pt) lst))
  7.    )
  8. )
  9. )
  10. (defun _lambda ()
  11. (vl-remove-if-not
  12.    (function (lambda (x) (= 10 (car x))))
  13.    (entget rec)
  14. )
  15. )
  16. (defun _vl ()
  17. (vlax-get oRec 'coordinates)
  18. )
  19. (bench '(_foreach _lambda _vl) '() 100000)

 
... 结果是:
 
  1. _$
  2. _FOREACH
  3. Elapsed: 5538
  4. Average: 0.0554
  5. _LAMBDA
  6. Elapsed: 4789
  7. Average: 0.0479
  8. _VL
  9. Elapsed: 2137
  10. Average: 0.0214
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:28:33 | 显示全部楼层
 
谢谢你,RM。
 
dxf 10仅适用于LWpolyline,如果用户选择3dpoly,结果将为零。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:33:45 | 显示全部楼层
 
... 因此(对我来说)更有理由坚持使用Visual LISP。
回复

使用道具 举报

9

主题

71

帖子

62

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 07:38:42 | 显示全部楼层
也谢谢你,黑匣子!
对不起,我刚刚看到所有帖子D:
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:12 , Processed in 0.615281 second(s), 72 queries .

© 2020-2025 乐筑天下

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