明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1710|回复: 19

[提问] 求助点连线的lisp

  [复制链接]
发表于 2019-2-12 10:44 | 显示全部楼层 |阅读模式
求助大神,怎么点连线 ,见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2019-2-14 10:32 | 显示全部楼层
本帖最后由 yshf 于 2019-2-14 10:39 编辑
  1. <blockquote>;点排序画线
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

这个好用,就像这样子的  发表于 2020-3-23 11:50
回复 支持 1 反对 1

使用道具 举报

发表于 2019-2-12 23:01 | 显示全部楼层
  1. (defun c:tt ()
  2.   (if (setq ss (ssget '((0 . "POINT"))))
  3.     (setq ptn (mapcar '(lambda (x) (xyp-DXF 10 x)) (xyp-Ss2List ss))
  4.           ptn (vl-sort ptn '(lambda (x y) (< (car x) (car y))))
  5.           s1  (xyp-Pline ptn nil)
  6.     )
  7.   )
  8.   (princ)
  9. )
回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-14 10:40 | 显示全部楼层
  1. ;点排序画线
  2. (defun c:test()
  3.     (setq cmd (getvar "cmdecho"))
  4.     (setvar "cmdecho" 0)
  5.     (command "_undo" "be")
  6.     (if (setq ssa (ssget '((0 . "point"))))
  7.         (progn
  8.             (setq pts (mapcar '(lambda(ent)(cdr (assoc 10 (entget ent))))
  9.                                (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssa)))
  10.                       )
  11.             )
  12.             ;按圆弧方式排序
  13.             (setq p0 (mapcar '/ (apply 'mapcar (cons '+ pts))
  14.                                 (list (length pts) (length pts))
  15.                       )
  16.             )
  17.             (setq pts (vl-sort pts '(lambda(a b) (< (angle p0 a) (angle p0 b)))))
  18.           
  19.         ;或者按从左至右、由上往下方式排序
  20.            ;(setq pts (vl-sort pts '(lambda(a b)(if (equal (car a) (car b))
  21.             ;                                            (> (cadr a) (cadr b))
  22.             ;                                            (< (car a)  (car b))
  23.             ;                                        )
  24.             ;                            )
  25.             ;              )
  26.             ; )
  27.           
  28.             ;画多段线
  29.             (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
  30.                                    (cons 90 (length pts))
  31.                             )
  32.                             (mapcar '(lambda(x)(list 10 (car x) (cadr x))) pts)
  33.                     )
  34.             )
  35.         )
  36.      )

  37.      (command "_undo" e)
  38.      (setvar "cmdecho" cmd)
  39.      (princ)
  40. )

回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-12 17:54 | 显示全部楼层
坐标排序,然后再连
发表于 2019-2-12 17:56 | 显示全部楼层
你的上一个帖子中,我给你写好的随便改一下就好了
 楼主| 发表于 2019-2-12 17:58 | 显示全部楼层
13648893846 发表于 2019-2-12 17:54
坐标排序,然后再连

咋操作  门外汉一枚
发表于 2019-2-12 18:06 | 显示全部楼层
本帖最后由 13648893846 于 2019-2-12 18:09 编辑

(defun c:tt1(/ ss entlst)
   (setq ss (ssget '((0 . "POINT"))))
   (setq entlst(gxl-Sel-SS->List ss))
   (setq entlst (vl-sort entlst '(lambda (p1 p2)(< (car (cdr (assoc 10 (entget p1))))
                          (car (cdr (assoc 10 (entget p2))))))))
   (LC:Make-LWPOLYLINE1(mapcar'(lambda(x)(dxf 10 (entget x)))entlst))
);仅对测试图有效,其他得看你的约束条件
发表于 2019-2-13 08:51 | 显示全部楼层

院长的代码好精辟
 楼主| 发表于 2019-2-13 19:05 | 显示全部楼层
13648893846 发表于 2019-2-13 08:51
院长的代码好精辟

选择对象:  ; 错误: no function definition: XYP-SS2LIST  大神 这个是咋回事  好像不灵
发表于 2019-2-14 08:41 | 显示全部楼层
no function definition: GXL-SEL-SS->LIST
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 03:13 , Processed in 0.288214 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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