标高标注程序
求社区内的大侠们伸出援手,检查一下代码!自己编写的一段vlisp代码:
_$ _$ (setq h 1.25)
(setq h1 (* h 1.414213562))
(setq a1 (/ pi 4))
(setq p1 (polar p0 a1 h1))
(setq a2 (* 3 (/ pi 4)))
(setq p2 (polar p0 a2 h1))
运行结果如下:
nil
1.25
1.76777
0.785398
(325.683 66.1647 0.0)
2.35619
(323.183 66.1647 0.0)
_$
小弟不懂为何p1和p2的结果会一样?
这段代码只是程序(附件)的一段,目的是求出屏幕点处的标高,并写出来,可以调整字高。
如果感兴趣的话,可以帮忙优化下代码。
关闭捕捉模式就可以了
(defun c:tt (/ v1 v2 p0 p01 p1 p2 p3 p4 h h1 s a1 a2 a3 a4 alf)
(setq v1 (getvar "cmdecho")) ;获取当前普通命令提示信息状态
(setq v2 (getvar "blipmode")) ;获取当前光标标记状态
(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0) ;关闭普通命令提示信息
(setq p0 (getpoint "插入点: "))
(setq p01 (osnap p0 "nea")) ;捕捉最近的点
(setq h (getdist p0 "\n标高的字高<2.5>: "))
(if (not h)
(setq h 2.5)
) ;如果h无定义(空响应),令h=2.5
(setq h1 (* h 1.414213562))
(setq a1 (/ pi 4))
(setq p1 (polar p0 a1 h1))
(setq a2 (* 3 (/ pi 4)))
(setq p2 (polar p0 a2 h1))
(setq a3 0)
(setq p3 (polar p1 a3 (* 3.5 h)))
(setq a4 (* 0.5 pi))
(setq p4 (polar p1 a4 (* h 0.3)))
(setq s (rtos (cadr p0) 2 3)) ;获取p0y坐标,并保存为小数点后3位十进制数值
(setq alf 0)
(command "line" p1 p0 p2 p3 "")
(command "_text" "j" "bl" p4 h a1 s) ;l为左对齐
(setvar "cmdecho" v1) ;恢复普通命令提示信息原状态
(setvar "blipmode" v2) ;恢复光标标记原状态
(setvar "osmode" oldosmode)
(princ) ;静默退出
) 关闭了捕捉设置,那如何保证能够点取所需的点?谢谢回答问题 在取点之后再关闭捕捉设置 eii 发表于 2016-3-22 07:48
在取点之后再关闭捕捉设置
你好,前面那个问题解决了,不过出现一个新的问题,就是当选点y坐标本身是整数时,如12.0,程序输出的结果为‘12’,我想将结果按小数点后三位的格式输出,求解 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=107567 eii 发表于 2016-3-22 12:37 static/image/common/back.gif
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=107567
谢谢大侠,我的问题都解决了
页:
[1]