与lambda函数混淆
嗨,伙计们如何使用lambda函数从列表中创建坐标线
请需要帮助解决此问题
(defun c:test(/ lst )
(setq lst '((1515.32 999.613 0.0) (2314.23 1081.97 0.0) (1690.57 752.536 0.0)
(2458.55 829.747 0.0) (1685.41 474.574 0.0) (2716.26 443.689 0.0))
)
(mapcar (function (lambda (x y)
(command "line" x y "") ????
))
lst
)
)
(mapcar
'(lambda (x y) (entmakex (list (cons 0 "LINE") (cons 10 x) (cons 11 y))))
lst
(append (cdr lst) (list (last lst)))
)
或:
(mapcar
'(lambda (x) (entmakex (list (cons 0 "LINE") (cons 10 (car x)) (cons 11 (cadr x)))))
(mapcar 'list lst (append (cdr lst) (list (last lst))))
)
编辑:或者如果您使用LM的entmake函数,那么您可以
(defun LWPoly (lst cls) ; LM
(entmakex
(append
(list
(cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline") (cons 90 (length lst)) (cons 70 cls)
)
(mapcar (function (lambda (p) (cons 10 p))) lst)
)
)
)
执行以下操作:
(LWPoly lst 0) 吼叫声
这太棒了,我不想只创建3行实体,例如'(1 1)'(2 2)'(3 3),请等待您的回复
如果要从点列表中创建线,必须将项目分组,使每个项目由2个点组成(一条线由2个点定义):
而不是这样的列表
'(1 1) '(2 2) '(3 3)
您必须使用:
(list
'((1 1) (2 2)) ; line #1
'((2 2) (3 3)) ; line #2
'((3 3) (1 1)) ; line #3 (if you want to close the shape)
)
谢谢,这对我帮助很大
页:
[1]