对矩形的天真怀疑
我用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: 试试这个未经测试的代码。
(foreach pt retangulo
(if (eq (car pt) 10)
(setq lst (cons (cdr pt) lst))
)
)
(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)
)
或者这个。。。
(vl-remove-if-not '(lambda (x) (eq (car x) 10)) retangulo)
是 啊你成功了!
嗯,这么简单(:
我需要改进我的列表处理。
谢谢你,塔瓦
不客气。
英雄所见略同,塔尔瓦。。。下面是一个快速测试:
(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
谢谢你,RM。
dxf 10仅适用于LWpolyline,如果用户选择3dpoly,结果将为零。
... 因此(对我来说)更有理由坚持使用Visual LISP。 也谢谢你,黑匣子!
对不起,我刚刚看到所有帖子D:
页:
[1]
2