明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1817|回复: 8

看看这个程序为何运行完,会多一个空白提示行?

[复制链接]
发表于 2003-5-2 19:49:00 | 显示全部楼层 |阅读模式
如果没有第二行(command)则程序运行完,会出行一条空白的提示行
此程序启动后,只要选取两个圆就能显示这两个圆的中心距及最小边距
(defun c:cd1 (/ st a b len a1 a2 a3 b1 b2 b3 dis fi dis1)  
   ;(COMMAND)
   (setvar "cmdecho" 0)
   (princ "\nSelect two circle or arc...")
   (setq st  (ssget '(( 0 . "CIRCLE,ARC")))
         len (sslength st)
         a   (CDR (assoc 0 (entget (ssname st 0))))
         b   (CDR (assoc 0 (entget (ssname st 1))))
   )
   (if (AND (= len 2) (OR (= a "ARC")(= A "CIRCLE")) (OR (= B "ARC")(= B "CIRCLE")))
       (PROGN
           (SETQ A1 (ENTGET (SSNAME ST 0))
                 A2 (CDR (ASSOC 40 A1))
                 A3 (CDR (ASSOC 10 A1))
                 
                 B1 (ENTGET (SSNAME ST 1))
                 B2 (CDR (ASSOC 40 B1))
                 B3 (CDR (ASSOC 10 B1))
              )
         
            (SETQ DIS  (DISTANCE A3 B3)
                  FI   (+ A2 B2)
                  DIS1 (- DIS FI)
                  )
         
          (if (<= dis1 0)             
              (setq dis1 (- (max a2 b2) (+ dis (min a2 b2))))
            )
         
         (setq  DIS1 (RTOS (ABS DIS1)) dis (rtos dis)
             )
         
          
          (PRINC (STRCAT "\nThe nearest distance = " DIS1  "   The center distance = " dis ))
          (princ)
         );end progn
     
        (progn       
        (PRINC (STRCAT "\n*** Invalid Objects ***"))
        (princ)
        )
     );end if
  )
发表于 2003-5-5 13:42:00 | 显示全部楼层

没有问题啊

如下,有问题吗?

命令: cd1

Select two circle or arc...
选择对象: 找到 1 个

选择对象: 找到 1 个,总计 2 个

选择对象:

The nearest distance = 10.6558   The center distance = 25.6516

命令:
 楼主| 发表于 2003-5-5 22:41:00 | 显示全部楼层

我的运行结果是这样的

将源程序运行后得出的结果如下:
The nearest distance = 12.048   The center distance = 16.607
command:
command:

但是如果去掉(command)这一句前面的;号的话,则不会多出一条命令行
The nearest distance = 12.048   The center distance = 16.607
command:
但是程序一运行就会出现一条*Cancel*这样的语句
麻烦大家分析一下原因
发表于 2003-5-5 23:47:00 | 显示全部楼层

确实有空白提示行问题,简化一下,请明经出招。

(defun c:Test ()
  (princ "\nTest")
  (princ)
)
------------------------
命令: test
Test
命令消灭这一行)
发表于 2003-5-6 08:06:00 | 显示全部楼层

沒有..

(defun C:CD1 (/ ST A B LEN A1 A2 A3 B1 B2 B3 DIS FI DIS1)
  (setvar "cmdecho" 0)
  (prompt "Select two circle or arc...")
  (setq        ST  (ssget '((0 . "CIRCLE,ARC")))
        LEN (sslength ST)
        A   (cdr (assoc 0 (entget (ssname ST 0))))
        B   (cdr (assoc 0 (entget (ssname ST 1))))
  )
  (if (and (= LEN 2)
           (or (= A "ARC") (= A "CIRCLE"))
           (or (= B "ARC") (= B "CIRCLE"))
      )
    (progn
      (setq A1 (entget (ssname ST 0))
            A2 (cdr (assoc 40 A1))
            A3 (cdr (assoc 10 A1))

            B1 (entget (ssname ST 1))
            B2 (cdr (assoc 40 B1))
            B3 (cdr (assoc 10 B1))
      )

      (setq DIS         (distance A3 B3)
            FI         (+ A2 B2)
            DIS1 (- DIS FI)
      )

      (if (<= DIS1 0)
        (setq DIS1 (- (max A2 B2) (+ DIS (min A2 B2))))
      )

      (setq DIS1 (rtos (abs DIS1))
            DIS         (rtos DIS)
      )
      (prompt (strcat "\nThe nearest distance = "
                      DIS1
                      "   The center distance = "
                      DIS
              )
      )
    )                                        ;end progn
    (princ (strcat "\n*** Invalid Objects ***"))
  )                                        ;end if
  (princ)
)
(princ)
发表于 2003-5-6 10:36:00 | 显示全部楼层

有...

发表于 2003-5-7 12:47:00 | 显示全部楼层

发现问题,但还解决不了问题

只要程序中有(command)函数存在,则不会多出一行,但如果没有该函数存在,则这一行就消不掉。
发表于 2003-5-7 16:44:00 | 显示全部楼层

那就這樣改...

(defun C:CD1 (/ ST A B LEN A1 A2 A3 B1 B2 B3 DIS FI DIS1)
  (setvar "cmdecho" 0)
  (command "_.select" "")
  (prompt "Select two circle or arc...")
  (setq        ST  (ssget '((0 . "CIRCLE,ARC")))
   ...........
   ...........
 楼主| 发表于 2003-5-7 21:40:00 | 显示全部楼层

能解释一下为何会多出一行空白命令行来吗?

能解释一下为何会多出一行空白命令行来吗?
是程序结构的问题还是AutoCAD自身的BUG,或是盗版软件的问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 11:32 , Processed in 0.196148 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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