samifox 发表于 2022-7-5 23:09:24

绘制多段线

你好
 
我在试着绘制多段线,问题是当设置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)
    )
)
)

Tharwat 发表于 2022-7-5 23:17:23


(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)
         )
)

samifox 发表于 2022-7-5 23:29:15

 
你好,塔瓦,和我做的差不多?
(cons 10 a)将返回一个列表,而不是一个点对!?

Tharwat 发表于 2022-7-5 23:37:38

 
真正地
你的日常工作做得好吗?
 
不需要点对,因为我将点列表附加到entmakex函数。

Lee Mac 发表于 2022-7-5 23:41:56

 
只有传递给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)

samifox 发表于 2022-7-5 23:48:02

 
这就是我所说的,因为点坐标是作为一个列表形成的,cons将生成一个列表,那么entmakex为什么可以接受不是点对的列表呢?

Tharwat 发表于 2022-7-5 23:56:27

所有这些都是由于我在之前的帖子中使用了append函数,而你坚持使用点对。

Lee Mac 发表于 2022-7-6 00:03:48

 
由于上述行为,具有列表值的DXF组不会形成点对-唯一的要求是DXF组编号为“car”元素,DXF值为“cdr”元素。

samifox 发表于 2022-7-6 00:12:49

 
对不起,你大多数时候都是对的
 
 
谢谢李,我不记得在任何地方读到点对不是DXF强制数据,很高兴知道。。。
页: [1]
查看完整版本: 绘制多段线