过滤输出用户输入
你好我是论坛新手。我正在尝试制作一个程序,帮助我从autocad文件中编写g代码。我很快就学会了lisp,只需将不同的代码片段拼凑在一起,然后根据我的具体需要进行定制。我有一个功能有问题,我希望有人会知道答案。
我有代码告诉我这个对象是否是一个圆弧,但发现用户输入的不是一个对象(比如仅仅点击一个点),然后代码就搞糟了。有什么办法可以防止吗?我在考虑initget,但它只适用于get命令吗?
(defun g79fun ( )
(setq codeuse 1)
(while(= codeuse 1)
(setq ent (entsel "\nSelect the Arc: "))
(setq lstent (entget (car ent)))
(initget + 1)
(if (= "ARC" (cdr (assoc 0 lstent)))(progn
(setq radius (cdr (assoc 10 lstent)))
(setq codeuse nil)
)(progn
(princ "\nNot an Arc or Circle. ")
(princ "idiot")
)
)
)
)
谢谢
布瑞恩 查看带有单个选择和过滤器的ssget函数 试试这个:
(defun c:FOO(/ eName eList)
(if (and (setq eName (car (entsel "\n>>Select an Arc or Ciricle: ")))
(wcmatch (cdr (assoc 0 (setq eList (entget eName)))) "ARC,CIRCLE"))
(prompt
(strcat
"\n>>Radius = "
(rtos (cdr (assoc 40 eList)) 2 2)))
(prompt "\n<!>Invalid Object<!> "))
(princ))
从我的工具箱里。。。
(defun c:Rad (/ ent cen)
;; Check radius of selected arc segment
;; Alan J. Thompson, 05.17.10
(if (setq ent (nentsel "\nSelect arc segment: "))
(if (setq cen (osnap (cadr ent) "_cen"))
(alert (strcat "Radius: " (rtos (distance (osnap (cadr ent) "_near") cen))))
(alert "Segment not an arc!")
)
)
(princ)
)
适用于具有半径的任何对象(LW多段线线段、圆弧、椭圆、圆)。 给猫剥皮有很多方法:
(defun c:getarc (/ ss en ed ce ra)
(while (or (not ss)
(/= (sslength ss) 1))
(princ "\nSelect 1 ARC")
(setq ss (ssget (list (cons 0 "ARC")))))
(setq en (ssname ss 0)
ed (entget en)
ce (cdr (assoc 10 ed))
ra (cdr (assoc 40 ed)))
(prin1))
-大卫
熟练使用OSNAP(5分!),我的朋友。我从未真正考虑过距离函数,因为该属性可用。
你知道它也来了,不是吗!?是的。。。。当之无愧:
http://3.bp.blogspot.com/_UKZle04oFnc/SFdGKUPYevI/AAAAAAAAAqw/FjFvQ5Jhf4Q/s400/dope%2Bexploding%2Bhead.jpg 哈哈,谢谢。真正的优势是“cen”的OSnap是对象过滤器,可以处理任何半径的对象。
不客气。
真的,真的。很酷,艾伦。 艾伦,
我认为,如果用户在选择过程中添加透明的OSNAP,则有可能返回错误的结果:
使用_end在洋红色线附近但不在弧上选择线红线。它说它有一个半径-大卫
测验图纸
是的,它确实有局限性。
页:
[1]
2