Hi all master , how to add a command can be invoked when other command is running not though type in "'cmd" .
In the following Example , it can be use like --->"MOVE"--->"'SS"..., but how can I use it like osnap command method --->"MOVE"--->"SS"
(defun SS_SS (/ ss1 i lst s1 layer_fili ss2 filiter pt)
;;layer-filter
(defun ss-sel-grread (/ is_go_on)
(setq is_go_on T)
(while (and
is_go_on
(setq pt (grread t 4 2))
(/= 3 (car pt))
(/= 25 (car pt))
)
(cond
((and (= 2 (car pt))
(eq (strcase (chr (cadr pt))) "N")
)
(prompt "Select Characteristic Objects :")
(setq ss1 (ssget))
(setq is_go_on nil)
)
(t
(if (= (car PT) 5)
(setq id_go_on nil)
)
)
)
)
)
(if ss-filiter-old-ss
(progn
(prompt "Existing layer filters, Need to be rebuilt please type N:")
(ss-sel-grread)
)
(progn
(prompt "Select Characteristic Objects :")
(setq ss1 (ssget))
)
)
(if ss1
(progn
(setq
i -1
lst nil
)
(while (setq s1 (ssname ss1 (setq i (1+ i))))
(setq lst (append lst (list (cdr (assoc 8 (entget s1))))))
)
(setq
layer_fili
(vl-string-right-trim
","
(apply (function strcat)
(mapcar (function (lambda (x) (strcat x ","))) lst)
)
)
filiter (list (cons 8 layer_fili))
ss-filiter-old-ss filiter
)
)
(setq filiter ss-filiter-old-ss)
)
(if filiter
(progn
(setq pt (cadr pt))
(if (and pt (listp pt))
(SendKeys (ss-pt->str pt))
)
(setq ss2 (ssget filiter))
)
(ss_ss)
)
(prompt
(strcat (rtos (sslength ss2) 2 0) " Objects are selected .")
)
ss2
)
(defun SendKeys (keys / ws)
;;Send keys to command-line
(setq ws (vlax-create-object "WScript.Shell"))
(vlax-invoke-method ws (quote sendkeys) keys)
(vlax-release-object ws)
(princ)
);_end SendKeys
(defun ss-pt->str (pts / str)
;;translate point into string for command-line
(if (numberp (car pts))
(progn
(setq str "")
(foreach a pts
(setq str (strcat str (strcat (rtos a 2 6) ",")))
)
(setq str (vl-string-right-trim "," str))
(strcat str " ")
)
(mapcar (function ss-pt->str) pts)
)
)
;;;ADD command ,which can be invoked when other command is running .
(vlax-add-cmd "SS" 'ss_ss "SS" 7)
;;;Use method in command-line , e.g.
;;; "MOVE" "'SS"
or this way will be better
(defun C:SS (/ ss1 i lst s1 layer_fili ss2 filiter pt)
;;layer-filter
(defun ss-sel-grread (/ is_go_on)
(setq is_go_on T)
(while (and
is_go_on
(setq pt (grread t 4 2))
(/= 3 (car pt))
(/= 25 (car pt))
)
(cond
((and (= 2 (car pt))
(eq (strcase (chr (cadr pt))) "N")
)
(prompt "Select Characteristic Objects :")
(setq ss1 (ssget))
(setq is_go_on nil)
)
(t
(if (= (car PT) 5)
(setq id_go_on nil)
)
)
)
)
)
(if ss-filiter-old-ss
(progn
(prompt "Existing layer filters, Need to be rebuilt please type N:")
(ss-sel-grread)
)
(progn
(prompt "Select Characteristic Objects :")
(setq ss1 (ssget))
)
)
(if ss1
(progn
(setq
i -1
lst nil
)
(while (setq s1 (ssname ss1 (setq i (1+ i))))
(setq lst (append lst (list (cdr (assoc 8 (entget s1))))))
)
(setq
layer_fili
(vl-string-right-trim
","
(apply (function strcat)
(mapcar (function (lambda (x) (strcat x ","))) lst)
)
)
filiter (list (cons 8 layer_fili))
ss-filiter-old-ss filiter
)
)
(setq filiter ss-filiter-old-ss)
)
(if filiter
(progn
(setq pt (cadr pt))
(if (and pt (listp pt))
(SendKeys (ss-pt->str pt))
)
(setq ss2 (ssget filiter))
)
(C:SS)
)
(prompt
(strcat (rtos (sslength ss2) 2 0) " Objects are selected .")
)
ss2
)