明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 87|回复: 6

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

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
  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为无规律的坐标点,需要两两连线,用以上代码的方式写下来的话会很冗长,求精简的写法,谢谢~
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层
(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)
)
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
重复的代码可以用自定义函数代替。
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2 小时前 | 显示全部楼层
被承包的东子 发表于 2024-11-27 11:46
(defun c:tt1 (/ entmake-pl lst p0 p1 p2 p3 p4 p5 p6 pt)
    (setq p0 (getpoint "\n插入点: ") )
    ...

谢谢啦~
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
  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. )
回复 支持 反对

使用道具 举报

 楼主| 发表于 23 分钟前 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 14:41 , Processed in 0.185800 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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