马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 dnbcgrass 于 2015-9-9 15:33 编辑
;;用以下程序获取直线段上距指定点最近的点,但有时这个最
;;近点并不在直线段上,用它求距直线段起点的距离为nil,
;;是不是vlax-curve-getclosestpointto函数有问题。 - (defun c:tt()
- (vl-load-com)
- (setq ent (car (entsel "\n选取直线段:")))
- (setq dxf (entget ent))
- (if (= (cdr (assoc 0 dxf)) "LINE")
- (progn
- ;直线段的起点
- (setq p10 (cdr (assoc 10 dxf)))
- ;直线段的起点
- (setq p11 (cdr (assoc 11 dxf)))
- (while (setq pt (getpoint "\n直线段外一点:"))
- ;直线段上距pt点最近的点ptt
- (setq ptt (vlax-curve-getclosestpointto ent pt))
- (setq pdl (trans (mapcar '- ptt p10) 1 (mapcar '- p11 p10)))
- ;点ptt距直线段起点p10的距离
- (setq cdz (vlax-curve-getdistatpoint ent ptt))
- (princ "\nptt距直线段上垂足的距离=") (princ (car pdl))
- (princ ", 距直线段起点的距离=") (princ (last pdl))
- (princ "\nvlax-curve-getdistatpoint求得的距直线段起点的距离=") (princ cdz)
- )
- )
- )
- (princ)
- )
;|
测试如下:
其中第1点为直线段起点,第2点为直线段止点,第3点为直线段中点,第4点为直线段外任一点。
命令: tt
选取直线段:
直线段外一点:
ptt距直线段上垂足的距离=0.0, 距直线段起点的距离=0.0
vlax-curve-getdistatpoint求得的距直线段起点的距离=0.0
直线段外一点:
ptt距直线段上垂足的距离=-7.10543e-015, 距直线段起点的距离=105.665
vlax-curve-getdistatpoint求得的距直线段起点的距离=105.665
直线段外一点:
ptt距直线段上垂足的距离=-5.14476e-010, 距直线段起点的距离=52.8327
vlax-curve-getdistatpoint求得的距直线段起点的距离=nil
直线段外一点:
ptt距直线段上垂足的距离=4.79154e-010, 距直线段起点的距离=33.9108
vlax-curve-getdistatpoint求得的距直线段起点的距离=nil
直线段外一点:
|;
|