明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 669423907

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

  [复制链接]
 楼主| 发表于 2018-7-17 10:40:47 | 显示全部楼层
bluefcc1 发表于 2018-7-15 21:50
(setq str "")
      (while loop
        (setq gr (grread t 15 0))

首先非常感谢你,可以输入数值了,但是输入的数值没有传递给 _dimlinear 啊
回复

使用道具 举报

发表于 2018-7-17 13:21:39 | 显示全部楼层
是这个意思吗?

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2018-7-17 15:21:25 | 显示全部楼层
namezg 发表于 2018-7-17 13:21
是这个意思吗?

就是这样的效果啊,namezg大师共享一下改好的源码咯
回复

使用道具 举报

 楼主| 发表于 2018-7-17 16:06:30 | 显示全部楼层
更新一下,提高了方向的准确率,同时非常期待大师们放码
(defun c:13(/ oc ss jd ro) ;动态标注
(if (not o)(setq o (getpoint"\n请指标注起点:")))
(setq os (getvar "osmode")) ;记录捕捉
(setvar'osmode 0) ;关闭捕捉
(setq oc(cadr(grread 3))) ;光标位置

(pmdj) ;屏幕左上j、右下jj两对角点
(while (< (distance o oc)(*(distance j jj)0.005))
(setq oc(cadr(grread 3))) ;光标位置
(pmdj))

(setq jd (/(* (angle o oc) 180) pi)) ;两点与X轴的角度
(setq dx 14)
(if (or (<= 45 jd 135) (<= 225 jd 315))
(command"dimlinear"o o "v" o"")(command"dimlinear"o o o"")
)
(setq ss(ssadd) ss(ssadd(entlast)ss))
(setvar'osmode os) ;恢复捕捉模式
(ydd ss)(setq dx nil)
(if (= sc 1)(ydd ss)(command "_.erase" ss ""))
(setq o nil dj nil sc nil oo nil ss nil)
(princ))

;屏幕左上j、右下jj两对角点 (hbllw 2010-11-6)
(defun pmdj(/ j1 j2 j3 j4 j5 j6 j7) ;(pmdj)
(setq
j1 (getvar "screensize")
j2 (getvar "viewsize")
j3 (/ j2 2)
j4 (getvar "viewctr")
j5 (/ (car j1) (cadr j1))
j6 (* j5 j2)
j7 (/ j6 2)
j  (polar (polar j4 pi j7)(* 0.5 pi) j3) ;左上角
jj (polar (polar j4 0 j7)(* 1.5 pi) j3) ;右下角
) (princ))
回复

使用道具 举报

 楼主| 发表于 2018-7-18 14:13:46 | 显示全部楼层
我这里测得小数点是46
回复

使用道具 举报

 楼主| 发表于 2018-7-26 15:21:50 | 显示全部楼层
namezg 发表于 2018-7-13 22:55
根据你最新的代码,全面改写了你的代码,修改了很多地方,重点是不仅支持输入数字和小数点还支持退格键,好像论 ...

(defun c:66(/ p1 p2 ss) ;标线性、φ、M
(if (setq p1 (getpoint "\n请指标注起点:"))
(progn
(setvar'dimpost".") ;标注无前后缀
(command "dimlinear" "non" p1 "non" p1 (pdjd) fx "non" p1)
(ydd (entlast) 14 o)
(setq ss(ssadd)ss(ssadd(entlast)ss)ss(cdr(assoc 42(entget(ssname ss 0)) )) ) ;获取标注值
(setq p2(osnap(cadr (grread 3))"nea") )
(command "_.erase" (entlast) "")
(if (and (nentselp p1)(nentselp p2))
(progn
(command "dimpost" "%%C<>" "dimlinear" "non" p1 "non" p2 fx p1)
(princ(strcat"\n右键改为 M"(rtos ss)) )
(if (ydd (entlast) 10 o) (command "u" 1 "dimpost" "M<>" "dimlinear" "non" p1 "non" p2 fx (cadr (grread 3))) )
)
(progn
(command "u" 1)
(if (ydd (entlast) 10 o) (command "_.erase" (entlast) "") )
)
)
) )
(setvar'dimpost".") ;标注无前后缀
(princ))


namezg 在麻烦帮看看,在调用(ydd (entlast) 14 o) 和 (ydd (entlast) 10 o) ,输入值的时候出错,不知道是什么原因,谢谢

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2018-7-26 15:54:40 | 显示全部楼层
本帖最后由 namezg 于 2018-7-26 15:57 编辑

(pdjd)函数在哪,o应该是p1吧  fx没定义值啊
回复

使用道具 举报

 楼主| 发表于 2018-7-26 16:07:32 | 显示全部楼层
namezg 发表于 2018-7-26 15:54
(pdjd)函数在哪,o应该是p1吧  fx没定义值啊

有的
(defun pdjd(/ o1 o2 jd);(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");水平
) )
回复

使用道具 举报

发表于 2018-7-26 16:51: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 ss p2) ;标线性、φ、M
        (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)
                                ss (cdr (assoc 42 (entget (ssname ss 0))))
                        )
                        (setq p2(osnap (cadr (grread 3)) "nea"))
                        (command "_.erase" (entlast) "")
                        (if (and (nentselp p1)(nentselp p2))
                                (progn
                                        (command "dimpost" "%%C<>" "dimlinear" "non" p1 "non" p2 fx p1)
                                        (princ (strcat "\n右键改为 M" (rtos ss)))
                                        (if (ydd (entlast) 10 p1)
                                                (command "u" 1 "dimpost" "M<>" "dimlinear" "non" p1 "non" p2 fx (cadr (grread 3)))
                                        )
                                )
                                (progn
                                        (command "u" 1)
                                        (if (ydd (entlast) 10 p1)
                                                (command "_.erase" (entlast) "")
                                        )
                                )
                        )
                )
        )
        (setvar 'dimpost".");标注无前后缀
        (princ)
)
回复

使用道具 举报

 楼主| 发表于 2018-7-26 17:33:40 | 显示全部楼层
namezg 发表于 2018-7-26 16:51
;没仔细看,随便改了一下,你看看结果是你想要的不?
(defun pdjd (/ o1 o2 lst jd fx);(pdjd);判断角度
...

还是一样,当p1落在图元上的时候就不行,p1不在图元上就可以
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 18:39 , Processed in 0.172955 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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