程序如下。但该程序没有判断是否选取了直线和点,也就是说,没有错误处理
- (defun c:per(/ el sp dp ep dsp dep dse al pp spx spy dpx dpy epx epy ppx ppy)
- (prompt "请选择直线:")
- (setq el (car (entsel)));;;直线图元名
- (setq sp (cdr (assoc 10 (entget el))));;;直线起点
- (setq dp (cdr (assoc 11 (entget el))));;;直线终点
- (prompt "请选择点:")
- (setq ep (getpoint));;;已知点选取
- (setq dsp (distance ep sp));;;直线起点到选取点距离
- (setq dep (distance ep dp));;;直线终点到选取点距离
- (setq dse (distance sp dp));;;直线长度
- (if
- (or
- (= dsp (+ dep dse))
- (= dep (+ dsp dse))
- (= dse (+ dsp dep))
- );;;判断
- (princ "\n点位于直线上")
- (progn
- (setq spx (car sp) spy (cadr sp));;;直线起点xy坐标
- (setq dpx (car dp) dpy (cadr dp));;;直线终点xy坐标
- (setq al (- (angle (list spx spy)(list dpx dpy))(/ pi 2.0)));;;直线的垂线方向角
- (if (vla-object el))
- (if (setq ep (getpoint "\n请选择点:"))
- (progn
- (setq cp (vlax-curve-getClosestPointTo obj ep T))
- (if (/= (distance ep cp) 0.0)
- (entmake (list '(0 . "LINE")(cons 10 ep)(cons 11 cp)))
- (princ "\n点位于直线上,三维无解")
- )
- )
- (princ "\n未选取点")
- )
- )
- (princ "\n未选取直线")
- )
- (princ)
- )
|