逗亦斗霸 发表于 2024-11-27 11:25:44

请问多个坐标点连线的简化代码如何写?谢谢~

(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为无规律的坐标点,需要两两连线,用以上代码的方式写下来的话会很冗长,求精简的写法,谢谢~

llsheng_73 发表于 2024-11-27 16:11:51

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

被承包的东子 发表于 2024-11-27 11:46:06

(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:14

重复的代码可以用自定义函数代替。

逗亦斗霸 发表于 2024-11-27 11:56:30

wwwswallow 发表于 2024-11-27 11:49
重复的代码可以用自定义函数代替。

是的,就是不知道怎么自定义,因为没有规律,也不能用repeat函数代替~

逗亦斗霸 发表于 2024-11-27 11:58:34

被承包的东子 发表于 2024-11-27 11:46
(defun c:tt1 (/ entmake-pl lst p0 p1 p2 p3 p4 p5 p6 pt)
    (setq p0 (getpoint "\n插入点: ") )
    ...

谢谢啦~

xyp1964 发表于 2024-11-27 13:11:28

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

逗亦斗霸 发表于 2024-11-27 14:18:23

xyp1964 发表于 2024-11-27 13:11


感谢版主指点,又学会了另一个写法~

逗亦斗霸 发表于 2024-11-27 16:17:53

llsheng_73 发表于 2024-11-27 16:11


第二行这个写法给了我新的启发,感谢感谢~
页: [1]
查看完整版本: 请问多个坐标点连线的简化代码如何写?谢谢~