669423907 发表于 2018-7-17 10:40:47

bluefcc1 发表于 2018-7-15 21:50
(setq str "")
      (while loop
      (setq gr (grread t 15 0))


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

namezg 发表于 2018-7-17 13:21:39

是这个意思吗?

669423907 发表于 2018-7-17 15:21:25

namezg 发表于 2018-7-17 13:21
是这个意思吗?

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

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

669423907 发表于 2018-7-18 14:13:46

我这里测得小数点是46

669423907 发表于 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) ,输入值的时候出错,不知道是什么原因,谢谢

namezg 发表于 2018-7-26 15:54:40

本帖最后由 namezg 于 2018-7-26 15:57 编辑

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

669423907 发表于 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");水平
) )

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

669423907 发表于 2018-7-26 17:33:40

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

还是一样,当p1落在图元上的时候就不行,p1不在图元上就可以
页: 1 [2] 3
查看完整版本: 求助关于动态标注(grread)键盘输入值