明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2746|回复: 28

[提问] 随心随意测距

[复制链接]
发表于 2022-5-17 22:32:16 | 显示全部楼层 |阅读模式
cad中的测距命令dist只能一次测两个点的距离,有一次可连续测多个点的命令吗?就像地图那种累加测法

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-5-18 14:29:25 | 显示全部楼层
  1. (defun c:tt1 (/ N P1 P2)
  2.   (setq n 0)
  3.   (setq p1 (getpoint "\n 测距起点:"))
  4.   (while (and p1 (setq p2 (getpoint p1 "\n 测距开始:")))
  5.     (setq n (+ (distance p1 p2) n))
  6.     (setq p1 p2)
  7.   )
  8.   (princ n)
  9.   (princ)
  10. )
回复 支持 1 反对 0

使用道具 举报

发表于 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

回复 支持 1 反对 0

使用道具 举报

发表于 2022-5-17 22:39:57 | 显示全部楼层
做一个多段线,然后获取多段线的长度,这种代码很容易获取。
发表于 2022-5-18 08:47:27 | 显示全部楼层
song宋_74729 发表于 2022-5-17 23:29
试试这个
(DEFUN C:ll ()
(SETVAR "CMDECHO" 0)

这个测量后的距离不是累加的。
发表于 2022-5-18 10:22:37 | 显示全部楼层
liufii 发表于 2022-5-18 08:47
这个测量后的距离不是累加的。

已修改累加
发表于 2022-5-18 11:30:13 | 显示全部楼层
本帖最后由 liufii 于 2022-5-18 11:32 编辑

多谢分享!

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

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

发表于 2022-5-18 13:53:37 | 显示全部楼层
多谢分享 学习了
 楼主| 发表于 2022-5-18 15:25:22 | 显示全部楼层
谢谢大家的帮助,自贡黄明儒侠的程序短小精悍,如果能留下路径虚线就更完美了

点评

(grdraw p2 p1 1 1)加在(setq p1 p2)之前就行。  发表于 2022-5-18 16:06
发表于 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)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 05:34 , Processed in 0.177483 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表