明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 418|回复: 9

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

[复制链接]
发表于 2024-11-27 11:25:44 | 显示全部楼层 |阅读模式
  1. (defun c:tt (/ pt)
  2.     (setq p0 (getpoint "\n插入点: ") )
  3.     (setq p1 (mapcar '+ p0 '(0 10 0) ) )
  4.     (setq p2 (mapcar '+ p0 '(5 20 0) ) )
  5.     (setq p3 (mapcar '+ p0 '(40 40 0) ) )
  6.     (setq p4 (mapcar '+ p0 '(80 80 0) ) )
  7.     (setq p5 (mapcar '+ p0 '(150 90 0) ) )
  8.     (setq p6 (mapcar '+ p0 '(300 120 0) ) )
  9.   
  10.   (setq lst (list p1 p2) )
  11.   (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
  12.              (mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
  13.   
  14.   (setq lst (list p3 p4) )
  15.   (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
  16.              (mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
  17.   
  18.   (setq lst (list p1 p5) )
  19.   (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(8 . "0") '(62 . 0) (cons 90 (length lst) ) '(70 . 1) )
  20.              (mapcar '(lambda (pt) (cons 10 pt) ) lst) ) )
  21. )
p1~p6为无规律的坐标点,需要两两连线,用以上代码的方式写下来的话会很冗长,求精简的写法,谢谢~
回复

使用道具 举报

发表于 2024-11-27 16:11:51 | 显示全部楼层
  1. (defun c:tt(/ p0 p1 p2 p3 p4 p5 p6)
  2.   (setq p0(cons 10(getpoint "\n插入点: ")))
  3.   (setq p1(mapcar '+ p0 '(0 0 10 0) )
  4.         p2(mapcar '+ p0 '(0 5 20 0) )
  5.         p3(mapcar '+ p0 '(0 40 40 0) )
  6.         p4(mapcar '+ p0 '(0 80 80 0) )
  7.         p5(mapcar '+ p0 '(0 150 90 0) )
  8.         p6(mapcar '+ p0 '(0 300 120 0) ))
  9.   (vl-every(function(lambda(x)
  10.                       (entmakex(append'((0 . "LWPOLYLINE")(100 . "AcDbEntity")(100 . "AcDbPolyline")(90 . 2)(70 . 0))x))))
  11.            (list(list p1 p2)
  12.                 (list p3 p4)
  13.                 (list p1 p5))
  14.            )
  15.   )
回复 支持 1 反对 0

使用道具 举报

发表于 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)
)
回复 支持 反对

使用道具 举报

发表于 2024-11-27 11:49:14 | 显示全部楼层
重复的代码可以用自定义函数代替。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-27 11:56:30 | 显示全部楼层
wwwswallow 发表于 2024-11-27 11:49
重复的代码可以用自定义函数代替。

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

点评

把求各个点的这个写为函数,参数为 BasePoint, List<Point3d> , 有多少个点没关系,实际上在函数内你可以用 repeat的,最后就是 AppendEntity 到 Database。  发表于 2024-11-27 17:24
回复 支持 反对

使用道具 举报

 楼主| 发表于 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插入点: ") )
    ...

谢谢啦~
回复 支持 反对

使用道具 举报

发表于 2024-11-27 13:11:28 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun abc (lst c)
  3.     (entmakex (append (list '(0 . "LWPOLYLINE")
  4.                             '(100 . "AcDbEntity")
  5.                             '(100 . "AcDbPolyline")
  6.                             (cons 90 (length lst))
  7.                             (if c '(70 . 1) '(70 . 0))
  8.                       )
  9.                       (mapcar '(lambda (x) (cons 10 x)) lst)
  10.               )
  11.     )
  12.   )
  13.   (setq p0 (getpoint "\n插入点: "))
  14.   (setq p1 (mapcar '+ p0 '(0 10)))
  15.   (setq p2 (mapcar '+ p0 '(5 20)))
  16.   (setq p3 (mapcar '+ p0 '(40 40)))
  17.   (setq p4 (mapcar '+ p0 '(80 80)))
  18.   (setq p5 (mapcar '+ p0 '(150 90)))
  19.   (setq p6 (mapcar '+ p0 '(300 120)))
  20.   (abc (list p1 p2) nil)
  21.   (abc (list p3 p4) nil)
  22.   (abc (list p1 p5) nil)
  23.   (princ)
  24. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-27 14:18:23 | 显示全部楼层

感谢版主指点,又学会了另一个写法~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-27 16:17:53 | 显示全部楼层

第二行这个写法给了我新的启发,感谢感谢~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-28 20:18 , Processed in 0.200161 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表