也发个内插的吧,不需要选等高线- (defun c:tqgc(/ BZ DGJ DGX1 DGX2 DGXGS EL1 EL2 EN GC1 GC2 H J JLB SS SSJL VLA XHB YSZB ZJD ZJDZB ZXZB);对等高线附近位置进行高程注记
- (setq ssjl(getint"\n请输入搜索距离:"))
- (setq ss(ssget"x"'((0 . "POLYLINE")(8 . "DGX")))j -1);建立重量线选择集
- (if ss(command"tolwpoly"ss""));将全部重量线转为轻量线
- (while (setq zjd(getpoint"\n请选择注记点位置:"))
- (setq zjd(list(car zjd)(cadr zjd)));三维点转换为二维点
- (setq yszb(list(+ ssjl (car zjd))(+ ssjl (cadr zjd)))zxzb(list(- (car zjd)ssjl)(- (cadr zjd)ssjl)));构造搜索范围框
- (setq ss(ssget "c"yszb zxzb'((0 . "lwpolyline")(8 . "dgx")))jlb'()j -1)
- (if (and ss(>= (setq dgxgs(sslength ss))2))
- (progn
- (repeat dgxgs
- (setq en(ssname ss(setq j(1+ j))))
- (setq vla(vlax-ename->vla-object en));转换成vla对象
- (setq zjdzb(vlax-curve-getClosestPointTo vla zjd));获得离注记点最近的曲线上的
- (setq jlb(cons (list (distance zjd zjdzb)en)jlb));构造图元名和相应距离表
- )
- (setq xhb(VL-SORT-I jlb'(lambda(x y)(< (car x)(car y)))));返回按距离从小到大排序后的表
- (setq dgx1(cadr(nth(car xhb)jlb))dgx2(cadr(nth(cadr xhb)jlb)));返回离注记点最近的两条等高线
- (setq el1(entget dgx1)el2(entget dgx2))
- (setq gc1(cdr(assoc 38 el1))gc2(cdr(assoc 38 el2)))
- (setq bz(/ (car(nth(car xhb)jlb))(+ (car(nth(car xhb)jlb))(car(nth(cadr xhb)jlb)))));获得两距离比值
- (setq dgj(- gc2 gc1))
- (setq h (+ gc1 (* dgj bz)))
- (command "drawgcd" "" zjd h "")
- )
- (alert"没有找到等高线!")
- )
- )
- (alert"注记完毕")
- (princ)
- )
|