本帖最后由 mandala 于 2011-4-15 21:39 编辑
可以参考一下我写的一个lsp,其中连线的模糊距离设置为0.1,你可按需要修改。

- ;;子程序,将输入选择集ssp中的LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,circle,统一变成LWPOLYLINE,
- ;;如果其中有首尾相连的线,则连接成一条LWPOLYLINE,
- ;;最后返回一个名为xss的选择集。
- (defun connectbypline (ssp / a xss xn ent)
- (acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))
- ;;加载flatten函数
- (setq a 0
- xss (ssadd)
- ) ;_ 结束setq
- (if
- (and (= (sslength ssp) 1)
- (or (= (cdr (assoc 0 (entget (ssname ssp 0)))) "LWPOLYLINE")
- (= (cdr (assoc 0 (entget (ssname ssp 0)))) "POLYLINE")
- ) ;_ 结束or
- ) ;_ 结束and
- (ssadd (ssname ssp 0) xss)
- ;;当选中的仅有一条pline的时候另作处理。
- (progn
- ;;如果有很多图元的话,全部变成pline并加入选择集xss:
- (repeat (sslength ssp)
- (setq xn (ssname ssp a))
- (setq ent (entget xn))
- (cond
- ((= (cdr (assoc 0 ent)) "LWPOLYLINE")
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "POLYLINE")
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "LINE")
- (command "pedit" xn "y" "")
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "SPLINE")
- (setq ss (ssadd))
- (ssadd xn ss)
- (acet-flatn ss nil)
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "ARC")
- (command "pedit" xn "y" "")
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ENT)) "CIRCLE")
- ;;圆的处理比较复杂
- (setq cp (cdr (assoc 10 ent))
- r (cdr (assoc 40 ent))
- ) ;_ 结束setq
- (entmake
- (setq lst (list
- '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(67 . 0)
- '(410 . "Model")
- '(100 . "AcDbPolyline")
- '(90 . 2)
- '(70 . 129)
- (cons 10 (polar cp 0 r))
- '(40 . 0)
- '(41 . 0)
- '(42 . -1)
- (cons 10 (polar cp pi r))
- '(40 . 0)
- '(41 . 0)
- '(42 . -1)
- ) ;list
- ) ;setq
- ) ;entmake
- (command "_matchprop" xn (entlast) "")
- (entdel xn)
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ) ;cond
- (setq a (+ a 1))
- ) ;repeat,以上将每个图元都变成pline并加入了选择集。
- (command "pedit" "m" xss "" "j" 0.1 "")
- ;;把能连的连上。
- (setq xss xss)
- ) ;progn
- ) ;if
- ) ;_ 结束defun
|