找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1310|回复: 14

[求助] [求助]:为什么不能用command 来defun?

[复制链接]
发表于 2006-5-4 23:39:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我的Lisp程序有一行
(command "(defun c:j() (copy_text) ) ")

执行时显示:
命令: (command "(defun c:j() (copy_text) ) ")
(defun c:j() (copy_text) )  LISP 命令不可用。

失败!

但是如果在AutoCAD直接输入
命令: (defun c:j() (copy_text) ) C:J

却能成功!

为什么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-5-5 00:27:09 | 显示全部楼层
command是使用命令,而defun是定义命令。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-5 03:05:36 | 显示全部楼层
多吃一举,要是想定义函数也不用在这里定义,直接定义不就行了?你这样没有实际意义,在lisp里面调用command函数来定义lisp函数,这本来就是矛盾的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-5 18:26:08 | 显示全部楼层
其实command 的原意是将后面的字符串在命令行输入的,但是不知为何对defun不支持。

我的原意是动态生成字符串来定义一个lisp函数,现在看来要先输出到一个Lisp文件,再导入。稍微麻烦一点。

这是直接定义做不到的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-5 20:14:55 | 显示全部楼层
呵呵,走弯路
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-5 21:28:06 | 显示全部楼层
哪里有直路?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-6 14:55:36 | 显示全部楼层
动态用字符生成的函数没有实际意义,也没搞懂楼主的真实目的,如果你想实现只有一个办法用脚步试下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-5-6 17:42:30 | 显示全部楼层
动态用字符生成的函数 这个想法很好啊!我严重支持!
提供一个思路:
用write-line写一个tmp.lsp文件后加载再删了tmp.lsp
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-6 20:18:42 | 显示全部楼层
最初由 sccat 发布
[B]其实command 的原意是将后面的字符串在命令行输入的,但是不知为何对defun不支持。

我的原意是动态生成字符串来定义一个lisp函数,现在看来要先输出到一个Lisp文件,再导入。稍微麻烦一点。

这是直接定义做不?... [/B]


跟楼上想得一样.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-6 23:35:20 | 显示全部楼层
把鞋子扣在头上然后问为什么找不到合适的尺码套得进脑袋?
还是先说清楚你想干嘛。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-5-7 00:18:51 | 显示全部楼层
楼主没有搞清楚括号内的 Command 和 命令行显示的 Command(命令) 是不同的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-7 13:21:04 | 显示全部楼层
最初由 eachy 发布
[B]楼主没有搞清楚括号内的 Command 和 命令行显示的 Command(命令) 是不同的 [/B]


斑竹来讲解一下.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-8 03:13:33 | 显示全部楼层
(command  x ....)
x = cad的标准命令(字符格式)

弯路,如上在程序中写一个文件也是可以的。
另外还可以如下。
。。。。烦不烦阿?干嘛舍近求远呢????

  1. ;;"(defun c:ccc() (c:cal))"
  2. ;|(sendkeys str) = 向cad发送键盘指令---------by eachy
  3. 字符串格式 "{F3}" "~" "(+a)" "(a 10)" "{0,0,0}" "{(}getpoint{)}"
  4. |;
  5. (defun sendkeys (keys)
  6.   (vla-eval (vlax-get-acad-object) (strcat "Sendkeys " (vl-prin1-to-string keys)))
  7.   (princ)
  8. )

  9. ;; 测试: 定义c:cc为c:cal.运行cc前需在命令行运行一次cal命令。
  10. ;; 下面一行不能在vl编程环境运行,需要拷贝到cad命令行运行。或者存为lsp,加载。
  11. (sendkeys "{(}defun c:cc{(}{)} {(}c:cal{)}{)} ")
  12. ;; 对比一下
  13. (defun c:cc()(c:cal))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-8 09:48:12 | 显示全部楼层
是不是VBA中的这个东西啊?

Sub Example_Eval()
    ' This example shows how to can use Eval to run a VBA code fragment
    ' without having to create a Module or procedure.

    Dim VBACode As String
   
    ' Create VBA code fragment
    VBACode = "MsgBox ""Simple code fragment"""
   
    ' Use Eval method to evaluate the small VBA script
    Eval (VBACode)
End Sub

厉害。

但好像有点问题

  1.   [FONT=courier new]

  2. ;;"(defun c:ccc() (c:cal))"
  3. ;|(sendkeys str) = 向cad发送键盘指令---------by eachy
  4. 字符串格式 "{F3}" "~" "(+a)" "(a 10)" "{0,0,0}" "{(}getpoint{)}"
  5. |;

  6. (vl-load-com)

  7. (defun sendkeys (keys)
  8.   (vla-eval (vlax-get-acad-object) (strcat "Sendkeys " (vl-prin1-to-string keys)))
  9.   (princ)
  10. )

  11. (defun c:cal()
  12.   (print "c:cal")
  13.   )

  14. ;; 测试: 定义c:cc为c:cal.运行cc前需在命令行运行一次cal命令。
  15. ;; 下面一行不能在vl编程环境运行,需要拷贝到cad命令行运行。或者存为lsp,加载。
  16. (sendkeys "{(}defun c:cc{(}{)} {(}c:cal{)}{)} ")
  17. ;;;;; 对比一下
  18. ;;;(defun c:cc()(c:cal))
  19.   [/FONT]


在Visaul Lisp IDE 加载的时候出现:
; 错误: Automation 错误。 加载 VBA 时出现问题

还有一点不明白,就是为什么要加上Sendkeys字符串?

  1.   [FONT=courier new]
  2. (strcat "Sendkeys " (vl-prin1-to-string keys)))
  3.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-5-22 15:23:19 | 显示全部楼层
先谢过了.回去试试看行不行!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 08:20 , Processed in 0.190725 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表