fangmin723 发表于 2022-4-15 07:50:59

框选直线,在框内端点连接成样条曲线


;;说明:框选直线,在框内端点连接成样条曲线
(defun C:ES(/ dxf10 dxf11 edata ent isptinrectang n pt1 pt2 ptlst ss)
;;;判断p点是否在P1,P2构成的矩形框内
;;;(IsPtInRectang (getpoint) (getpoint) (getpoint))
(defun IsPtInRectang(p1 p2 p) (vl-every '>= (mapcar '* (mapcar '- p p1) (mapcar '- p2 p)) '(0 0)))
(if (and (setq pt1 (getpoint "\n指定第一个角点:"))(setq pt2 (getcorner pt1 "指定第二个角点,确保连接的点在框内:")) (setq ss (ssget "C" pt1 pt2 '((0 . "LINE")))))
    (progn
      (setq ptlst nil n -1)
      (while (setq ent (ssname ss (setq n (1+ n))))
      (setq edata (entget ent) dxf10 (cdr (assoc 10 edata)) dxf11 (cdr (assoc 11 edata)))
      (if (IsPtInRectang pt1 pt2 dxf10) (setq ptlst (cons dxf10 ptlst)))
      (if (IsPtInRectang pt1 pt2 dxf11) (setq ptlst (cons dxf11 ptlst)))
      )
      (setq ptlst (vl-sort ptlst (function (lambda(p1 p2) (< (car p1) (car p2))))))
      (entmake (append (list '(0 . "SPLINE")
                         '(100 . "AcDbEntity")
                         '(100 . "AcDbSpline")
                         '(71 . 3)
                     )
               (mapcar '(lambda (pt) (cons 11 pt)) ptlst)
               )
      )
    )
)
(prin1)
)


qazxswk 发表于 2023-4-20 06:27:11

zixuan203344 发表于 2022-4-15 08:16
建议:下端按最近点排序吧,你按X从小到大排序,不具备通用性

楼主的代码,只是给了一个思路吧。按你的意思,也不具备通用性,比如,当直线都是水平时,连线就混乱了。:lol

fangmin723 发表于 2022-4-15 09:03:29

zixuan203344 发表于 2022-4-15 08:16
建议:下端按最近点排序吧,你按X从小到大排序,不具备通用性

我也想过,不过最近比较懒,具备最基本的使用就可以了,其他的懒得写!:lol

fangmin723 发表于 2023-2-13 14:09:21

广易精通 发表于 2023-2-12 12:34
楼主你好!我想生成多段线可以吗?组码怎么对不上,麻烦赐教

可以啊,多段线顶点组码是10

liunian0524 发表于 2022-4-15 08:13:23

感谢分享,源码都得支持

zixuan203344 发表于 2022-4-15 08:16:28

建议:下端按最近点排序吧,你按X从小到大排序,不具备通用性

999999 发表于 2022-4-15 09:06:03

谢谢大神的分享,

hhh454 发表于 2022-4-15 20:25:48

感谢楼主分享,学习

nijiea123 发表于 2022-4-20 15:30:04

很不错呀 感谢分享

zghmaya 发表于 2022-4-20 18:22:50


很不错呀 感谢分享

广易精通 发表于 2023-2-12 12:34:41

楼主你好!我想生成多段线可以吗?组码怎么对不上,麻烦赐教
页: [1] 2
查看完整版本: 框选直线,在框内端点连接成样条曲线