乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 110|回复: 11

[编程交流] Autolisp问题

[复制链接]

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:32:39 | 显示全部楼层 |阅读模式
我为autocad编写了一系列命令。我想知道是否有一种方法可以在我试图编写的另一个命令中使用我的一个命令。当我尝试它时,它说这是一个未知的命令。我在我的启动套件中有这个命令,当我在命令提示符下键入它时,它就会工作?这可能吗。
 
我还尝试在新的lisp中的命令名前面加一个“-”和一个“_”。
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 14:39:45 | 显示全部楼层
Try(c:command),例如:
 
  1. (defun c:something( / )
  2. (princ "Hello, World!")
  3. )
  4. (defun c:somethingelse( / )
  5. (c:something)
  6. )

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

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:45:50 | 显示全部楼层
下面是我正在尝试使用我已经编写的命令的代码
 
  1. (defun c:test ()
  2. (setq
  3. OD (getdist "\nEnter OD: ")
  4. ID (getdist "\nEnter ID: ")
  5. );end setq
  6. (command "fit" OD pause pause)
  7. (command "fit" ID pause pause)
  8. );end defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:51:12 | 显示全部楼层
为什么不把fit函数作为一个子函数并用参数调用呢?
回复

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 14:55:29 | 显示全部楼层
我还没有进步。但我有一本书,我正在阅读lisp命令和他们做什么,所以我会看看我能做什么。我有点明白你的论点是什么意思
回复

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 15:05:09 | 显示全部楼层
 
 
我认为这不适合我,原因有两个:1)我不希望它成为子函数,因为我仍然希望使用FIT作为独立命令。2) 我似乎不知道如何用参数调用它,并且已经用预定的大小运行了命令。(我现在让它转到fit命令,但它只是执行它。它没有使用get函数提供的大小来运行它)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:10:47 | 显示全部楼层
我不知道还有什么其他方法可以做到这一点,因为当你调用另一个LISP函数时,它会占据控制权,我认为你不能在它运行时向它提交数据。
回复

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 15:12:16 | 显示全部楼层
 
 
这就是我害怕的。感谢提供信息
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 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)
回复

使用道具 举报

12

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 15:24:51 | 显示全部楼层
 
 
我试过了,但运气不好
 
 
  1. (defun FIT (/ OLDDIA SP EP ANG UANG DANG LANG RAD P1 P2 P3 P4 OSM LAY)
  2. (if(not fit:dia)(setq fit:dia 0.0))
  3. (setq OLDDIA fit:dia
  4.        FIT:DIA (getdist(strcat "\nEnter DIA of FIT <" (rtos fit:dia) ">: "))
  5. )
  6.       (if(null fit:dia)(setq fit:dia olddia))
  7. (setq SP (getpoint "\nEnter START of FIT: ")
  8.        EP (getpoint sp "\nEnter END of FIT: ")
  9.        ANG (angle sp ep)
  10.        UANG (+ ang (/ pi 2))
  11.        DANG (+ ang (* pi 1.5))
  12.        LANG (+ ang pi)
  13.        RAD (/ fit:dia 2)
  14.        P1 (polar sp uang rad)
  15.        P2 (polar ep uang rad)
  16.        P3 (polar sp dang rad)
  17.        P4 (polar ep dang rad)
  18. )
  19.    (setvar "cmdecho" 0)
  20.    (setq osm (getvar "osmode")
  21.          lay (getvar "clayer")
  22.    )
  23.     (setvar "osmode" 0)
  24.     (command "line" p1 p2 "" "line" p3 p4 "")
  25.     (setvar "osmode" osm)
  26.     (setvar "cmdecho" 1)
  27. (princ)
  28. )
  29. (defun c:test ()
  30. (setq
  31. OD (getdist "\nEnter OD: ")
  32. ID (getdist "\nEnter ID: ")
  33. )
  34. (command "fit" OD pause pause)
  35. (command "fit" ID pause pause)
  36. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 00:15 , Processed in 0.589717 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表