mandala 发表于 2011-1-17 22:51:47

如何判断一个command 执行的结果是否正确?

本帖最后由 mandala 于 2011-1-17 22:56 编辑

菜鸟问题。比如有这么一个lisp,点中区域内求区域面积:


(defun c:MJ (/ A P P1 cmd )
(princ "\n")
(setq A 0 )
(setq cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq p1 (getpoint "\n选择闭合区域内任意一点"))
(command "_.boundary" p1 "" )
(command "_.pedit" "L" "w" "1" "")
(command "chprop" "L" "" "C" "100" "")
(princ "\n此绿色区域即为你选中的封闭区域。请按回车键继续…… ")
(command pause)
(command "._area" "_O" "L")
(setq A (getvar "area"))
(setq A1(/ A 4))
(princ "\n该区域面积 = ")(princ A)(princ "\n如果当前比例尺为1:500,那么实际面积= ")(princ A1)
(command "erase" "L" "")
(setvar "cmdecho" cmd)
(princ)
)
问题是(command "_.boundary" p1 "" ) 这一句未必能正确执行,假如没找到有效的图案填充边界,那么接下来最后的erase就会删掉l程序执行前画的最后一个物体。怎么解决这个问题啊?

ZZXXQQ 发表于 2011-1-17 23:07:07

在执行(command "_.boundary" p1 "" )前先
(setq s1 (entlast))
执行后再(setq s2 (entlast))
判断这两个实体是否同名……

mandala 发表于 2011-1-18 14:01:42

对哦!哈哈版主真聪明……

jackynine 发表于 2011-1-19 11:51:07

刚注册,,来灌水
(defun c:MJ (/ os A P P1 s1 s2)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq A 0 )
(setq p1 (getpoint "\n选择闭合区域内任意一点"))
(setq s1 (entlast))
(command "_.boundary" p1 "" )
(setq s2 (entlast))
(if (equal s1 s2)
    (progn
   (princ "\n这不是一个闭合区域,程序退出")
    )
    (progn
   (command "_.pedit" s2 "w" "1" "")
   (command "chprop" s2 "" "C" "100" "")
   (princ "\n此绿色区域即为你选中的闭合区域。请按回车键继续…… ")
   (command pause)
   (command "._area" "_O" s2)
   (setq A (getvar "area"))
   (setq A1(/ A 4))
   (prompt "该区域面积 = ")(princ A)(prompt"")(prompt "如果当前比例尺为1:500,那么实际面积= ")(princ A1)
   (command "erase" s2 "")
    )
)
(setvar "osmode" os)(princ))

Nico 发表于 2013-1-13 08:47:43

太有才了我顶
页: [1]
查看完整版本: 如何判断一个command 执行的结果是否正确?