简单写了一个,WCS,UCS都测试了,见演示,请下载最新的API和通用LISP函数库。用了老大的API和通用LISP函数,代码很短
 - (defun c:tt ()
- (if (not #XDTB_GLOBAL_VAR_JVBUJIACHU)
- (setq #XDTB_GLOBAL_VAR_JVBUJIACHU 2.0)
- )
- (if (setq jc (getreal (xdrx_prompt "\n请输入局部加粗的宽度<" #XDTB_GLOBAL_VAR_JVBUJIACHU ">:" t)))
- (setq #XDTB_GLOBAL_VAR_JVBUJIACHU jc)
- )
- (if (and
- (setq e1 (xdrx_entsel "\n请在起始段附近拾取点<退出>:" '((0 . "*POLYLINE"))))
- (setq p1 (trans (cadr e1) 1 0))
- (setq inx1 (XD::Polyline:NearIndex (car e1) p1))
- (xd::doc:drawcrosshair (xdrx_polyline_getpointat (car e1) inx1))
- (setq e2 (xdrx_entsel "\n请在结束附近拾取点<退出>:" '((0 . "*POLYLINE"))))
- (setq p2(trans (cadr e2) 1 0))
- (setq inx2 (XD::Polyline:NearIndex (car e2) p2))
- (setq inx2 (if (= inx1 inx2)(1+ inx1) inx2))
- (xd::doc:drawcrosshair (xdrx_polyline_getpointat (car e2) inx2))
- (setq e3 (xdrx_entsel "\n请拾取下两点的中间段<退出>:" '((0 . "*POLYLINE"))))
- (setq p3 (trans (cadr e3) 1 0))
- (equal (car e1) (car e2))
- (equal (car e1) (car e3))
- )
- (progn
- (setq inx12 (XD::Polyline:NearIndex (car e3) p3)
- inx12 (if (and (= 1 (- inx2 inx1))(= inx12 inx2)) (1- inx12) inx12)
- pnts (XD::Polyline:MidPntAtIndexs (car e1) inx1 inx2 inx12)
- inxs (mapcar
- '(lambda (x)
- (XD::Polyline:NearIndex (car e1) x)
- )
- pnts
- )
- dotpair (XD::List:SnakePair inxs)
- )
- (mapcar
- '(lambda (x)
- (xdrx_polyline_setWidthsAt (car e1) x #XDTB_GLOBAL_VAR_JVBUJIACHU #XDTB_GLOBAL_VAR_JVBUJIACHU)
- )
- (XD::List:RemoveTail inxs)
- )
- )
- )
- (if (not e3)
- (princ "\n没有拾取到中间段,退出!")
- )
- (princ)
- )
|