请问多个坐标点连线的简化代码如何写?谢谢~
(defun c:tt (/ pt)(setq p0 (getpoint "\n插入点: ") )
(setq p1 (mapcar '+ p0 '(0 10 0) ) )
(setq p2 (mapcar '+ p0 '(5 20 0) ) )
(setq p3 (mapcar '+ p0 '(40 40 0) ) )
(setq p4 (mapcar '+ p0 '(80 80 0) ) )
(setq p5 (mapcar '+ p0 '(150 90 0) ) )
(setq p6 (mapcar '+ p0 '(300 120 0) ) )
(setq lst (list p1 p2) )
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
(mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
(setq lst (list p3 p4) )
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
(mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
(setq lst (list p1 p5) )
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
(mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
)p1~p6为无规律的坐标点,需要两两连线,用以上代码的方式写下来的话会很冗长,求精简的写法,谢谢~
(defun c:tt(/ p0 p1 p2 p3 p4 p5 p6)
(setq p0(cons 10(getpoint "\n插入点: ")))
(setq p1(mapcar '+ p0 '(0 0 10 0) )
p2(mapcar '+ p0 '(0 5 20 0) )
p3(mapcar '+ p0 '(0 40 40 0) )
p4(mapcar '+ p0 '(0 80 80 0) )
p5(mapcar '+ p0 '(0 150 90 0) )
p6(mapcar '+ p0 '(0 300 120 0) ))
(vl-every(function(lambda(x)
(entmakex(append'((0 . "LWPOLYLINE")(100 . "AcDbEntity")(100 . "AcDbPolyline")(90 . 2)(70 . 0))x))))
(list(list p1 p2)
(list p3 p4)
(list p1 p5))
)
) (defun c:tt1 (/ entmake-pl lst p0 p1 p2 p3 p4 p5 p6 pt)
(setq p0 (getpoint "\n插入点: ") )
(setq p1 (mapcar '+ p0 '(0 10 0) ) )
(setq p2 (mapcar '+ p0 '(5 20 0) ) )
(setq p3 (mapcar '+ p0 '(40 40 0) ) )
(setq p4 (mapcar '+ p0 '(80 80 0) ) )
(setq p5 (mapcar '+ p0 '(150 90 0) ) )
(setq p6 (mapcar '+ p0 '(300 120 0) ) )
(defun entmake-pl(lst)
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
(mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
)
(setq lst (list (list p1 p2)(list p3 p4)(list p1 p5)) )
(mapcar 'entmake-pl lst )
(PRINC)
) 重复的代码可以用自定义函数代替。 wwwswallow 发表于 2024-11-27 11:49
重复的代码可以用自定义函数代替。
是的,就是不知道怎么自定义,因为没有规律,也不能用repeat函数代替~ 被承包的东子 发表于 2024-11-27 11:46
(defun c:tt1 (/ entmake-pl lst p0 p1 p2 p3 p4 p5 p6 pt)
(setq p0 (getpoint "\n插入点: ") )
...
谢谢啦~ (defun c:tt ()
(defun abc (lst c)
(entmakex (append (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length lst))
(if c '(70 . 1) '(70 . 0))
)
(mapcar '(lambda (x) (cons 10 x)) lst)
)
)
)
(setq p0 (getpoint "\n插入点: "))
(setq p1 (mapcar '+ p0 '(0 10)))
(setq p2 (mapcar '+ p0 '(5 20)))
(setq p3 (mapcar '+ p0 '(40 40)))
(setq p4 (mapcar '+ p0 '(80 80)))
(setq p5 (mapcar '+ p0 '(150 90)))
(setq p6 (mapcar '+ p0 '(300 120)))
(abc (list p1 p2) nil)
(abc (list p3 p4) nil)
(abc (list p1 p5) nil)
(princ)
) xyp1964 发表于 2024-11-27 13:11
感谢版主指点,又学会了另一个写法~ llsheng_73 发表于 2024-11-27 16:11
第二行这个写法给了我新的启发,感谢感谢~
页:
[1]