xkbuild 发表于 2024-3-31 13:52

CAD多线段(\曲线)标注指定点到起点距离(桩号)

几天前遇到了麻烦,需要在一条多线段上标注某点距离起点距离,在网上查了半天,找到了方法(部分代码来自网络,作者不详),可以测量距离,但是不能标注距离,之后进行了一下修改,可以实现标注。现在分享给大家。
1.加载lsp命令为appload
也可以添加到启动组,这样不用每次都需要加载,启动组—内容—找到.lsp文件。2.命令为zhbz,选择多线段(不能为封闭线段)—点击需要测量的位置—点击标注距离文字的位置,(注意,自己判断起点\终点,头尾可不一定哦,当然,你自己画的线就没问题了。)将以下代码复制到记事本,以【.lsp】为后缀命名,存储以ANSI编码形式,打开cad,【appload】加载,命令【zhbz】就可以查询并标注。(defun C:zhbz ( / &dis1 &k1 &n1 &p1 &ss1)
(if (null vlax-dump-object) (vl-load-com) )
(setq &ss1 '("LINE" "LWPOLYLINE" "CIRCLE" "ARC" "HELIX" "ELLIPSE" "SPLINE" "POLYLINE"))
;曲线有起点:直线,多段线,圆,圆弧,螺旋对象,椭圆,样条曲线,二维多段线
(if (and
(setq &k1 (entsel "\n请选择曲线"))
(setq &k1 (car &k1))
(member (cdr (assoc 0 (entget &k1))) &ss1);确认是曲线
(setq &p1 (getpoint "\n请选择指定点"))
(setq &p1 (vlax-curve-getclosestpointto &k1 &p1));取得最近点
(setq &n1 (vlax-curve-getParamAtPoint &k1 &p1));取得参数
(setq &dis1 (vlax-curve-getDistAtParam &k1 &n1));到起点距离
    (setq b (rtos &dis1 2 2));将数据结果由实数转换成字符串,且设置为两个精度,即小数点后两位
(setq a (getpoint "\n屏幕单击插入点"));指定插入点
(entmake (list '(0 . "text")          ;建立文字图元属性列表,文字,插入点,内容,字高
                  (cons 10 a)         
                  (cons 11 a)
                  (cons 1 b)
                  '(40 . 15);字高
         )
)
)
(princ (strcat "\n指定点到起点距离为" (rtos &dis1)));命令行显示
)
(princ)
);复制到记事本,以【.lsp】为后缀命名,存储以ANSI编码形式,打开cad,【appload】加载,命令【zhbz】就可以查询并标注,by xkbuild,更多搜索 xkbuild

xkbuild 发表于 2024-4-2 15:21

深爱我的女孩 发表于 2024-4-2 15:14
有效果,感觉和PU命令清理差不多,(我不懂代码,但实测确实有效)!谢谢楼主

这一段代码不是我的!我只是搬运来的,应该感谢作者!

xkbuild 发表于 2024-4-2 15:01

本帖最后由 xkbuild 于 2024-4-2 15:08 编辑

深爱我的女孩 发表于 2024-3-31 17:20
首先感谢楼主分享插件,其次,想问下同道中人有没有办法或者什么命令来处理图纸本身体积大小的解决方法,比 ...
;打开超大图纸,将此文件直接拖入cad即可。
(setvar "cmdecho" 0)
(dictremove (namedobjdict) "ACAD_DGNLINESTYLECOMP")
(command "_purge" "b" "" "n")
(command "_purge" "de" "" "n")
(command "_purge" "d" "" "n")
(command "_purge" "g" "" "n")
(command "_purge" "la" "" "n")
(command "_purge" "lt" "" "n")
(command "_purge" "ma" "" "n")
(command "_purge" "mu" "" "n")
(command "_purge" "p" "" "n")
(command "_purge" "sh" "" "n")
(command "_purge" "st" "" "n")
(command "_purge" "m" "" "n")
(command "_purge" "se" "" "n")
(command "_purge" "t" "" "n")
(command "_purge" "v" "" "n")
(command "_purge" "r" "" "n")
(command "-SCALELISTEDIT" "r" "y" "e")
(setvar "cmdecho" 1)
(princ)

以上存入记事本,扩展名为lsp,存储以ANSI编码形式,之后把lsp文件直接拖入cad,快速清理超大图纸DGN

深爱我的女孩 发表于 2024-3-31 17:20

首先感谢楼主分享插件,其次,想问下同道中人有没有办法或者什么命令来处理图纸本身体积大小的解决方法,比如设计院发来的图纸打开太大,用什么命令可以保存之后体积变小!

小能维尼 发表于 2024-3-31 18:44

本帖最后由 小能维尼 于 2024-3-31 18:49 编辑

我估计你和我一样,找到别人代码,然后改一下就行了
代码确实是一模一样

不过我修改后,是设置桩号,例如:K0+000
根据用户所选点,标记线段距离的桩号

jori 发表于 2024-3-31 18:52

这类小而精巧的CAD实用功能收藏

泡菜久坛 发表于 2024-3-31 19:04

这个很实用,前段时间量样条曲线中间某点到起点距离就只能修剪后测总长,比较麻烦

hjsen 发表于 2024-3-31 19:11

caojian1624 发表于 2024-4-1 07:53

谢谢分享

xkbuild 发表于 2024-4-1 08:28

小能维尼 发表于 2024-3-31 18:44
我估计你和我一样,找到别人代码,然后改一下就行了
代码确实是一模一样



如果有好的代码,分项一下!{:1_893:}

xkbuild 发表于 2024-4-1 08:30

小能维尼 发表于 2024-3-31 18:44
我估计你和我一样,找到别人代码,然后改一下就行了
代码确实是一模一样



cAD统计线段交点数量lsp!这个你可以办到么?如果有代码,可否分项下!万分感谢

jjTest007 发表于 2024-4-1 09:12

ACAD内任何从曲线派生下来的对象都可以用使用参数的概念来表示曲线上的一个点,像楼主这段代码就可以让用户选取两次点,用vlax-curve-getParamAtPoint来分别获取两个点的参数值,传入vlax-curve-getDistAtParam来获取两点间距离,这样就不用管起点终点位置了
页: [1] 2
查看完整版本: CAD多线段(\曲线)标注指定点到起点距离(桩号)