这几天的工作任务是做一个宗地图的标注,要求把界址线上的点求得与下行线间的垂直距离,因为下行线分了好几条,而界址线贯穿一张图,我现在找到的代码出现的错误就是当界址线的水平长度和下行线长度一致时获得的垂足坐标是对的,但是代码默认是通过与界址点的下行线上最近一个点确定垂足,所以出现了有多个界址点得到的垂足坐标是下行线最末的端点,不知道代码怎么改合适呢?还有这样得到的垂足坐标(即程序中的pd)x和y值是2位或3位小数点,没有规律的,怎么设定一下使得精度能够自己设定呢? - (defun c:tes4 ( / pt sl pd ds )
- (if (null vlax-dump-object) (vl-load-com)) ;;加载vlax扩展函数
- (setq ptd (HH:PTlists(car (entsel))));获得下行线的顶点串行
- (setq ptb (HH:PTlists(car (entsel))));获得界址线的顶点串行
- (princ "\n点的数量:")(princ (length ptb))
- (setq sl (entsel "\n选择直线:")) ;;选择点和线)
- (setq i 0)
- (setq sl (vlax-ename->vla-object (car sl))) ;;转换直线为vla对象
- (repeat (length ptb)
- (setq pt (nth i ptb))
- (setq pd (vlax-curve-getclosestpointto sl pt)) ;;求出直线上距选择点最近的点
- (command "_.line" pt pd "") ;;绘制出最短的距离线
- (setq ds (distance pt pd)) ;;求出两点距离
- (princ (strcat "\n点到该直线的最短距离是:< " (rtos ds) " >")) ;;输出最短距离
- (setq i (+ i 1))
- )
- (princ) ;;静默退出
- )
|