这是另一个,基于点距离。。。选择第一个点,然后根据最近的下一个点进行常规连接:
- (defun pointsarray ( ptst ptl / dptpt dptptlst mindptpt pten ptl )
- (foreach pt ptl
- (setq dptpt (distance ptst pt))
- (setq dptptlst (cons dptpt dptptlst))
- )
- (setq dptptlst (vl-remove 0.0 dptptlst))
- (setq mindptpt (eval (cons 'min dptptlst)))
- (mapcar '(lambda (pt) (if (= (distance ptst pt) mindptpt) (setq pten pt))) ptl)
- (setq ptlst (cons ptst ptlst))
- (setq ptl (vl-remove ptst ptl))
- (if (not (null ptl)) (pointsarray pten ptl) )
- ptlst
- )
- (defun c:pts2lines ( / ss ssn pt ptl ptst ptlst )
- (prompt "\nSelect points that you want to connect with lines")
- (setq ss (ssget '((0 . "POINT") (210 0.0 0.0 1.0)) ))
- (setq ssn (sslength ss) i ssn)
- (repeat ssn
- (setq pt (cdr (assoc 10 (entget (ssname ss (setq i (1- i)))))))
- (setq ptl (cons pt ptl))
- )
- (setq ptl (reverse ptl))
- (vl-cmdf "_.OSNAP" "node")
- (setq ptst (getpoint "\nPick start point from witch to create continous array of lines obtained from rest of selected points"))
- (setq ptlst (pointsarray ptst ptl))
- (vl-cmdf "_.LINE")
- (foreach pt ptlst
- (vl-cmdf pt)
- )
- (vl-cmdf "")
- (princ)
- )
M、 R。
顺便说一句,如果要绘制多段线,只需将(vl cmdf“_.LINE”)替换为(vl cmdf“_.PLINE”) |