明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: 669423907

[提问] 求助关于动态标注(grread)键盘输入值

  [复制链接]
发表于 2018-7-27 08:53 | 显示全部楼层
本帖最后由 namezg 于 2018-7-27 09:00 编辑

;找到问题了,再试试
(defun pdjd (/ o1 o2 lst jd fx);(pdjd);判断角度
        (setq o1(cadr(grread 3))
                 o2(cadr(grread 3))
        );光标位置
        (setq lst (view-ucs-box));屏幕左上、右下两对角点UCS
        (while (<(distance o1 o2)(*(distance(car lst)(cadr lst))0.008))
                (setq o2 (cadr (grread 3)));光标位置
                (setq lst (view-ucs-box))
        )
        (setq jd (/(*(angle o1 o2)180)pi));两点与X轴的角度
        (if (or (<= 45 jd 135) (<= 225 jd 315))
                (setq fx "V");垂直
                (setq fx "H");水平
        )
)
(defun c:66(/ p1 fx ss txt p2 p3) ;标线性、φ、M
        (setvar "cmdecho" 0)
        (if (setq p1 (getpoint "\n请指标注起点:"))
                (progn
                        (setvar 'dimpost".");标注无前后缀
                        (command "dimlinear" "non" p1 "non" p1 (setq fx (pdjd)) "non" p1)
                        (ydd (entlast) 14 p1)
                        (setq ss (ssadd)
                                ss (ssadd (entlast) ss)
                                txt (cdr (assoc 42 (entget (ssname ss 0))))
                        )
                        (setq p2 (cadr (grread 3)))
                        (command "_.erase" (entlast) "")
                        (if (and (nentselp p1)(nentselp p2))
                                (progn
                                        (setq p2 (osnap p2 "nea"))
                                        (command "dimpost" "%%C<>" "dimlinear" "non" p1 "non" p2 fx "non" p1)
                                        (princ (strcat "\n右键改为 M" (rtos txt 2 (getvar "dimdec"))))
                                        (if (ydd (entlast) 10 p1)
                                                (command "u" 1 "dimpost" "M<>" "dimlinear" "non" p1 "non" p2 fx "non" (cadr (grread 3)))
                                        )
                                )
                                (progn
                                        (command "u" 1)
                                        (if (ydd (entlast) 10 p1)
                                                (command "_.erase" (entlast) "")
                                        )
                                )
                        )
                )
        )
        (setvar 'dimpost".");标注无前后缀
        (setvar "cmdecho" 1)
        (princ)
)

评分

参与人数 1明经币 +1 收起 理由
669423907 + 1 很给力!谢谢

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2018-7-27 10:25 | 显示全部楼层
namezg 发表于 2018-7-27 08:53
;找到问题了,再试试
(defun pdjd (/ o1 o2 lst jd fx);(pdjd);判断角度
        (setq o1(cadr(grread 3 ...

效果很好啊,非常感谢namezg大师,请问是改了哪里呢?
回复

使用道具 举报

发表于 2018-7-27 11:32 | 显示全部楼层
;重新对代码进行了大量改动,应该比原来的好。

(defun pdjd (/ o1 o2 lst jd fx);(pdjd);判断角度
        (setq o1(cadr(grread 3))
                  o2(cadr(grread 3))
        );光标位置
        (setq lst (view-ucs-box));屏幕左上、右下两对角点UCS
        (while (<(distance o1 o2)(*(distance(car lst)(cadr lst))0.008))
                (setq o2 (cadr (grread 3)));光标位置
                (setq lst (view-ucs-box))
        )
        (setq jd (/(*(angle o1 o2)180)pi));两点与X轴的角度
        (if (or (<= 45 jd 135) (<= 225 jd 315))
                (setq fx "V");垂直
                (setq fx "H");水平
        )
)
(defun c:66(/ p1 fx en dxf txt p2) ;标线性、φ、M
        (setvar "cmdecho" 0)
        (if (setq p1 (getpoint "\n请指标注起点:"))
                (progn
                        (setvar "dimpost" ".");标注无前后缀
                        (command "dimlinear" "non" p1 "non" p1 (setq fx (pdjd)) "non" p1)
                        (ydd (entlast) 14 p1)
                        (setq dxf (entget (setq en (entlast))))
                        (entdel en);(command "_.erase" en "")
                        (setq p2 (cadr (grread 3)))
                        (if (and (nentselp p1)(nentselp p2))
                                (progn
                                        (setq en (entmakex dxf))
                                        ;方法1(文字替代)
                                        ;(command "dimedit" "n" "%%c<>" en "");可代替上面一行
                                        ;方法2(加前缀)
                                        (setvar "dimpost" "%%c<>")
                                        (command "dimstyle" "apply" en "")
                                        (princ "\n当前前缀为%%c,右键可将前缀改为M。")
                                        (if (ydd en 10 p1)
                                                (progn
                                                        ;方法1(文字替代)
                                                        ;(command "dimedit" "n" "M<>" en "");可代替上面一行
                                                        ;方法2(加前缀)
                                                        (setvar "dimpost" "M<>")
                                                        (command "dimstyle" "apply" en "")
                                                )
                                        )
                                )
                                (progn
                                        (setq en (entmakex dxf))
                                        (if (ydd en 10 p1)
                                                (entdel en);(command "_.erase" en "")
                                        )
                                )
                        )
                )
        )
        (setvar "dimpost" ".");标注无前后缀
        (setvar "cmdecho" 1)
        (princ)
)

点评

非常感谢namezg大师优化  发表于 2018-7-27 11:39
回复

使用道具 举报

 楼主| 发表于 2018-7-27 11:57 | 显示全部楼层
namezg 发表于 2018-7-27 11:32
;重新对代码进行了大量改动,应该比原来的好。

(defun pdjd (/ o1 o2 lst jd fx);(pdjd);判断角度

最后改的有些问题:如果第二点没有落在图元上,标注的字体会变小了







本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2018-7-27 12:25 | 显示全部楼层
你把
(setq dxf (entget (setq en (entlast)))
改为
(setq dxf (entget (setq en (entlast)) '("*")))
试试
回复

使用道具 举报

发表于 2018-7-27 12:41 | 显示全部楼层
如果不行,你发一个你的dwg文件上来。
回复

使用道具 举报

 楼主| 发表于 2018-7-27 13:42 | 显示全部楼层
namezg 发表于 2018-7-27 12:25
你把
(setq dxf (entget (setq en (entlast)))
改为

可以咯,谢谢谢谢
回复

使用道具 举报

发表于 2018-7-27 14:26 | 显示全部楼层
本帖最后由 namezg 于 2018-7-27 14:41 编辑

;再来一个版本,用命令oops

(defun pdjd (/ o1 o2 lst jd fx);(pdjd);判断角度
        (setq o1(cadr(grread 3))
                  o2(cadr(grread 3))
        );光标位置
        (setq lst (view-ucs-box));屏幕左上、右下两对角点UCS
        (while (<(distance o1 o2)(*(distance(car lst)(cadr lst))0.008))
                (setq o2 (cadr (grread 3)));光标位置
                (setq lst (view-ucs-box))
        )
        (setq jd (/(*(angle o1 o2)180)pi));两点与X轴的角度
        (if (or (<= 45 jd 135) (<= 225 jd 315))
                (setq fx "V");垂直
                (setq fx "H");水平
        )
)

;动态线性标注,两点均在对象上时自动加前缀%%c、M
(defun c:66(/ p1 fx en  txt p2)
        (setvar "cmdecho" 0)
        (if (setq p1 (getpoint "\n请指标注起点:"))
                (progn
                        (setvar "dimpost" ".");标注无前后缀
                        (command "dimlinear" "non" p1 "non" p1 (setq fx (pdjd)) "non" p1)
                        (ydd (entlast) 14 p1)
                        (command "_.erase" en "")
                        (setq p2 (cadr (grread 3)))
                        (if (and (nentselp p1)(nentselp p2))
                                (progn
                                        (command "oops")
                                        ;方法1(文字替代)
                                        ;(command "dimedit" "n" "%%c<>" en "");可代替上面一行
                                        ;方法2(加前缀)
                                        (setvar "dimpost" "%%c<>")
                                        (command "dimstyle" "apply" en "")
                                        (princ "\n当前前缀为%%c,右键可将前缀改为M。")
                                        (if (ydd en 10 p1)
                                                (progn
                                                        ;方法1(文字替代)
                                                        ;(command "dimedit" "n" "M<>" en "");可代替上面一行
                                                        ;方法2(加前缀)
                                                        (setvar "dimpost" "M<>")
                                                        (command "dimstyle" "apply" en "")
                                                )
                                        )
                                )
                                (progn
                                        (command "oops")
                                        (if (ydd en 10 p1)
                                                (command "_.erase" en "")
                                        )
                                )
                        )
                )
        )
        (setvar "dimpost" ".");标注无前后缀
        (setvar "cmdecho" 1)
        (princ)
)
回复

使用道具 举报

发表于 2018-7-27 17:25 | 显示全部楼层
能定字高更好
回复

使用道具 举报

发表于 2018-8-5 22:19 | 显示全部楼层
怎么没有演示的GIF呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 18:38 , Processed in 0.894408 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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