samifox 发表于 2022-7-5 18:23:38

ssget函数的包装器

;; ssget-李Mac
;; ssget函数的包装器,允许使用自定义选择提示
;; 消息-选择提示
;; arg-ssget参数列表
 

(defun LM:ssget ( msg arg / sel )
   (princ msg)
   (setvar 'nomutt 1)
   (setq sel (vl-catch-all-apply 'ssget arg))
   (setvar 'nomutt 0)
   (if (not (vl-catch-all-error-p sel)) sel)
)


 
 
为什么ssget需要包装?

BlackBox 发表于 2022-7-5 18:47:11

 
这个“包装器”允许您快速提供自定义选择过滤器和用户提示,而无需在每个例程中重复代码;包装器只是一个子函数。
 
干杯
 
 
 
[编辑]-快速示例:
 

(defun c:SelectCircles (/ ss)
(if (setq ss (LM:ssget "\nSelect circles: " '(((0 . "CIRCLE")))))
   (prompt
   (strcat
       "\nYou selected "
       (itoa (setq ss (sslength ss)))
       " circle"
       (if (= 1 ss)
         ""
         "s "
       )
   )
   )
)
(prompt "\nNothing selected ")
(princ)
)

(defun c:SelectLines (/ ss)
(if (setq ss (LM:ssget "\nSelect lines: " '(((0 . "LINE")))))
   (prompt
   (strcat
       "\nYou selected "
       (itoa (setq ss (sslength ss)))
       " line"
       (if (= 1 ss)
         ""
         "s "
       )
   )
   )
)
(prompt "\nNothing selected ")
(princ)
)

Lee Mac 发表于 2022-7-5 19:20:25

 
因为标准AutoLISP函数不允许使用自定义选择提示,如代码标题中所述。

samifox 发表于 2022-7-5 19:31:22

我懂了。。。
 
1.试图了解诺穆特如何影响提示。。。但是,当塞纳里奥真的与众不同时,就不能真正上演一场塞纳里奥。
2.用简单的英语,这段代码实际上在说什么?
页: [1]
查看完整版本: ssget函数的包装器