大家别笑,04年那时候还没空玩vl,vba
程序中command可以用相应另外写的函数替换 - ;| (plnff eplst) = 偏移多义线单段线段------------ok!!!------------------lxx.2004.7.29
- 说明: 1.支持polyline及lwpolyline. 2.仅可偏移单段.
- 参数: eplst = (entsel)返回的表.必须选中多义线!
- 返回: (list eplst p2 (distance p p2) el)
- 测试: (plnff (entsel))
- |;
- (defun plnff (eplst / e p1 p ent el el0 k seq plx plx2 p2 pt d)
- (setq e (car eplst)
- p1 (cadr eplst)
- p (vlax-curve-getclosestpointto e p1);;确保取点.
- ent(entget e))
- (if (= "LWPOLYLINE" (cdr(assoc 0 ent))) ;;转为旧式pl格式.
- (progn
- (vl-cmdf "_.convertpoly" "h" e "")
- (setq eL (entlast) el0 el ent (entget el) k T)
- )
- (setq el e el0 e)
- )
- (while (/= "SEQEND" (cdr(assoc 0 (setq seq (entget(setq el (entnext el))))))));;取seqend段.
- (setq ent (subst (cons 70 0) (assoc 70 ent) ent) ;;改为不封闭.
- plx (entget (car(nentselp p1)));;取点中段的实体表.
- plx2 (entget(entnext (cdr(assoc -1 plx)))));;下一个.
- (if (equal seq plx2)(setq plx2 (entget (entnext el0))));;如果是闭合段,下一个取pl线第一段.
- (mapcar 'entmakex(mapcar '(lambda (y) (vl-remove-if '(lambda(x)(member (car x) '(-1 5 -2))) y))(list ent plx plx2 seq)));;生成新的pl段.
- ;(if k (entdel el0));;删除多余实体.
- (setq pt (getpoint p "\n偏移方向及距离<输入数字or点取>:")
- d (distance p pt)
- el (entlast))
- (vl-cmdf "_.offset" d (list el p) pt "")
- ;(while (/= 0 (getvar "cmdactive")) (vl-cmdf pause))
- (entdel el)
- (if (equal el (entlast)) nil (list eplst d (entlast)))
- )
|