明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1367|回复: 9

[已解答] lsp中(c:zzz)如有后续参数应怎样输入?

[复制链接]
发表于 2013-11-22 12:55 | 显示全部楼层 |阅读模式
本人菜鸟,请教各位大神一个问题。
我想用一个lsp调用一个vlx的命令,比如zzz;
发现用command是没法识别命令zzz的,
而用(c:zzz)的话,请问要怎样继续输入后续的参数?
后续参数可能是某个变量的值。




发表于 2013-11-22 15:25 | 显示全部楼层
本帖最后由 819534890 于 2013-11-22 15:28 编辑

1、如果需要参数就不必定义为c:zzz了,直接定义为zzz(参数);
2、函数可以直接在命令行中调用,在命令行输入:(zzz 参数)即可;
3、当然,如果一定要定义为c:zzz(参数)的话,也行,在命令行中输入:(c:zzz 参数) 即可。
发表于 2013-11-22 15:45 | 显示全部楼层
可以研究一下vlax-add-cmd函数,这个函数可以把Lisp函数转换成command可以执行的命令,这样就可以带参数了。
具体使用可以在论坛中搜索一下。
 楼主| 发表于 2013-11-22 15:55 | 显示全部楼层
819534890 发表于 2013-11-22 15:25
1、如果需要参数就不必定义为c:zzz了,直接定义为zzz(参数);
2、函数可以直接在命令行中调用,在命令行输 ...

感谢这位大神回答。
可能我没说清楚,其实我的意思是这样子:
比如简单地说
(defun c:sccd  ()
(load "zzz.VLX")
(c:zzz)
(princ)
)
在lsp加载了另一个vlx,zzz是vlx的命令,
但是zzz之后还有参数;
如果是command的话我们可以(command "line" pt1 pt2)这样来输入pt1,pt2两个参数,
但非cad本身命令不能用command;
那(c:zzz)这样表达,怎么加后续参数?
还有后续参数是之前某个变量的值。

我在论坛里搜索了一下以往的帖子,也有人提过相同的问题,但好像没什么解决方案。
不知道问题在哪?
发表于 2013-11-22 17:56 | 显示全部楼层
本帖最后由 819534890 于 2013-11-22 18:10 编辑
ou_y_x 发表于 2013-11-22 15:55
感谢这位大神回答。
可能我没说清楚,其实我的意思是这样子:
比如简单地说

直接 (c:zzz pt1 pt2)
c:zzz本质也是函数,加了c:只是多了一个作用:当作命令行的一个外部命令。其他和普通函数没任何区别。

举例说明以下:
(defun c:zzz( x y )
(+ x y)
)

;命令行 输入 (c:zzz 3 5) 结果就是8
;在其他函数中调用:(setq qh (c:zzz 3 5) ),那么 qh的值就是8
;由于zzz带有参数,在命令行直接输入zzz,会出现参数错误提示。



发表于 2013-11-22 19:54 | 显示全部楼层
本帖最后由 Gu_xl 于 2013-11-22 19:55 编辑

;;假设函数C:zzz为:
(defun c:ZZZ ()
  (setq p1 (getpoint "\n第一点:"))
  (setq p2 (getpoint p1 "\n第二点:"))
  (princ "\n距离是:") (princ (distance p1 p2))
  (princ)
  )
则将命令添加到 AutoCAD 内置命令集中:
(vlax-add-cmd "zzz" 'c:zzz)
使用方法:
(command "zzz" pt1 pt2)

点评

高明啊!  发表于 2013-11-22 21:55

评分

参与人数 1明经币 +1 收起 理由
958620832 + 1 很给力!

查看全部评分

 楼主| 发表于 2013-11-23 09:56 | 显示全部楼层
Gu_xl 发表于 2013-11-22 19:54
;;假设函数C:zzz为:
(defun c:ZZZ ()
  (setq p1 (getpoint "\n第一点:"))

噢,大概懂了,感谢版主详细解答。
这样的意思是不是,如果是别人的vlx,
在不知道其函数有几个参数的情况下,就没法这样执行?
发表于 2013-11-23 12:08 | 显示全部楼层
ou_y_x 发表于 2013-11-23 09:56
噢,大概懂了,感谢版主详细解答。
这样的意思是不是,如果是别人的vlx,
在不知道其函数有几个参数的情 ...

也可以做到的。
在不知道参数的情况下,可以用command函数一步一步找出参数。
比如楼上命令c:zzz,在确保已经将ZZZ添加到了Autcad内置命令集中的前提下,假设不知道参数,找出参数的具体步骤为:
首先,在命令行输入(command "zzz"),看下一步命令行提示"第一点:”,知道第一个参数是点,
根据命令行第一个提示,输入一点,看命令行的下一步提示"第二点:”,知道第二个参数也是点,
如此类推,就可以找出该函数的所有参数了。
然后,根据提示,补充command表达式,如(command "zzz" pt1 pt2)。
其他函数可以用同样方法找出参数,并补充command表达式。
 楼主| 发表于 2013-11-23 13:56 | 显示全部楼层
958620832 发表于 2013-11-23 12:08
也可以做到的。
在不知道参数的情况下,可以用command函数一步一步找出参数。
比如楼上命令c:zzz,在确 ...

试了一下,成功了。感谢。
发表于 2015-8-6 08:15 | 显示全部楼层
不错的帖子,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 15:21 , Processed in 0.243213 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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