明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1013|回复: 9

[已解答] 讨教--循环判断问题

[复制链接]
发表于 2015-11-20 14:13:36 | 显示全部楼层 |阅读模式
下面这段代码直接加while语句循环之后,就无法判断点a是否为空。
请教如何能做到循环判断,到“选择实体”这里如果为空就退出

(defun c:BT()
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
  (if (not (tblsearch "layer" "dim"))
    (command "layer" "new" "dim" "C" 3 "dim" "L" "Continuous" "dim" "LW" 0.15 "dim" "")
  )
(setvar "osmode" 183)
;;;====================================================================(想从这里开始循环)
(setq a (getpoint "\n-->请指定标注的第一点:\n>>>或回车<选择实体>:"))
    (if (/= a nil)
      (progn
        (setq b (getpoint "\n-->请指定标注的第二点:"))
        (command "dimlinear" a b pause)
        (setq en (entlast))
        (command "_.chprop" en "" "LA" "DIM" "")
       )
      (progn
        (setq s1 (entsel "\n选择实体<退出>: "))
        (command "dimlinear" "" s1 pause)
        (setq en (entlast))
        (command "_.chprop" en "" "LA" "DIM" "")
       )
     )
;;;====================================================================(循环结束)
  (setvar "osmode" os)
  (setvar "cmdecho" 1)
  (princ)
);defun




该贴已经同步到 冒个烟圈的微博
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-11-20 14:54:39 | 显示全部楼层
把 :(setq s1 (entsel "\n选择实体<退出>: "))

改成:
(while (null s1)
                      (setq s1 (entsel "\n选择实体<退出>: "))
              )

 楼主| 发表于 2015-11-20 16:12:16 | 显示全部楼层
bori 发表于 2015-11-20 14:54
把 :(setq s1 (entsel "\n选择实体: "))

改成:

试过了,还是不行啊。。
发表于 2015-11-20 16:36:32 | 显示全部楼层
冒个烟圈 发表于 2015-11-20 16:12
试过了,还是不行啊。。

是不是这个意思:
  1.   (while (null a)
  2. (setq a (getpoint "\n-->请指定标注的第一点:\n>>>或回车<选择实体>:"))
  3.     (if (/= a nil)
  4.       (progn
  5.         (setq b (getpoint "\n-->请指定标注的第二点:"))
  6.         (command "dimlinear" a b pause)
  7.         (setq en (entlast))
  8.         (command "_.chprop" en "" "LA" "DIM" "")
  9.         (setq a nil)         ;;a清空
  10.        )
  11.       (progn

发表于 2015-11-20 18:42:56 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-11-20 19:05 编辑

  1. (defun c:BT(/ a b os)
  2.   (setvar "cmdecho" 0)
  3.   (setq os (getvar "osmode"))
  4.   (if(not(tblsearch "layer" "dim"))(command "layer" "new" "dim" "C" 3 "dim" "L" "Continuous" "dim" "LW" 0.15 "dim" ""))
  5.   (setvar "osmode" 183)
  6.   (while(if(setq a(getpoint "\n-->请指定标注的第一点:\n>>>或回车<选择实体>:"))
  7.           (if(setq b(getpoint "\n-->请指定标注的第二点:"))
  8.             (setq a(command "dimlinear" a b pause)a t))
  9.           (if(setq a(entsel "\n选择实体<退出>: "))
  10.             (setq a(command "dimlinear" "" a pause)a t)))
  11.     (command "_.chprop" (entlast) "" "LA" "DIM" ""))
  12.   (setvar "osmode"os)
  13.   (setvar "cmdecho" 1)
  14.   (princ))

 楼主| 发表于 2015-11-20 19:26:58 | 显示全部楼层
llsheng_73 发表于 2015-11-20 18:42

多谢长老出手,终于可以了,
但是这句:(if(setq a(entsel "\n选择实体<退出>: "))运行的时候不能选多义线(如:矩形)
我知道是程序本身的问题,请问有什么好办法能能像CAD自带的“DIMLINEAR”命令一样,能选到多义线吗?
发表于 2015-11-20 19:47:53 | 显示全部楼层
冒个烟圈 发表于 2015-11-20 19:26
多谢长老出手,终于可以了,
但是这句:(if(setq a(entsel "\n选择实体: "))运行的时候不能选多义线(如 ...

对这个命令不清楚,没用过,选择是可以选择到,运行到它的时候会怎么样我不清楚了
 楼主| 发表于 2015-11-20 19:52:08 | 显示全部楼层
llsheng_73 发表于 2015-11-20 19:47
对这个命令不清楚,没用过,选择是可以选择到,运行到它的时候会怎么样我不清楚了

运行到这儿的时候提示如下
:选择实体<退出>:
所选对象不是直线、圆弧或圆。
然后直接跳到“选择标注对象:
未选择对象。”
 楼主| 发表于 2015-11-20 20:03:30 | 显示全部楼层
llsheng_73 发表于 2015-11-20 19:47
对这个命令不清楚,没用过,选择是可以选择到,运行到它的时候会怎么样我不清楚了

再请教下:在保持程序功能不改变的情况下,这一句:(if(setq a(entsel "\n选择实体: "))能否取消。
如果能取消,该如何衔接上下语句?
发表于 2015-11-20 23:51:23 | 显示全部楼层
本帖最后由 llsheng_73 于 2015-11-20 23:53 编辑
冒个烟圈 发表于 2015-11-20 20:03
再请教下:在保持程序功能不改变的情况下,这一句:(if(setq a(entsel "\n选择实体: "))能否取消。
如果 ...

不能去掉。。。我运行了一下,选择多段线的时候它会说不是直线,圆,弧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-16 04:17 , Processed in 0.187609 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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