bradb 发表于 2022-7-6 14:32:39

Autolisp问题

我为autocad编写了一系列命令。我想知道是否有一种方法可以在我试图编写的另一个命令中使用我的一个命令。当我尝试它时,它说这是一个未知的命令。我在我的启动套件中有这个命令,当我在命令提示符下键入它时,它就会工作?这可能吗。
 
我还尝试在新的lisp中的命令名前面加一个“-”和一个“_”。

Freerefill 发表于 2022-7-6 14:39:45

Try(c:command),例如:
 

(defun c:something( / )
(princ "Hello, World!")
)

(defun c:somethingelse( / )
(c:something)
)

 
这也适用于Express工具,因为它们也是Lisp。

bradb 发表于 2022-7-6 14:45:50

下面是我正在尝试使用我已经编写的命令的代码
 

(defun c:test ()
(setq
OD (getdist "\nEnter OD: ")
ID (getdist "\nEnter ID: ")
);end setq
(command "fit" OD pause pause)
(command "fit" ID pause pause)
);end defun

Lee Mac 发表于 2022-7-6 14:51:12

为什么不把fit函数作为一个子函数并用参数调用呢?

bradb 发表于 2022-7-6 14:55:29

我还没有进步。但我有一本书,我正在阅读lisp命令和他们做什么,所以我会看看我能做什么。我有点明白你的论点是什么意思

bradb 发表于 2022-7-6 15:05:09

 
 
我认为这不适合我,原因有两个:1)我不希望它成为子函数,因为我仍然希望使用FIT作为独立命令。2) 我似乎不知道如何用参数调用它,并且已经用预定的大小运行了命令。(我现在让它转到fit命令,但它只是执行它。它没有使用get函数提供的大小来运行它)

Lee Mac 发表于 2022-7-6 15:10:47

我不知道还有什么其他方法可以做到这一点,因为当你调用另一个LISP函数时,它会占据控制权,我认为你不能在它运行时向它提交数据。

bradb 发表于 2022-7-6 15:12:16

 
 
这就是我害怕的。感谢提供信息

BIGAL 发表于 2022-7-6 15:17:30

在运行命令之前,您需要调用defun。我认为你试图在命令中执行命令FIT做了什么?请在这里粘贴。
 
可能将FIT分为两部分:一部分作为命令FIT运行,另一部分使用FIT内部的新defun。lsp
 
我有一个主lisp程序,它拥有一个架构包的所有defuns(30+),它首先加载,这样我只需调用defun,还可以将我的defuns设置为C:aaa()变量双向传递ok,包始终使用相同的defuns,在涉及大量层操作的地方节省了大量代码。如果有绘图/设计的共同主题,则通常会有一个defuns库,以确保绘图标准的一致性。论坛上显示的大多数Lisp程序都不是这样的,因为他们说,Lisp程序中包含了外部定义,使信息共享更容易。
 
如果有疑问,只需将FIT粘贴到其他lisp代码中,同时找出更好的方法。
适合
(命令someautocadcommand OD pause pause)

bradb 发表于 2022-7-6 15:24:51

 
 
我试过了,但运气不好
 
 

(defun FIT (/ OLDDIA SP EP ANG UANG DANG LANG RAD P1 P2 P3 P4 OSM LAY)
(if(not fit:dia)(setq fit:dia 0.0))
(setq OLDDIA fit:dia
       FIT:DIA (getdist(strcat "\nEnter DIA of FIT <" (rtos fit:dia) ">: "))
)
      (if(null fit:dia)(setq fit:dia olddia))
(setq SP (getpoint "\nEnter START of FIT: ")
       EP (getpoint sp "\nEnter END of FIT: ")
       ANG (angle sp ep)
       UANG (+ ang (/ pi 2))
       DANG (+ ang (* pi 1.5))
       LANG (+ ang pi)
       RAD (/ fit:dia 2)
       P1 (polar sp uang rad)
       P2 (polar ep uang rad)
       P3 (polar sp dang rad)
       P4 (polar ep dang rad)
)
   (setvar "cmdecho" 0)
   (setq osm (getvar "osmode")
         lay (getvar "clayer")
   )
    (setvar "osmode" 0)
    (command "line" p1 p2 "" "line" p3 p4 "")
    (setvar "osmode" osm)
    (setvar "cmdecho" 1)
(princ)
)
(defun c:test ()
(setq
OD (getdist "\nEnter OD: ")
ID (getdist "\nEnter ID: ")
)
(command "fit" OD pause pause)
(command "fit" ID pause pause)
)
页: [1] 2
查看完整版本: Autolisp问题