[求助]各位大虾,帮忙修改这个小程序,急用阿!
现在我使用的这个程序,用的时候感觉有点缺陷,请各位大虾帮忙修改一下,急用!程序如下:(DEFUN C:QA(/ OLDOS PT STA QAREA)
(setq olderr *error*)<BR> (setq *error* myerr)<BR> (SETVAR "CMDECHO" 0)<BR> (SETQ OLDOS (GETVAR "OSMODE"))<BR> (SETVAR "OSMODE" 0)
(SETQ PT (GETPOINT"\nPick the point:"))<BR> (SETQ STA (BPOLY PT))<BR> (IF (= STA NIL) (EXIT)) <BR> (COMMAND "AREA" "E" "L")<BR> (SETQ QAREA (RTOS (GETVAR "AREA") 2 2))<BR> (COMMAND "TEXT" PT "" "" QAREA)
(SETVAR "OSMODE" OLDOS)<BR> (SETVAR "CMDECHO" 1)<BR> (setq *error* olderr)<BR> (PRINC)<BR>)
这是个标注面积的小程序,大家能否改正其中的两个缺陷:
1、设置字高:在使用的时候无法设成自己想要的字高
2、设置成公顷:其标注的面积单位为平方米,希望改为以公顷为单位。其实就是设置小数点的位置,和保留的小数点后的位数。 问题一:
(COMMAND "TEXT" 参数1 参数2 参数3 参数4 参数5)
参数1为文本的对齐方式,例如:"m"中心对齐
参数2为点坐标
参数3为字高例如:12.5
参数4为转角,例如:0
参数5为文本内容,例如:"AUTOCAD"
所有参数均可使用变量. 这是问题一的修改方法,那请问问题二怎么添加? (DEFUN C:QA(/ OLDOS PT STA QAREA)
(setq olderr *error*)<BR> (setq *error* myerr)<BR> (SETvar "CMDECHO" 0)<BR> (SETQ OLDOS (GETvar "OSMODE"))<BR> (SETvar "OSMODE" 0)<BR> (SETQ PT (GETPOINT"\nPick the point:"))<BR> (SETQ STA (BPOLY PT))<BR> (IF (= STA NIL) (EXIT)) <BR> (COMMAND "AREA" "E" "L")<BR> (SETQ QAREA (GETvar "AREA"))<BR> (SETQ QAREA (/ (FIX (+ QAREA 0.5)) 100.0))<BR> (SETQ QAREA (STRCAT (RTOS QAREA 2 2) "公顷"))<BR> ( SETQ ZG (GETREAL "请输入字高: "))<BR> (COMMAND "TEXT" PT ZG "0" QAREA )<BR> (SETvar "OSMODE" OLDOS)<BR> (SETvar "CMDECHO" 1)<BR> (setq *error* olderr)<BR> (PRINC)<BR>)<BR> 非常感谢楼上的兄弟帮我修改,可能我没有说清我的意思,所以在运行楼上兄弟的程序时,还是感到有点小问题。
1、我希望程序能够连续运行。比如:我在量取三块面积的时候,只需要输入一次程序命令即可。不用量取三块面积,要输入三次命令。
2、我希望输入的字高是一次性的。比如在量取三块面积时,命令程序输入后,运行的一开始就设定好字高,这样就不用每次都输入字高。
3、面积为公顷。楼上的兄弟编写的程序,是单位为公顷。其实我的意思不是说后面带有的单位为公顷,我的意思是:假设我们在屏幕上任意画一个封闭图形(长宽均为1000,我是假设输入长宽值均为1000米),用area命令直接量取的值是,面积 = 1000000.0000,周长 = 5380.7402,而现在我只需要用这个面积的值/10000(1公顷=10000平方米),即运行命令后,出现的值为100即可,不用后面带有公顷的字样。
我不知道表达清楚我的意思没有,但是我很感谢楼上的兄弟。请各位大虾还是帮我改改好吗?非常、非常的感谢! (DEFUN C:test (/ OLDOS PT STA QAREA)
(SETvar "OSMODE" 0)
(while (SETQ PT (GETPOINT "\nPick the point:"))
(setq STA (BPOLY PT)
e (entlast)
)
(IF(= STA NIL)
(EXIT)
)
(COMMAND "AREA" "E" "L")
(SETQ QAREA (RTOS (/(GETvar "AREA")10000) 2 3))
(COMMAND "TEXT" "j" "mc" PT "" "" QAREA)
(command "erase" e "")
)
(PRINC)
) 楼上的兄弟,已经差不多是这个意思了,但是,为什么不可以设置字高呢? (DEFUN C:test (/ OLDOS PT STA QAREA)<BR> (SETvar "OSMODE" 0)
( SETQ ZG (GETREAL "请输入字高: "))
(while (SETQ PT (GETPOINT "\nPick the point:"))<BR> (setq STA (BPOLY PT)<BR> e (entlast)<BR> )<BR> (IF (= STA NIL)<BR> (EXIT)<BR> )<BR> (COMMAND "AREA" "E" "L")<BR> (SETQ QAREA (RTOS (/(GETvar "AREA")10000) 2 3))<BR> ;(COMMAND "TEXT" "j" "mc" PT "" "" QAREA)
(COMMAND "TEXT" PT ZG "0" QAREA )
(command "erase" e "")<BR> )<BR> (PRINC)<BR>)<BR> 非常感谢楼上的兄弟,真的很感谢!
但是还有一个小小的问题,就是为什么没次我标注完面积后,我的对象捕捉都没有了?能不能实现,我运行完程序后,恢复我原来设置的对象捕捉?(我原来设置的osmode=63) ........................................................................
(command "erase" e "")<BR>
)
(SETvar "OSMODE" 63)
(PRINC)
)
页:
[1]
2