wedg 发表于 2005-5-25 20:56:00

[求助]各位大虾,帮忙修改这个小程序,急用阿!

现在我使用的这个程序,用的时候感觉有点缺陷,请各位大虾帮忙修改一下,急用!程序如下:


(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、设置成公顷:其标注的面积单位为平方米,希望改为以公顷为单位。其实就是设置小数点的位置,和保留的小数点后的位数。

linyiwq 发表于 2005-5-26 10:40:00

问题一:


(COMMAND "TEXT" 参数1 参数2 参数3 参数4 参数5)


参数1为文本的对齐方式,例如:"m"中心对齐


参数2为点坐标


参数3为字高例如:12.5


参数4为转角,例如:0


参数5为文本内容,例如:"AUTOCAD"


所有参数均可使用变量.

wedg 发表于 2005-5-26 12:44:00

这是问题一的修改方法,那请问问题二怎么添加?

xqyhome 发表于 2005-5-26 13:48:00

(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>

wedg 发表于 2005-5-26 22:32:00

非常感谢楼上的兄弟帮我修改,可能我没有说清我的意思,所以在运行楼上兄弟的程序时,还是感到有点小问题。


1、我希望程序能够连续运行。比如:我在量取三块面积的时候,只需要输入一次程序命令即可。不用量取三块面积,要输入三次命令。


2、我希望输入的字高是一次性的。比如在量取三块面积时,命令程序输入后,运行的一开始就设定好字高,这样就不用每次都输入字高。


3、面积为公顷。楼上的兄弟编写的程序,是单位为公顷。其实我的意思不是说后面带有的单位为公顷,我的意思是:假设我们在屏幕上任意画一个封闭图形(长宽均为1000,我是假设输入长宽值均为1000米),用area命令直接量取的值是,面积 = 1000000.0000,周长 = 5380.7402,而现在我只需要用这个面积的值/10000(1公顷=10000平方米),即运行命令后,出现的值为100即可,不用后面带有公顷的字样。


我不知道表达清楚我的意思没有,但是我很感谢楼上的兄弟。请各位大虾还是帮我改改好吗?非常、非常的感谢!

xyp1964 发表于 2005-5-26 23:20:00

(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)
)

wedg 发表于 2005-5-29 02:10:00

楼上的兄弟,已经差不多是这个意思了,但是,为什么不可以设置字高呢?

xqyhome 发表于 2005-5-29 08:05:00

(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>

wedg 发表于 2005-5-29 19:03:00

非常感谢楼上的兄弟,真的很感谢!


但是还有一个小小的问题,就是为什么没次我标注完面积后,我的对象捕捉都没有了?能不能实现,我运行完程序后,恢复我原来设置的对象捕捉?(我原来设置的osmode=63)

xqyhome 发表于 2005-5-30 19:33:00

........................................................................


(command "erase" e "")<BR>


)


(SETvar "OSMODE"       63)


(PRINC)


)
页: [1] 2
查看完整版本: [求助]各位大虾,帮忙修改这个小程序,急用阿!