本帖最后由 434939575 于 2015-8-3 10:13 编辑
本程序想要达到最右边的连线效果,颜色不要那样子[em0]。自己只能弄出中间的效果。望大家多多帮助。谢谢!
- (defun c:tt()
- (setq ss(ssget))
- (tmp_2 ss)
- )
- ;;; 功能 水平线端点增线连线
- (defun tmp_2 (ss / one_pt:ab pt_jion sort_y< two_pt:a two_pt:ab)
- (setq lis_app nil)
- (setq sort_y< (tmp_1 ss))
- ;(setq pa (cadar sort_y<));第一点
- (while (/= sort_y< nil)
- (setq one_pt:ab (cdar sort_y<))
- (setq two_pt:ab (reverse (cdadr sort_y<)))
- (setq two_pt:a (car two_pt:ab))
- (setq two_pt:a (cadr two_pt:ab))
- (if (/= pt_jion nil)
- (progn
- (if (/= two_pt:a nil)
- (setq lis> (list pt_jion
- (car one_pt:ab)
- (cadr one_pt:ab)
- (car two_pt:ab)
- (cadr two_pt:ab)
- )
- )
- (setq lis> (list pt_jion (car one_pt:ab) (cadr one_pt:ab)))
- ) ;if
- ) ;progn <<
- (progn (if (/= two_pt:a nil)
- (setq lis> (list (car one_pt:ab)
- (cadr one_pt:ab)
- (car two_pt:ab)
- (cadr two_pt:ab)
- )
- )
- (setq lis> (list (car one_pt:ab) (cadr one_pt:ab)))
- ) ;if
- ) ;progn <<
- ) ;if
- (setq sort_y< (cddr sort_y<))
- (setq pt_jion two_pt:a)
- (setq lis_app (append lis_app lis>))
- ) ;while
- (entmake_pline lis_app)
- ) ;end
- ;;;********************************
- (defun entmake_pline (lst)
- (entmake (append (list '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- (cons 90 (length lst))
- )
- (mapcar '(lambda (pt) (cons 10 pt)) lst)
- )
- )
- )
- ;;水平线-名字 2端点 从下到上排序
- (defun tmp_1 (ss /
- e1 e2
- ii na+pt>ab
- na+pt>ab+
- name pt_lis
- pta pta_x
- ptb ptb_x
- vl_y<
- )
- (setq na+pt>ab+ nil)
- (setq ii 0)
- (repeat (sslength ss)
- (setq name (ssname ss ii)
- ii (1+ ii)
- )
- (setq pta (vlax-curve-getstartpoint name))
- (setq ptb (vlax-curve-getendpoint name))
- (setq pta_x (car pta))
- (setq ptb_x (car ptb))
- (if (< pta_x ptb_x) ;水平线排序
- (setq pt_lis (list pta ptb))
- (setq pt_lis (list ptb pta))
- )
- (setq na+pt>ab (append (list name) pt_lis))
- (setq na+pt>ab+ (append (list na+pt>ab) na+pt>ab+))
- ) ;repeat
- (setq
- vl_y< (vl-sort
- na+pt>ab+
- (function (lambda (e1 e2) (< (cadadr e1) (cadadr e2))))
- )
- )
- ) ;end
|