绘制多段线
你好我在试着绘制多段线,问题是当设置DXF 10时,我实际上粘贴了一个列表而不是一个点对,有什么方法可以修复它吗?
(defun drawPoly ()
(setq p nil pl nil)
(while (setq p (getpoint))
(setq pl (cons p pl))
)
(entmakex (list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(67 . 0)
'(410 . "Model")
'(8 . "SG_WALL")
'(100 . "AcDbPolyline")
(mapcar '(lambda (a) (append (cons 10 a))) pl)
)
)
)
(entmakex (append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(67 . 0)
(cons 410 (getvar 'ctab))
'(8 . "SG_WALL")
'(70 . 1)
(cons 90 (length pl))
)
(mapcar '(lambda (a)(cons 10 a)) pl)
)
)
你好,塔瓦,和我做的差不多?
(cons 10 a)将返回一个列表,而不是一个点对!?
真正地
你的日常工作做得好吗?
不需要点对,因为我将点列表附加到entmakex函数。
只有传递给cons的第二个参数是原子时,才会返回点对。
如果第二个参数是一个列表,cons会将第一个参数推到列表的前面。
观察:
_$ (cons "a" "b")
("a" . "b")
_$ (cons 1 2)
(1 . 2)
_$ (cons '(1 2 3) 2)
((1 2 3) . 2)
_$ (cons 1 '(1 2 3))
(1 1 2 3)
这就是我所说的,因为点坐标是作为一个列表形成的,cons将生成一个列表,那么entmakex为什么可以接受不是点对的列表呢? 所有这些都是由于我在之前的帖子中使用了append函数,而你坚持使用点对。
由于上述行为,具有列表值的DXF组不会形成点对-唯一的要求是DXF组编号为“car”元素,DXF值为“cdr”元素。
对不起,你大多数时候都是对的
谢谢李,我不记得在任何地方读到点对不是DXF强制数据,很高兴知道。。。
页:
[1]