bgator220 发表于 2022-7-6 10:23:38

过滤输出用户输入

你好
 
我是论坛新手。我正在尝试制作一个程序,帮助我从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")
         )
   )
)
)
 
谢谢
布瑞恩

JohnM 发表于 2022-7-6 10:30:50

查看带有单个选择和过滤器的ssget函数

BlackBox 发表于 2022-7-6 10:37:16

试试这个:
 

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

alanjt 发表于 2022-7-6 10:40:49

从我的工具箱里。。。
 
(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多段线线段、圆弧、椭圆、圆)。

David Bethel 发表于 2022-7-6 10:42:54

给猫剥皮有很多方法:
 
 

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

 
 
-大卫

BlackBox 发表于 2022-7-6 10:49:25

 
 
熟练使用OSNAP(5分!),我的朋友。我从未真正考虑过距离函数,因为该属性可用。
 
你知道它也来了,不是吗!?是的。。。。当之无愧:
 
http://3.bp.blogspot.com/_UKZle04oFnc/SFdGKUPYevI/AAAAAAAAAqw/FjFvQ5Jhf4Q/s400/dope%2Bexploding%2Bhead.jpg

alanjt 发表于 2022-7-6 10:54:06

哈哈,谢谢。真正的优势是“cen”的OSnap是对象过滤器,可以处理任何半径的对象。

BlackBox 发表于 2022-7-6 10:57:20

 
不客气。
 
真的,真的。很酷,艾伦。

David Bethel 发表于 2022-7-6 11:03:41

艾伦,
 
我认为,如果用户在选择过程中添加透明的OSNAP,则有可能返回错误的结果:
 
使用_end在洋红色线附近但不在弧上选择线红线。它说它有一个半径-大卫
测验图纸

alanjt 发表于 2022-7-6 11:08:25

是的,它确实有局限性。
页: [1] 2
查看完整版本: 过滤输出用户输入