龙龙仔 发表于 2004-10-1 08:00:00

<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT face="Times New Roman"><FONT size=3>;;我的</FONT></FONT>



<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>

alin 发表于 2004-10-1 08:59:00

Good stuff, but        the usage        is a bit complicated.

无痕 发表于 2004-10-1 13:03:00

因为vl不支持不定数的参数.所以只好这样.


也可以改为(x-cond-getpt '(doel dopt ...))


这样就有的像vb的函数

spring 发表于 2004-10-4 15:39:00

我回去写的(写了一个晚上了,惭愧)







我上说过要写一个函数 (函数 参数)来执行我要的功能,是因为我如果要执行选择功能的话


(initget "B")<BR>(setq p1 (ssget "\n请选择图元: / B: 输入字串 / &lt;ENTER结束命令&gt; "))


因为 ssget       函数不接受提示参数,所以就得自己写个函数拉.

龙龙仔 发表于 2004-10-4 16:21:00

(defun C:TT (/ PT)<BR>       (while (= PT NIL)<BR>                       (initget 128 "B")<BR>                       (setq<BR>                                       PT (getpoint "\n请选择图元: / B: 输入字串 / &lt;ENTER结束命令&gt; ")<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>

无痕 发表于 2004-10-4 16:24:00

所以说也不要再写什么函数了.


getpoint加上cond这个结构已经相当简洁了.而且cond的case情况很多,写函数未必都能满足使用需求.

spring 发表于 2004-10-4 16:47:00

本帖最后由 作者 于 2004-10-4 17:19:48 编辑 <br /><br /> 这样子是可以用



可是还要先拾取一点才选择图元


(defun c:aa ()<BR>(initget "S B")<BR>(setq<BR>       PT (getkword "\nS:选择图元: / B: 输入字串 ")<BR>)<BR>       )


那就和这个差不多拉

龙龙仔 发表于 2004-10-4 17:09:00

那个拾取点就是选择图元---再看清楚(只是它受抓取模式影嚮)

spring 发表于 2004-10-4 17:34:00

(command "_.SELECT" PT PAUSE)


我把这句改成 (command "_.SELECT" PT ) 就可以了,可是 PAUSE       是暂停以等待用户输入也没错啊.这是怎么回事呢.


你说(只是它受抓取模式影嚮)是不是她只能用框选,而不能栏选等了.这到无所谓多数都是用框选的.

龙龙仔 发表于 2004-10-5 08:10:00

<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">select指令的特性--只需一个pause,选完物件后命令才结束,程序中pt在au模式下所以pt=pause了
页: 1 [2]
查看完整版本: 用 LISP 如何做到像 AREA 命令的一样的提示呢?