wanhongron 发表于 2022-5-17 22:32:16

随心随意测距

cad中的测距命令dist只能一次测两个点的距离,有一次可连续测多个点的命令吗?就像地图那种累加测法

自贡黄明儒 发表于 2022-5-18 14:29:25

(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-17 23:29:34

本帖最后由 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

20060510412 发表于 2022-5-17 22:39:57

做一个多段线,然后获取多段线的长度,这种代码很容易获取。

liufii 发表于 2022-5-18 08:47:27

song宋_74729 发表于 2022-5-17 23:29
试试这个
(DEFUN C:ll ()
(SETVAR "CMDECHO" 0)


这个测量后的距离不是累加的。

song宋_74729 发表于 2022-5-18 10:22:37

liufii 发表于 2022-5-18 08:47
这个测量后的距离不是累加的。

已修改累加

liufii 发表于 2022-5-18 11:30:13

本帖最后由 liufii 于 2022-5-18 11:32 编辑

song宋_74729 发表于 2022-5-18 10:22
已修改累加
多谢分享!

试了下出现错误,只能测量一段,错误如下:

请指定开始点:
请指定下一点:
本段长度为10467.87参数类型错误: 二维/三维点: nil

magicheno 发表于 2022-5-18 13:53:37

多谢分享 学习了

wanhongron 发表于 2022-5-18 15:25:22

谢谢大家的帮助,自贡黄明儒侠的程序短小精悍,如果能留下路径虚线就更完美了

gzcsun 发表于 2022-5-18 15:33:58

(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)
)
页: [1] 2 3
查看完整版本: 随心随意测距