fabriciorby 发表于 2022-7-6 06:49:45

对矩形的天真怀疑

我用rec命令创建一个矩形,好的。这是一条多段线。
所以,我需要得到4个拐点。
我尝试这样做:
(setq retangulo (entget(car(entsel))))
但我只能得到第一点,很难过:/
(setq pt1 (cdr (assoc 10 retangulo)))
我怎样才能得到其他的分数?
((-1 . <Entity name: 7ef21ce0>) (0 . "LWPOLYLINE") (330 .
<Entity name: 7ef0ac10>) (5 . "4B1BC") (100 . "AcDbEntity") (67 . 0) (410 .
"Model") (8 . "layer") (100 . "AcDbPolyline") (90 . 4) (70 . 1)
(43 . 0.0) (38 . 0.0) (39 . 0.0) (10 329020.0 7.3941e+006) (40 . 0.0) (41 .
0.0) (42 . 0.0) (91 . 0) (10 329098.0 7.3941e+006) (40 . 0.0) (41 . 0.0) (42 .
0.0) (91 . 0) (10 329098.0 7.39408e+006) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 .
0) (10 329020.0 7.39408e+006) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210
0.0 0.0 1.0))
我知道这是一份清单。
谢谢(:
 
-编辑:
也许使用Visual Lisp代码会更容易,但最好同时使用这两种代码来比较D:

Tharwat 发表于 2022-7-6 06:55:31

试试这个未经测试的代码。
 

(foreach pt retangulo
(if (eq (car pt) 10)
(setq lst (cons (cdr pt) lst))
)
)

BlackBox 发表于 2022-7-6 07:02:24


(vl-load-com)

(defun c:GetCoordinates (/ ss)
(if (setq ss (ssget ":S:E" '((0 . "*POLYLINE"))))
   (princ (vlax-get (vlax-ename->vla-object (ssname ss 0))
                  'coordinates
          )
   )
   (prompt "\n** Nothing selected ** ")
)
(princ)
)

Tharwat 发表于 2022-7-6 07:06:41

或者这个。。。
 

(vl-remove-if-not '(lambda (x) (eq (car x) 10)) retangulo)

fabriciorby 发表于 2022-7-6 07:12:18

 
是 啊你成功了!
嗯,这么简单(:
我需要改进我的列表处理。
谢谢你,塔瓦

Tharwat 发表于 2022-7-6 07:16:52

 
不客气。

BlackBox 发表于 2022-7-6 07:21:50

 
英雄所见略同,塔尔瓦。。。下面是一个快速测试:
 

(setq rec (ssname (ssget ":S:E" '((0 . "*POLYLINE"))) 0))

(setq oRec (vlax-ename->vla-object rec))

(defun _foreach (/ lst)
(foreach pt (entget rec)
   (if (eq (car pt) 10)
   (setq lst (cons (cdr pt) lst))
   )
)
)

(defun _lambda ()
(vl-remove-if-not
   (function (lambda (x) (= 10 (car x))))
   (entget rec)
)
)

(defun _vl ()
(vlax-get oRec 'coordinates)
)

(bench '(_foreach _lambda _vl) '() 100000)

 
... 结果是:
 

_$

_FOREACH
Elapsed: 5538
Average: 0.0554

_LAMBDA
Elapsed: 4789
Average: 0.0479

_VL
Elapsed: 2137
Average: 0.0214

Tharwat 发表于 2022-7-6 07:28:33

 
谢谢你,RM。
 
dxf 10仅适用于LWpolyline,如果用户选择3dpoly,结果将为零。

BlackBox 发表于 2022-7-6 07:33:45

 
... 因此(对我来说)更有理由坚持使用Visual LISP。

fabriciorby 发表于 2022-7-6 07:38:42

也谢谢你,黑匣子!
对不起,我刚刚看到所有帖子D:
页: [1] 2
查看完整版本: 对矩形的天真怀疑