yshf 发表于 2019-2-14 10:40:41

;点排序画线
(defun c:test()
    (setq cmd (getvar "cmdecho"))
    (setvar "cmdecho" 0)
    (command "_undo" "be")
    (if (setq ssa (ssget '((0 . "point"))))
      (progn
          (setq pts (mapcar '(lambda(ent)(cdr (assoc 10 (entget ent))))
                             (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssa)))
                      )
          )
          ;按圆弧方式排序
          (setq p0 (mapcar '/ (apply 'mapcar (cons '+ pts))
                                (list (length pts) (length pts))
                      )
          )
          (setq pts (vl-sort pts '(lambda(a b) (< (angle p0 a) (angle p0 b)))))
          
      ;或者按从左至右、由上往下方式排序
           ;(setq pts (vl-sort pts '(lambda(a b)(if (equal (car a) (car b))
          ;                                          (> (cadr a) (cadr b))
          ;                                          (< (car a)(car b))
          ;                                        )
          ;                          )
          ;              )
          ; )
          
          ;画多段线
          (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
                                   (cons 90 (length pts))
                          )
                          (mapcar '(lambda(x)(list 10 (car x) (cadr x))) pts)
                  )
          )
        )
   )

   (command "_undo" e)
   (setvar "cmdecho" cmd)
   (princ)
)

qiaojingjun 发表于 2019-2-15 17:27:47

yshf 发表于 2019-2-14 10:32


非常感谢大神很好用:lol

gengjun2019 发表于 2019-6-1 17:33:34

yshf 发表于 2019-2-14 10:40


你这个连起来的是平面多线段,请问能不能改成连接空间点,线是三维线,单线都可以

yshf 发表于 2019-6-1 21:23:59

本帖最后由 yshf 于 2019-6-2 15:40 编辑


            ;画多段线
            (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
                                 (cons 90 (length pts))
                            )
                            (mapcar '(lambda(x)(list 10 (car x) (cadr x))) pts)
                  )
            )
改为
            ;画三维多段线
            (entmake(List '(0 . "POLYLINE") '(100 . "AcDbEntity") '(100 . "AcDb3dPolyline") '(70 . 8)))
            (mapcar '(lambda(pt)(entmake (list '(0 . "vertex") (cons 10 pt) '(70 . 32)))) pts)
            (entmake '((0 . "seqend")))
即可。

gengjun2019 发表于 2019-6-2 11:31:01

yshf 发表于 2019-6-1 21:23

            ;画多段线
            (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntit ...

我替换内容后不能用啊,代码实在看不懂,麻烦您发我个LISP文件,谢谢!!

gengjun2019 发表于 2019-6-2 15:01:15

gengjun2019 发表于 2019-6-2 11:31
我替换内容后不能用啊,代码实在看不懂,麻烦您发我个LISP文件,谢谢!!

自己试着改好了,非常感谢

yshf 发表于 2019-6-2 15:42:14

gengjun2019: 文件已传上,请去下载 。

gengjun2019 发表于 2019-6-2 17:26:04

yshf 发表于 2019-6-2 15:42
gengjun2019: 文件已传上,请去下载 。

非常感谢你的帮忙。经测试点排列顺序有点混乱,很难达到想要的顺序。我想把它改成半自动的连线方式,手动多点几次就行。排列顺序只从左到右排,不受点Z向高度影响。

sunny_8848 发表于 2021-4-24 11:27:21

挺好用的,要是能画出完整的光滑曲线来就更好了

czf0571 发表于 2024-6-14 16:13:51

请教一下命令是啥?
页: 1 [2]
查看完整版本: 求助点连线的lisp