clh521 发表于 2009-6-12 12:04:00

[求助]如何双击一个块,就执行一个指定的lisp程序?

<p>比如,我双击一个“图框”的块,就运行一个我自已编的用来打印的lisp程序:dy.lsp</p>

masterlong 发表于 2009-6-15 03:33:00

<p>根据以前论坛一个帖子改的<br/>有自己的注释<br/>改一下就可以满足你的要求<br/></p><p>(defun c:sw()<br/>&nbsp;(load "双击测试.lsp")<br/>(princ)<br/>)</p><p>(defun jb:LoadDoublClickReactor (/)<br/>&nbsp;(vl-load-com)<br/>&nbsp;;0语句功能注释:::创建鼠标双击反应器<br/>&nbsp;(if (/= (type jbDoubleClickReactor) 'VLR-Mouse-Reactor)<br/>&nbsp;&nbsp;(setq jbDoubleClickReactor&nbsp; (VLR-Mouse-Reactor nil '((:VLR-beginDoubleClick . jb:beginDoubleClick))))<br/>&nbsp;&nbsp;vlr-editor-reactor<br/>&nbsp;)<br/>&nbsp;;0语句功能注释:::测试反应器是否已激活<br/>&nbsp;(if (not (vlr-added-p jbDoubleClickReactor))<br/>&nbsp;&nbsp;(vlr-add jbDoubleClickReactor)<br/>&nbsp;)<br/>&nbsp;;0语句功能注释:::卸载acdblclkedit.arx<br/>&nbsp;(if (member "acdblclkedit.arx" (arx)) (arxunload "acdblclkedit.arx" nil))<br/>(princ)<br/>)</p><p>(defun jb:beginDoubleClick ( reactorObject Listofsomething / point obj owner ownerobj command-list cmd gripset)&nbsp;;;(princ "\n双击响应\n")<br/>&nbsp;(if (vl-catch-all-error-p (vl-catch-all-apply 'trans (list (car Listofsomething) 0 1)))<br/>&nbsp;&nbsp;(princ "PaperSpace")<br/>&nbsp;&nbsp;(progn<br/>&nbsp;&nbsp;&nbsp;(setq cmd "_.PROPERTIES" ; command default<br/>&nbsp;&nbsp;&nbsp;&nbsp;point Listofsomething<br/>&nbsp;&nbsp;&nbsp;&nbsp;obj (car (nentselp (trans (car point) 0 1)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;owner (car (cadddr (nentselp (trans (car point) 0 1))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;gripset (cadr (ssgetfirst))<br/>&nbsp;&nbsp;&nbsp;&nbsp;doc (vlax-get (vlax-get-acad-object) "activedocument")<br/>&nbsp;&nbsp;&nbsp;)</p><p>&nbsp;&nbsp;&nbsp;(if obj<br/>&nbsp;&nbsp;&nbsp;&nbsp;(progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(owner (setq ownerobj (strcase (vlax-get (vlax-ename-&gt;vla-object owner) "objectname"))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( T (setq ownerobj (strcase (vlax-get (vlax-ename-&gt;vla-object obj) "objectname"))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0《《这里是被我替换修改部分的位置》》<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;1我的修改,便于修改设置<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq command-list (get-com-list))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(foreach x command-list<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if (= (car x) ownerobj)(setq cmd(cdr x)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;;2这个位置我要进行替换,加入图块内容识别,重点在“3”<br/>&nbsp;&nbsp;;|<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (= cmd "_.REFEDIT") (princ "1图块&nbsp; ") (setq cmd "_.refedit (princ (cdr (nentselp (trans(car point)0 1)))) ") )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (= cmd "_.ATTEDIT") (princ "2属性块") (setq cmd "_.attedit (princ obj) ") )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( (= cmd "_.EATTEDIT")(princ "3属性块") (setq cmd "_.eattedit (princ obj) ") )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( T (setq cmd(strcat cmd " ")))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;|;<br/>&nbsp;&nbsp;;0000我想直接用command函数,不能用<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;(vla-sendcommand doc cmd)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>;3以下是我替换的内容<br/>(cond<br/>;0----0----0图块或属性块,均经过识别后再分配新的程序<br/>&nbsp;( (or (= cmd "_.REFEDIT")(= cmd "_.EATTEDIT")) (属性块识别) )<br/>;4以下内容可用,主要用途在于:当选择图块或属性块的非属性部分时,调用“参照编辑程序”。<br/>;4屏蔽的原因是,根据图块名称选择相应的程序。若开启这部分程序,需特殊处理的属性块必须选属性图元,不能选其它图元。<br/>;|<br/>&nbsp;<font color="#ff0000">( (= cmd "_.REFEDIT")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;;楼主需要改的就是这段代码<br/>&nbsp;&nbsp;;;(princ "1图块&nbsp; ") <br/>&nbsp;&nbsp;;;(setq cmd "_.refedit (princ (cdr (nentselp (trans(car point)0 1)))) ") <br/>&nbsp;&nbsp;(setq cmd "_.refedit ")<br/>&nbsp;&nbsp;(vla-sendcommand doc cmd) <br/>&nbsp;)<br/></font>|;<br/>;|&nbsp; 不调用这个命令<br/>&nbsp;( (= cmd "_.ATTEDIT") <br/>&nbsp;&nbsp;(princ "2属性块") <br/>&nbsp;&nbsp;(setq cmd "_.attedit (princ obj) ")<br/>&nbsp;&nbsp;(vla-sendcommand doc cmd) <br/>&nbsp;)<br/>|;<br/>&nbsp;( (= cmd "_.EATTEDIT")(属性块识别))&nbsp;&nbsp;;3替换的就是这一句<br/>;4上一句不替换情况下的程序段<br/>;|<br/>&nbsp;( (= cmd "_.EATTEDIT")<br/>&nbsp;&nbsp;;;(setq&nbsp;cmd "_.eattedit (princ obj) ")<br/>&nbsp;&nbsp;(setq&nbsp;cmd "_.eattedit ")<br/>&nbsp;&nbsp;(vla-sendcommand doc cmd)<br/>&nbsp;)<br/>|;<br/>&nbsp;( T (setq cmd (strcat cmd " ")) (vla-sendcommand doc cmd) )<br/>)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;)<br/>&nbsp;)<br/>(princ)<br/>)</p><p>;0----0----0<br/>;1属性块识别将生成一个全局参数,用来给属性块相应程序调用<br/>;2该全局参数格式 ( 图元名 . 选取点 )<br/>;3图元名是主图元<br/>(defun 属性块识别( / a loop b b0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;(princ "\n--属性块识别--\n")<br/>&nbsp;;;(setq&nbsp;cmd "_.eattedit ")(vla-sendcommand doc cmd);;<br/>&nbsp;(cond<br/>&nbsp;&nbsp;;9999 owner为T时,代表主图元<br/>&nbsp;&nbsp;( owner (setq ##双击图块## (cons owner point)) )<br/>&nbsp;&nbsp;;9999 owner为nil时,需要另外获取主图元<br/>&nbsp;&nbsp;( T <br/>&nbsp;&nbsp;&nbsp;(setq b obj)<br/>&nbsp;&nbsp;&nbsp;(setq loop T)<br/>&nbsp;&nbsp;&nbsp;(while loop<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq b (entnext b))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq c (entget b))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq c0 (cdr (assoc 0 c)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(if (= c0 "SEQEND")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq cf2 (cdr (assoc -2 c)) loop Nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;(setq ##双击图块## (cons cf2 point))<br/>&nbsp;&nbsp;)<br/>&nbsp;)<br/>&nbsp;(princ "\n")(princ (setq blkname (cdr (assoc 2 (entget (car ##双击图块##))))))(princ "\n")<br/>&nbsp;(cond<br/>&nbsp;&nbsp;( (wcmatch blkname "QGY_TK-*")<br/>&nbsp;&nbsp;&nbsp;(princ "轻工院图框....启动图框编辑器....")(princ "\n")<br/>&nbsp;&nbsp;&nbsp;(redraw (car ##双击图块##) 4)<br/>&nbsp;&nbsp;&nbsp;(setq ##QGYTK_obj## ##双击图块##)&nbsp;&nbsp;;;临时设置<br/>&nbsp;&nbsp;&nbsp;(vla-sendcommand doc "##vf ")<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;;;( () () )<br/>&nbsp;&nbsp;;;( () () )<br/>&nbsp;&nbsp;( T <br/>&nbsp;&nbsp;&nbsp;(setq ##双击图块## Nil)<br/>&nbsp;&nbsp;&nbsp;(cond<br/>&nbsp;&nbsp;&nbsp;&nbsp;( (= cmd "_.REFEDIT" )(setq cmd "_.refedit ")&nbsp; (vla-sendcommand doc cmd) )<br/>&nbsp;&nbsp;&nbsp;&nbsp;( (= cmd "_.EATTEDIT")(setq cmd "_.eattedit ") (vla-sendcommand doc cmd) )<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;)<br/>&nbsp;)<br/>&nbsp;;;(princ "主图元=")(princ ##双击图块##)<br/>(princ)<br/>)</p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p></p><p><br/>;3我的修改<br/>(defun get-com-list(/ infile infp inf)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;(princ "\n--get-com-list--\n")<br/>&nbsp;(setq infile&nbsp; (open "D:\\@@_new_lisp\\双击设置.no" "r") )<br/>&nbsp;(setq infp '() )<br/>&nbsp;(while (setq inf (read-line infile) )<br/>&nbsp;&nbsp;(setq inf (read inf) )<br/>&nbsp;&nbsp;(setq infp (cons inf infp) )<br/>&nbsp;)<br/>&nbsp;(close infile)<br/>&nbsp;(reverse infp)<br/>)<br/>;4我的修改<br/>;|<br/>双击设置.no&nbsp; 为文本文件<br/>放于CAD主程序根目录<br/>文件格式如下<br/>("ACDBBLOCKREFERENCE" . "_.REFEDIT")&nbsp; 图块<br/>("ACDBATTRIBUTE" . "_.ATTEDIT")&nbsp;&nbsp; 块属性<br/>|;</p><p>;0被我修改替换掉的部分<br/>;|&nbsp;&nbsp;<br/>&nbsp;&nbsp;(setq command-list<br/>&nbsp;&nbsp;&nbsp;(list <br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBBLOCKREFERENCE" "_.REFEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBATTRIBUTE" "_.ATTEDIT")&nbsp;&nbsp;&nbsp;;;调用这个命令比较好,EATTEDIT<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBMTEXT" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBTEXT" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBROTATEDDIMENSION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBALIGNEDDIMENSION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBORDINATEDIMENSION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBDIAMETRICDIMENSION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBRADIALDIMENSION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDB2LINEANGULARDIMENSION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBMLINE" "_.MLEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBATTRIBUTEDEFINITION" "_.DDEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBHATCH" "_.HATCHEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "ACDBRASTERIMAGE" "_.IMAGEADJUST")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBWALL" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBDOOR" "_.PROPERTYDATAEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBWINDOW" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBWINDOWASSEMBLY" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBCURTAINWALLLAYOUT" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBSPACE" "_.PROPERTYDATAEDIT")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBSTAIR" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBRAILING" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBMVBLOCKREF" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBOPENING" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBCEILINGGRID" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBCOLUMNGRID" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBSLAB" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECSDBMEMBER" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBMASSELEM" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBROOF" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBROOFSLAB" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBCAMERA" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;&nbsp;(cons "AECDBSCHEDULETABLE" "_.PROPERTIES")<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;)<br/>|;</p><p>;;(progn (jb:LoadDoublClickReactor) (princ))<br/></p><p>;;;;;--------------------------------------------------------<br/>;;;双击设置.no<br/>("ACDBBLOCKREFERENCE" . "_.REFEDIT")<br/>("ACDBATTRIBUTE" . "_.EATTEDIT")<br/>("ACDBMTEXT" . "_.DDEDIT")<br/>("ACDBTEXT" . "_.DDEDIT")<br/>("ACDBROTATEDDIMENSION" . "_.DDEDIT")<br/>("ACDBALIGNEDDIMENSION" . "_.DDEDIT")<br/>("ACDBORDINATEDIMENSION" . "_.DDEDIT")<br/>("ACDBDIAMETRICDIMENSION" . "_.DDEDIT")<br/>("ACDBRADIALDIMENSION" . "_.DDEDIT")<br/>("ACDB2LINEANGULARDIMENSION" . "_.DDEDIT")<br/>("ACDBMLINE" . "_.MLEDIT")<br/>("ACDBATTRIBUTEDEFINITION" . "_.DDEDIT")<br/>("ACDBHATCH" . "_.HATCHEDIT")<br/>("ACDBRASTERIMAGE" . "_.IMAGEADJUST")<br/>("AECDBWALL" . "_.PROPERTIES")<br/>("AECDBDOOR" . "_.PROPERTYDATAEDIT")<br/>("AECDBWINDOW" . "_.PROPERTIES")<br/>("AECDBWINDOWASSEMBLY" . "_.PROPERTIES")<br/>("AECDBCURTAINWALLLAYOUT" . "_.PROPERTIES")<br/>("AECDBSPACE" . "_.PROPERTYDATAEDIT")<br/>("AECDBSTAIR" . "_.PROPERTIES")<br/>("AECDBRAILING" . "_.PROPERTIES")<br/>("AECDBMVBLOCKREF" . "_.PROPERTIES")<br/>("AECDBOPENING" . "_.PROPERTIES")<br/>("AECDBCEILINGGRID" . "_.PROPERTIES")<br/>("AECDBCOLUMNGRID" . "_.PROPERTIES")<br/>("AECDBSLAB" . "_.PROPERTIES")<br/>("AECSDBMEMBER" . "_.PROPERTIES")<br/>("AECDBMASSELEM" . "_.PROPERTIES")<br/>("AECDBROOF" . "_.PROPERTIES")<br/>("AECDBROOFSLAB" . "_.PROPERTIES")<br/>("AECDBCAMERA" . "_.PROPERTIES")</p><p></p>

clh521 发表于 2009-6-15 19:15:00

具体怎么改?能不能帮忙改下,反应器我一不懂啊

masterlong 发表于 2009-6-15 21:00:00

<p>修改的部分不涉及反应器的知识</p><p>提取出图块名后判别是否图框块</p><p>是的话再判别块是否斜角度</p><p>否的话提取块的包围盒两对角坐标和比例</p><p>其余的就是打印设置的问题了</p><p>自己先研究下吧</p><p>实在不行再帮你改好了</p>

hb_xiaofen 发表于 2009-6-16 22:40:00

回复一下保存下来有时间学学

h008 发表于 2011-7-4 16:35:02

好好学习下!

宏远电脑学校 发表于 2011-9-29 23:54:16

CAD2008打开“工具”“自定义”“界面”里面有双击块设置,默认是宏,你设成LISP函数名就行了,比如:定义(defun c:test(),就填上test就行了,记得加载LISP程序哦。

mmh1 发表于 2011-10-2 15:00:45

只听说反应器,还没涉及!观望学习下

我爱lisp 发表于 2014-9-26 15:22:06

(vl-load-com)
(if (not (tblsearch "layer" "HATCH"))
(command "-layer" "m"        "HATCH"        "c" "254" "" "l" "continuous" "" "")
)                                        ;加载图层HATCH
(if (not *dblclkReactor*)
(setq        *dblclkReactor*
       (VLR-Mouse-Reactor
           nil
           '((:VLR-beginDoubleClick . dblclkedit))
       )
)
)                                        ;0 = 打开反应器
(defun dblclkedit (reactorObject point)
(if dblclk-edit
    (dblclk-edit point)
)
)
(defun dblclk-edit (dblclk_point / owner dblclk_etype p)
(setq owner (nentselp (setq p (trans (car dblclk_point) 0 1))))
                                        ;指定点来选择对象
(if (and (= owner nil) (= 0 (getvar 'cmdactive))) ;_有活动命令时不起作用
    (vla-sendcommand
      (vla-get-activedocument (vlax-get-acad-object))
      (strcat (rtos (car p) 2 3)
              ","
              (rtos (cadr p) 2 3)
              " tianc "
      )
    )
)
)
(defun c:tianc (/ opt pt la)
(setvar "measurement" 1)
(setq        opt
       (mycadgetkword
           "\n①实体/②钢筋砼/③素砼/④墙体/⑤阳台/⑥卫生间/⑦厨房:<1>"
           '("1" "2" "3" "4" "5" "6" "7")
           "1"
       )
)
(cond
    ((= opt "1") (tianchong1))
    ((= opt "2") (tianchong2))
    ((= opt "3") (tianchong3))
    ((= opt "4") (tianchong4))
    ((= opt "5") (tianchong5))
    ((= opt "6") (tianchong6))
    ((= opt "7") (tianchong7))
)
(princ)
)

(defun tianchong1 ()
(prompt "\n实体填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "solid" pt "")
)
(setvar "clayer" la)
)                                        ;solid连续填充,指定内部点

(defun tianchong2 ()
(prompt "\n钢筋砼填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "ar-conc" "4" "0" pt "")
    (command "bhatch" "p" "ansi31" "160" "0" "@" "")
)
(setvar "clayer" la)
)                                        ;ar-conc&ansi31连续填充,指定内部点

(defun tianchong3 ()
(prompt "\n素砼填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "ar-conc" "4" "0" pt "")
)
(setvar "clayer" la)
)                                        ;ar-conc连续填充,指定内部点

(defun tianchong4 ()
(prompt "\n墙体填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "ansi31" "60" "0" pt "")
)
(setvar "clayer" la)
)                                        ;ansi31连续填充,指定内部点

(defun tianchong5 ()
(prompt "\n阳台填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "ansi37" "60" "0" pt "")
)
(setvar "clayer" la)
)                                        ;ansi37连续填充,指定内部点

(defun tianchong6 ()
(prompt "\n卫生间填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "cross" "30" "0" pt "")
)
(setvar "clayer" la)
)                                        ;cross连续填充,指定内部点

(defun tianchong7 ()
(prompt "\n厨房填充,指定内部点\n")
(setq la (getvar "clayer"))
(command "layer" "s" "hatch" "")
(while (setq pt (getpoint))
    (command "bhatch" "p" "angle" "30" "0" pt "")
)
(setvar "clayer" la)
)                                        ;angle连续填充,指定内部点
(princ)

(defun MycadGetkword (pro lst def / kw val)
(setq        lst (apply
              'append
              (mapcar '(lambda (e)
                       (list (ascii (strcase e)) (ascii (strcase e T)))
                     )
                      lst
              )
          )
        def (ascii def)
)
(prompt pro)
(while (not (and (setq kw(grread nil)
                       val (car kw)
                       kw(cadr kw)
                   )
                   (member val '(2 11 25))
                   (if (or (= val 25)
                           (and (= val 11) (= kw 0))
                           (member kw '(13 32))
                     )
                     (setq kw def)
                     (member kw lst)
                   )
              )
       )
)
(strcase (vl-list->string (list kw)))
)

我爱lisp 发表于 2014-9-26 15:22:51

这个双击反应器可以直接运行,你可以慢慢研究,看看如何修改
页: [1]
查看完整版本: [求助]如何双击一个块,就执行一个指定的lisp程序?