| 
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册 
    
   
 
  ;;;=============================================================
;;;可定义提示、关键字的SSGET                                        
;;;(xdrx_InitSSGet prompt1 kword kwordCallback OtherCallback prompt2)                
;;;输入:                                                        
;;;        <prompt1>                                                
;;;        选择提示字符串。                                                
;;;        <kword>                                                        
;;;        关键字.ARX选择关键字定义和一般的关键字有所不同,下划线前
;;;        定义的是关键字下划线后定义的是输入关键字后返回的字符串。
;;;        <kwordCallback>                                                
;;;        回调函数字符串,如何不指定,选择关键字后将中断选择直接返
;;;        回关键字字符串。                                        
;;;        <OtherCallback>                                                
;;;        过滤表,与SSGET相同                
;;;     <prompt2> 移除提示字符串
;;;说明:                                                         
;;;        所有参数均为可选,但如果指定关键字就必须指定提示字符串. 
;;;     选择集使用完,要使用ssFree(由于我没定义储存列队,记得使 
;;;        用完选择集后用ssfree释放选择集,否则超过128个选择集后将 
;;;     无法创建)。                                                
;;;输出:                                                        
;;;        如何成功返回选择集或定义的关键字字符串,否则返回nil.        
;;;-------------------------------------------------------------
;;;示例:                                                        
;;;        命令:(xdrx_ssget)                                                
;;;             选择对象:                                                
;;;                                                             
;;;        命令:(xdrx_ssget "我喜欢的:")                                
;;;                 我喜欢的:                                                
;;;                                                                
;;;        命令:(xdrx_ssget "[是(Y)否(N)]:" "Yes No _ Yes No")        
;;;          [是(Y)否(N)]:Y "Yes"                                
;;;=============================================================
(defun c:test (/ kwordCallback OtherCallback ss)
  (defun kwordCallback (Kword /)                                ;SSGET选择关键字回调函数
    (princ (strcat "\n选择了关键字: " kword))
    (cond
      ( (= kword "Xcircle")
        (ssget "x" '((0 . "CIRCLE")))
      )
      ( (= kword "Xline")
        (ssget "x" '((0 . "LINE")))
      )
      (T (princ "\n错误的关键字。"))
    )
  )
  (defun OtherCallback (Kword /)                                ;SSGET选择关键字回调函数
    (princ (strcat "\n选择了非关键字: " kword))
    kword
  )
  (vl-acad-defun 'kwordCallback)                                ;让lisp函数能被arx调用
  (vl-acad-defun 'OtherCallback)                                ;让lisp函数能被arx调用
  (xdrx_initssget  "选择对象或[全部圆(XC)/所有直线(XL)]: "                ;选择时的提示
                  "XC XL _ Xcircle Xline"                                ;关键字        
              "kwordCallback"                                        ;关键字回调函数名
              "OtherCallback"                                        ;非关键字回调函数名
              ""
  )                                        
  (setq        ss (xdrx_ssget  '((0 . "LINE"))))                        ;开始自定义关键字选择.
  (if ss
    (progn
      (cond
        ((= (type ss) 'STR)
           (princ "\n输入了关键字:")
           (princ ss)
        )
        ((= (type ss) 'PICKSET)
         (princ "\n创建了选择集.")
         (xdrx_ssFree ss)                                                ;释放选择集
        )
      )
    )
  )                
  (princ)
)
 
 |