<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><FONT face=Arial size=3>(defun C:TT (/ PT)<BR> (while (= PT NIL)<BR> (initget 128 "O A S")<BR> (setq PT (getpoint "\n第一个角点或 [对象(O)/加(A)/减(S)]: "))<BR> (cond<BR> ((equal 'list (type PT))<BR> (print PT)<BR> )<BR> ((equal "O" PT)<BR> (print PT)<BR> )<BR> ((equal "A" PT)<BR> (print PT)<BR> )<BR> ((equal "S" PT)<BR> (print PT)<BR> )<BR> ((and (/= PT NIL)<BR> (not (equal 'list (type PT)))<BR> (not (wcmatch PT "O A S"))<BR> )<BR> (setq PT NIL)<BR> (prompt "\n需要点或选项关键字。")<BR> )<BR> ((= PT NIL)<BR> (setq PT t)<BR> )<BR> )<BR> )<BR> (princ)<BR>)</FONT></FONT> Good stuff, but the usage is a bit complicated. 因为vl不支持不定数的参数.所以只好这样.
也可以改为(x-cond-getpt '(doel dopt ...))
这样就有的像vb的函数 我回去写的(写了一个晚上了,惭愧)
我上说过要写一个函数 (函数 参数)来执行我要的功能,是因为我如果要执行选择功能的话
(initget "B")<BR>(setq p1 (ssget "\n请选择图元: / B: 输入字串 / <ENTER结束命令> "))
因为 ssget 函数不接受提示参数,所以就得自己写个函数拉. (defun C:TT (/ PT)<BR> (while (= PT NIL)<BR> (initget 128 "B")<BR> (setq<BR> PT (getpoint "\n请选择图元: / B: 输入字串 / <ENTER结束命令> ")<BR> )<BR> (cond<BR> ((equal 'list (type PT))<BR> (command "_.SELECT" PT PAUSE)<BR> (ssget "P") ;ADD FILTER '((0 . "CIRCLE"))<BR> )<BR> ((equal "B" PT)<BR> (print PT)<BR> )<BR> ((and (/= PT NIL)<BR> (not (equal 'list (type PT)))<BR> (not (wcmatch PT "B"))<BR> )<BR> (setq PT NIL)<BR> (prompt "\n选择图元或选项关键字。")<BR> )<BR> ((= PT NIL)<BR> (setq PT t)<BR> )<BR> )<BR> )<BR> (princ)<BR>)<BR> 所以说也不要再写什么函数了.
getpoint加上cond这个结构已经相当简洁了.而且cond的case情况很多,写函数未必都能满足使用需求. 本帖最后由 作者 于 2004-10-4 17:19:48 编辑 <br /><br /> 这样子是可以用
可是还要先拾取一点才选择图元
(defun c:aa ()<BR>(initget "S B")<BR>(setq<BR> PT (getkword "\nS:选择图元: / B: 输入字串 ")<BR>)<BR> )
那就和这个差不多拉 那个拾取点就是选择图元---再看清楚(只是它受抓取模式影嚮) (command "_.SELECT" PT PAUSE)
我把这句改成 (command "_.SELECT" PT ) 就可以了,可是 PAUSE 是暂停以等待用户输入也没错啊.这是怎么回事呢.
你说(只是它受抓取模式影嚮)是不是她只能用框选,而不能栏选等了.这到无所谓多数都是用框选的. <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">select指令的特性--只需一个pause,选完物件后命令才结束,程序中pt在au模式下所以pt=pause了
页:
1
[2]