oldsoftboss 发表于 2022-7-7 01:20:20

来自键盘快捷键的宏

大家好,
 
我有一个宏
 
^C^C^P(if(=C:FLXDCT nil)(负载(strcat dct\u drltr)/dct10/FLXDCT”))(原理)^PFLXDCT
 
单击工具栏中的图标即可运行。我想从一个键盘快捷键中调用它-比如说N-(似乎不用于其他任何事情)。
理想情况下,我希望将此宏标记到AutoLisp的末尾,但这可能是另一天的任务。
 
已经在CUI中尝试了自定义键盘快捷键,但它们似乎都需要shift键或ctrl键的组合。
 
任何反馈都将受到极大的赞赏。
 
戴夫

Lee Mac 发表于 2022-7-7 01:37:18

我能看到的最简单的方法:
 

(defun c:n nil
(or c:flxdct (load (strcat dct_drltr "/dct10/flxdct") nil))
(if c:flxdct (c:flxdct))
)

oldsoftboss 发表于 2022-7-7 01:40:37

李·麦克再次请客。谢谢你
 
我该如何标记到这个lisp的末尾?
 

(defun c:FF (/ *error* LastEntity OldLayoer pt eLast ent)
;;
(defun *error* ( msg )
   (and OldLayer (setvar "CLAYER" OldLayer))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))   
(setq LastEntity (entlast) OldLayer (getvar "CLAYER"))

(or (tblsearch "LAYER" "flex-cr")
   (command "_.-layer" "_M" "flex-cr" ""))
;;
(setvar 'filletrad
         (cond ((getdist (strcat "\nSpecify radius of flex bends <" (rtos (getvar 'filletrad)) ">: ")))
               ((getvar 'filletrad))
         )
)
(if (setq pt (getpoint "\nSpecify start point: "))
   (progn
;      (setq eLast (entlast))
   (setvar "CLAYER" "flex-cr")
   (command "_.pline" "_non" pt)
   (while (= 1 (logand (getvar 'cmdactive) 1))
       (princ "\nSpecify next point: ")
       (command PAUSE)
   )
   (or (equal eLast (setq ent (entlast)))
         (command "_.fillet" "_P" ent)
   )
   )
)
(setvar "CLAYER" OldLayer)
(princ)
)

.
 
此lisp创建了弹性线。口齿不清沿着它放了一条之字形的线。
 
这将是伟大的有这一切在一个打击。

Lee Mac 发表于 2022-7-7 01:56:40

我以为我认出了
 
http://www.cadtutor.net/forum/showthread.php?44009-宏p=327191&viewfull=1#post327191

Lee Mac 发表于 2022-7-7 02:06:48

我想最简单的方法是这样:
 

(defun c:FF ( / *error* LastEntity OldLayoer pt ent )

(defun *error* ( msg )
   (and OldLayer (setvar "CLAYER" OldLayer))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(setq LastEntity (entlast) OldLayer (getvar "CLAYER"))

(or (tblsearch "LAYER" "flex-cr")
   (entmake
   (list
       (cons 0 "LAYER")
       (cons 100 "AcDbSymbolTableRecord")
       (cons 100 "AcDbLayerTableRecord")
       (cons 2 "flex-cr")
       (cons 70 0)
   )
   )
)

(setvar 'filletrad
   (cond
   (
       (getdist (strcat "\nSpecify radius of flex bends <" (rtos (getvar 'filletrad)) ">: "))
   )
   ( (getvar 'filletrad) )
   )
)

(if (setq pt (getpoint "\nSpecify start point: "))
   (progn
   (setvar "CLAYER" "flex-cr")
   
   (command "_.pline" "_non" pt)
   (while (= 1 (logand (getvar 'cmdactive) 1))
       (princ "\nSpecify next point: ")
       (command pause)
   )
   
   (or (equal LastEntity (setq ent (entlast)))
         (command "_.fillet" "_P" ent)
   )
   )
)

(setvar "CLAYER" OldLayer)
(princ)

(or c:flxdct (load (strcat dct_drltr "/dct10/flxdct") nil))
(if c:flxdct (c:flxdct))
)

oldsoftboss 发表于 2022-7-7 02:13:57

你又一次来救援了。谢谢你
 
我试图在代码的底部添加函数,然后在另一个lisp完成后调用n函数,但无论我以何种方式尝试,都会不断出现错误。
 
谁会想到简单地将代码添加到底部呢。

Lee Mac 发表于 2022-7-7 02:21:24

嗯,这不是实现它的理想方式,但我没有其他代码来整合它。
 
只要行得通我想
页: [1]
查看完整版本: 来自键盘快捷键的宏