ou_y_x 发表于 2013-11-22 12:55:09

lsp中(c:zzz)如有后续参数应怎样输入?

本人菜鸟,请教各位大神一个问题。
我想用一个lsp调用一个vlx的命令,比如zzz;
发现用command是没法识别命令zzz的,
而用(c:zzz)的话,请问要怎样继续输入后续的参数?
后续参数可能是某个变量的值。



819534890 发表于 2013-11-22 15:25:58

本帖最后由 819534890 于 2013-11-22 15:28 编辑

1、如果需要参数就不必定义为c:zzz了,直接定义为zzz(参数);
2、函数可以直接在命令行中调用,在命令行输入:(zzz 参数)即可;
3、当然,如果一定要定义为c:zzz(参数)的话,也行,在命令行中输入:(c:zzz 参数) 即可。

ll_j 发表于 2013-11-22 15:45:40

可以研究一下vlax-add-cmd函数,这个函数可以把Lisp函数转换成command可以执行的命令,这样就可以带参数了。
具体使用可以在论坛中搜索一下。

ou_y_x 发表于 2013-11-22 15:55:04

819534890 发表于 2013-11-22 15:25 static/image/common/back.gif
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)这样表达,怎么加后续参数?
还有后续参数是之前某个变量的值。

我在论坛里搜索了一下以往的帖子,也有人提过相同的问题,但好像没什么解决方案。
不知道问题在哪?

819534890 发表于 2013-11-22 17:56:55

本帖最后由 819534890 于 2013-11-22 18:10 编辑

ou_y_x 发表于 2013-11-22 15:55 static/image/common/back.gif
感谢这位大神回答。
可能我没说清楚,其实我的意思是这样子:
比如简单地说

直接 (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,会出现参数错误提示。



Gu_xl 发表于 2013-11-22 19:54:24

本帖最后由 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)

ou_y_x 发表于 2013-11-23 09:56:15

Gu_xl 发表于 2013-11-22 19:54 static/image/common/back.gif
;;假设函数C:zzz为:
(defun c:ZZZ ()
(setq p1 (getpoint "\n第一点:"))


噢,大概懂了,感谢版主详细解答。
这样的意思是不是,如果是别人的vlx,
在不知道其函数有几个参数的情况下,就没法这样执行?

958620832 发表于 2013-11-23 12:08:03

ou_y_x 发表于 2013-11-23 09:56 static/image/common/back.gif
噢,大概懂了,感谢版主详细解答。
这样的意思是不是,如果是别人的vlx,
在不知道其函数有几个参数的情 ...
也可以做到的。
在不知道参数的情况下,可以用command函数一步一步找出参数。
比如楼上命令c:zzz,在确保已经将ZZZ添加到了Autcad内置命令集中的前提下,假设不知道参数,找出参数的具体步骤为:
首先,在命令行输入(command "zzz"),看下一步命令行提示"第一点:”,知道第一个参数是点,
根据命令行第一个提示,输入一点,看命令行的下一步提示"第二点:”,知道第二个参数也是点,
如此类推,就可以找出该函数的所有参数了。
然后,根据提示,补充command表达式,如(command "zzz" pt1 pt2)。
其他函数可以用同样方法找出参数,并补充command表达式。

ou_y_x 发表于 2013-11-23 13:56:06

958620832 发表于 2013-11-23 12:08 static/image/common/back.gif
也可以做到的。
在不知道参数的情况下,可以用command函数一步一步找出参数。
比如楼上命令c:zzz,在确 ...

试了一下,成功了。感谢。

sicky111 发表于 2015-8-6 08:15:00

不错的帖子,学习了。
页: [1]
查看完整版本: lsp中(c:zzz)如有后续参数应怎样输入?