随心随意测距
cad中的测距命令dist只能一次测两个点的距离,有一次可连续测多个点的命令吗?就像地图那种累加测法(defun c:tt1 (/ N P1 P2)
(setq n 0)
(setq p1 (getpoint "\n 测距起点:"))
(while (and p1 (setq p2 (getpoint p1 "\n 测距开始:")))
(setq n (+ (distance p1 p2) n))
(setq p1 p2)
)
(princ n)
(princ)
) 本帖最后由 song宋_74729 于 2022-5-18 10:33 编辑
试试这个
(defun c:lxcj (/ pt pts dist1 dist2 p1 N)
(setq pt(getpoint "\n 请指定开始点:"))(setq p1(getpoint pt "\n 请指定下一点:"))(SETQ DIST1(DISTANCE P1 Pt))(PRINC(strcat "\n 本段长度为"(rtos dist1 2 2)))(grdraw ptp1 1 1)(if p1 (PROGN (setq pts(cons p1 (list pt))) (SETQ DIST1(DISTANCE (car pts) (last pts))) (PRINC(strcat "累计长度为" (rtos dist1 2 2))) (setq M 0) (while (if pt (progn (initget 128 "F") (setq pt (getpoint p1 "\n 下一点[下一点(NEXT)/重新开始点(F)]<NEXT>: " ) ;_ 结束getpoint ) ;_ 结束setq ) ;_ 结束progn ) ;_ 结束if (if (= pt"F") (progn (setqp1 (getpoint "\n 请指定重新开始点:")) (setqpt (getpoint p1 "\n 请指定下一点:")) (grdrawpt p1 1 1) (ifp1 (PROGN (setq pts (cons p1 (list pt)))) ) ;_ 结束if );_ 结束progn ) ;_ 结束if (setq pts(cons pt pts)) (if (>=(length pts) 2) (grdraw pt p1 1 1) ) ;_ 结束if (SETQ DIST2(DISTANCE p1 pt)) (PRINC(strcat "\n 本段长度为"(rtos dist2 2 2))) (SETQ DIST1(+ (DISTANCE P1 Pt) dist1)) (PRINC(strcat "累计长度为" (rtos dist1 2 2))) (setq p1 pt) (SETQ M (1+M)) ) ;_ 结束while ) ;_ 结束PROGN ) ;_ 结束if(princ(strcat "\n (总长度为"(rtos dist1 2 2)")>>>>>>>"))(princ(strcat "(共测量了"(rtos (+ M 1) 2 0) "条线)"))(if (zeropdist1) (princ "零长度尺寸,请重新测量!") ) ;_ 结束if(princ)) ;_ 结束defun
做一个多段线,然后获取多段线的长度,这种代码很容易获取。 song宋_74729 发表于 2022-5-17 23:29
试试这个
(DEFUN C:ll ()
(SETVAR "CMDECHO" 0)
这个测量后的距离不是累加的。 liufii 发表于 2022-5-18 08:47
这个测量后的距离不是累加的。
已修改累加 本帖最后由 liufii 于 2022-5-18 11:32 编辑
song宋_74729 发表于 2022-5-18 10:22
已修改累加
多谢分享!
试了下出现错误,只能测量一段,错误如下:
请指定开始点:
请指定下一点:
本段长度为10467.87参数类型错误: 二维/三维点: nil
多谢分享 学习了 谢谢大家的帮助,自贡黄明儒侠的程序短小精悍,如果能留下路径虚线就更完美了 (defun c:tt1(/ N n1 P1 p22 P2)
(setq n 0)
(setq n1 0)
(setq p1 (getpoint "\n 测距起点:"))
(setq p22 (strcat "\n 测距开始"))
(while (and p1 (setq p2 (getpoint p1 p22)))
(setq n (+ (distance p1 p2) n))
(grdraw p1 p2 1 1)
(setq p1 p2)
(setq n1(+ n1 1))
(setq p22 (strcat "\n " (rtos n1) "点 "(rtos n 2 2)))
)
(princ)
)