本帖最后由 llsheng_73 于 2015-8-8 08:32 编辑
那样的话,可以依次用多线段的顶点坐标作为过滤条件找到该顶点位置的高程值(比如高程点),全部取出后用这些点绘制polyline,删除该多线段
当然这些高程点实际上可能用多线段顶点表进行ssget"F"一次性取出来(不过需要排除不在线上的点)
当然也可以直接根据顶点平面坐标去查找到高程
这样循环处理完所有多线段
 - (defun c:tt(/ pt p h)
- (setq p(mapcar'(lambda(x)(cdr(assoc 10(entget x))))(sstoes(ssget"X"'((0 . "INSERT")(8 . "99")(2 . "99"))))))
- (foreach e(sstoes(ssget'((0 . "lwPolyline")(8 . "94213"))))
- (MKPOLYLINE(cons(setq en(entget e)
- h(cdr(assoc 38 en))
- pt(mapcar'(lambda(x)
- (if(setq y(vl-remove-if-not'(lambda(y)(equal(mapcar'+'(0 0)y)x 1e-8))p))(car y)(list(car x)(cadr x)h)))
- (mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)10))en))))
- (cons(+(logand(cdr(assoc 70 en))1)8)(subst 256'nil(mapcar'(lambda(x)(cdr(assoc x en)))'(8 62))))))
- ;;(entdel e);;;如果不需要保留原多线段,可加上此句删除它
- )
- )
- (defun MKPOLYLINE(arg / e);;arg(pts 是否闭合 layer color)
- (setq e(entmakex(cons'(0 . "POLYLINE")(mapcar'cons'(70 8 62)(cdr arg)))))
- (foreach x(car arg)
- (entmake(list'(0 . "VERTEX")'(70 . 32)(cons 10 x))))
- (entmake '((0 . "SEQEND")))
- e)
- (defun SstoEs(ss / a lst)
- (if ss(progn(setq a -1)(repeat(sslength ss)(setq lst(cons(ssname ss(setq a(1+ a)))lst))))))
|