本帖最后由 mandala 于 2011-5-13 20:06 编辑
 - ;;子程序,修改以捕捉端点方式“闭合”的pline使其闭合,
- ;;并按指定点作为起点重绘pline,最后返回pline的组码。
- (defun plchangestart
- (ee p1 / pt dat ptfrst ename aa data datb dat0 dat1 dat9)
- (setq pt (list (car p1) (cadr p1)))
- (setq dat (entget ee))
- (setq ptfrst (cons 10 pt))
- (setq ename (vlax-ename->vla-object ee))
- (if (vlax-curve-isclosed ename)
- (setq dat dat)
- (progn (setq dat (subst (cons 70 129) (assoc 70 dat) dat))
- (setq data (list (last dat)))
- (setq datb (reverse (cdr (cdr (cdr (cdr (cdr (reverse dat))))))))
- (setq dat (entmod (append datb data)))
- ) ;_ 结束progn
- ) ;_ 结束if
- ;;以上一段:如果pl最终不是以“c”闭合而是以捕捉端点方式“闭合”,
- ;;则修改组码使其达到闭合效果。
- (setq dat0 (reverse (member (assoc 39 dat) (reverse dat)))
- dat1 (cdr (member (assoc 39 dat) dat))
- dat9 (list (last dat1))
- dat1 (reverse (cdr (reverse dat1)))
- data (member ptfrst dat1)
- datb (reverse (cdr (member ptfrst (reverse dat1))))
- ) ;_ 结束setq
- (entmod (append dat0 data datb dat9))
- ;;以上一段:修改组码,使pline从指定点开始。
- ) ;_ 结束defun
试试这个。
ee是多段线的图元名,p1是指定起点的坐标,前者可用entsel、后者可用getpoint获得。
最后返回的是指定起点之后重绘的多段线组码,有了组码你想干嘛就可以干嘛。
|