eachy 发表于 2013-8-18 12:04:29

XDRX_SSGET 异常 0817版本

命令: (xdrx_ssget "\nSelect Circle: " '((0 . "circle")))
; 错误: ADS 请求错误

Windows 7 32bit + Autocad 2014

XDSoft 发表于 2013-8-18 16:35:03

这个函数还要改写,所以手册没公布,感觉现在的用法不太符合习惯,我把现在的用法贴出来,你试试感觉舒服不。


(defun c:test (/ kwordCallback OtherCallback ss)
(defun kwordCallback (Kword /)       ; 关键字回调函数
    (princ (strcat "\n选择了关键字: " kword))
    (cond
      ((= kword "XCircle")
        (ssget "x" '((0 . "CIRCLE")))
      )
      ((= kword "XLine")
        (ssget "x" '((0 . "LINE")))
      )
      (T
        (princ "\n错误的关键字。")
      )
    )
)
(defun OtherCallback (Kword /)       ; 非关键字回调函数
    (princ (strcat "\n选择了非关键字: " kword))
    kword
)
(vl-acad-defun 'kwordCallback)       ; 让lisp函数能被arx调用
(vl-acad-defun 'OtherCallback)       ; 让lisp函数能被arx调用
(sssetfirst nil nil)
(xdrx_initGet "选择对象或[全部圆(XC)/所有直线(XL)]: "        ; 选择时的提示
                "XCircle XLine_XCircle XLine" ; 关键字
                "kwordCallback"             ; 关键字回调函数名
                "OtherCallback"             ; 非关键字回调函数名
                "移除物体: "             ; 移除选择时的提示
)
(setq ss (xdrx_SSGet))             ; 开始自定义关键字选择.
(cond
    ((= (type ss) 'STR)
      (princ (strcat "\n你输入了关键字: " ss))
    )
    ((= (type ss) 'PICKSET)
      (princ "\n你的选择集是:")
      (princ ss)
      (princ ", 选择集中图元个数是: ")
      (princ (sslength ss))
      (sssetfirst ss ss)
      (xdrx_ssFree ss)                     ; 释放选择集
    )
)
(princ)
)

eachy 发表于 2013-8-18 17:52:12

XDSoft 发表于 2013-8-18 16:35
这个函数还要改写,所以手册没公布,感觉现在的用法不太符合习惯,我把现在的用法贴出来,你试试感觉舒服不 ...
这个关键字在Getxxx类中经常用到,Ssget 的缺陷就是要配合变量才能自定义提示,至于使用关键字的情况,习惯上是先行 getkword,然后 ssget 仅完成过滤选择,把关键字直接加到 ssget 上有个习惯问题,要好好斟酌,如果这个改了,xdrx_entsel 也可以把关键字加上

XDSoft 发表于 2013-8-18 17:58:12

eachy 发表于 2013-8-18 17:52
这个关键字在Getxxx类中经常用到,Ssget 的缺陷就是要配合变量才能自定义提示,至于使用关键字的情况,习 ...

现在的用法是提示字符,关键字,关键字回调处理函数都在 xdrx_initget 里面定义,你可以多运行下上面的程序,看看习惯不。

eachy 发表于 2013-8-18 18:03:45

肯定要一个过程,alisp的就是返回string,根据这个条件直接写后面的处理代码,arx要写成callback,得改变一下

liuyj 发表于 2013-8-18 18:04:46

天正TS的做法是:无需设定关键字,在使用ssget函数前,先用函数对键盘输入进行监控,ssget后返回按键的代码,如代码的值等于某指定值,就可以执行特定的函数。如果没有键盘输入,不影响ssget的执行。是否可以借鉴一下?

Free-Lancer 发表于 2013-8-18 18:13:57

liuyj 发表于 2013-8-18 18:04
天正TS的做法是:无需设定关键字,在使用ssget函数前,先用函数对键盘输入进行监控,ssget后返回按键的代码 ...

这个还是 Initget + Getkword 符合 alisp 的多年习惯

newer 发表于 2013-8-18 18:34:21

liuyj 发表于 2013-8-18 18:04
天正TS的做法是:无需设定关键字,在使用ssget函数前,先用函数对键盘输入进行监控,ssget后返回按键的代码 ...

天正TS 相关函数是什么? ssget前,用什么函数设置的关键字?

liuyj 发表于 2013-8-18 19:04:33

说错了,还得设关键字。
(princ "\nS-设置 / D-单选 / 选择管线:")
(_lxa_ "S" " " "D" " ")
(setq lnss (ssget filter)
      tfk(_sort1_)
)
(or lnss tfk)
)

Free-Lancer 发表于 2013-8-18 19:07:53

liuyj 发表于 2013-8-18 19:04
说错了,还得设关键字。
(princ "\nS-设置 / D-单选 / 选择管线:")
(_lxa_ "S" " " "D" " ")


关键字肯定要设,关键是这个 ssget 是仅返回个字符还是去调用函数

newer 发表于 2013-8-18 19:17:28

Free-Lancer 发表于 2013-8-18 19:07
关键字肯定要设,关键是这个 ssget 是仅返回个字符还是去调用函数

看了下

天正TS是用 tfk(_sort1_)   

紧接着ssget的 sort1函数获得键盘输入,ssget时候,如果按键有在上面设置的立面的,ssget自动退出,返回nil

这样好吗,ssget里面也没法设置提示串。

lizhaojun45 发表于 2021-11-6 19:07:47

XDSoft 发表于 2013-8-18 16:35
这个函数还要改写,所以手册没公布,感觉现在的用法不太符合习惯,我把现在的用法贴出来,你试试感觉舒服不 ...

xdrx_ssget 这个函数,对象被多次选择对象时,不能自动去重,例如,统计对象的总长,共4条对象,我2次框选这4个对象时,统计出来的总长,就是实际值的 2 倍。用了快2年才发现的 BUG。
页: [1]
查看完整版本: XDRX_SSGET 异常 0817版本