明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2151|回复: 6

如何用LISP语言编写一个透明命令?

[复制链接]
发表于 2002-8-12 16:55 | 显示全部楼层 |阅读模式
如何用LISP语言编写一个透明命令?或者如何,把一个普通LISP命令的结果发送到命令行?
发表于 2002-8-12 17:03 | 显示全部楼层

不用command命令,试试看

发表于 2002-8-13 09:07 | 显示全部楼层

摘录《Visual LISP for AutoCAD2000程序设计...》有关片段,请参考...

本帖最后由 陈伯雄 于 2002-8-13 9:07:59 编辑

4.5.8向AutoCAD注册用户命令
        实际上,AutoCAD对于用户自定义命令 (C:xxx) 和她原装的命令并不是一视同仁,而是有亲有疏。具体表现在C:xxx定义的命令:
1〉用 (Command) 或者 (VL-CmdF) 函数不能引用。
2〉从菜单项引发的用户自定义命令,执行之后不能用回车重复调用。
3〉命令反应器不能跟踪。

这显然是不方便的,为了克服这个问题,我们曾经探讨了多个行之有效的方法。而目前,Visual LISP 也提供了一种新的解决方案,关键功能函数是 (VLAX-Add-Cmd)。
(VLAX-Add-Cmd “命令名”函数名 [“命令别名” 命令标志码])
作用:
将一个用户函数以内部命令身份加入到AutoCAD命令集之中。
参数:
<命令名>:字串,确定了在“命令:”提示下可以使用的命令名称。
<函数名>:符号,确定了定义这个命令的函数,函数必须没有形式参数。
<命令标志码>:整数(默认为 0+4)。确定了命令的一些特性。
主要标志有:
0:ACRX_CMD_MODAL,非透明的命令。
1:ACRX_CMD_TRANSPARENT,透明的命令。
二级标志有:
2:ACRX_CMD_USEPICKSET,命令能够获取选择集,但不能检索或设置夹点。
4:ACRX_CMD_REDRAW,命令可获取选择集和夹点集。
这样处理后的函数就可以在用菜单项引用之后,用回车重新调用之。也可以在其它用户程序中,用 (Command) 或 (VL-CmdF) 引用这个命令。而这样的函数定义时,名字是否还要加上C: 前缀,也就不是必要的了。
发表于 2002-10-7 19:53 | 显示全部楼层

还有请教师!

如你说的方法是否是CAD14也能用呢?
发表于 2002-10-7 22:01 | 显示全部楼层

一般来说,你没用到command函数、不对图形数据库修改的自定义c:类命令自动允许透明

一般来说,你没用到command函数、不对图形数据库修改的自定义c:类命令自动允许透明执行的。[br]
发表于 2005-10-30 13:09 | 显示全部楼层
能给举了例子吗?
发表于 2005-11-3 12:25 | 显示全部楼层

用这个命令试一下,不知道能不能满足你的要求

 

 

语法

     (vlax-add-cmd global-name func-sym [local-name cmd-flags])

功能

      将命令添加到 AutoCAD 内置命令集中

 

说明

1)使用 vlax-add-cmd 可以将函数定义为 AutoCAD 命令,而无需在函数名中使用 c: 前缀。

2)使用 vlax-add-cmd 可以定义透明 AutoLISP 命令,而 c: 函数,是不可能实现的。

3)vlax-add-cmd 函数使某个 AutoLISP 函数在当前 AutoCAD 任务中作为 ObjectARX 类型的命令,在 AutoCAD 命令行提示中使用。

4)vlax-add-cmd 函数提供了对 ObjectARX acedRegCmds 宏的访问,从而提供了一个到 ObjectARX 系统 AcEdCommandStack 对象的指针。

5)vlax-add-cmd 函数自动将命令指定到命令组。当文档名称空间发出命令时,vlax-add-cmd 将命令添加到组 doc-ID。doc-ID 是标识文档的十六进制值。当独立名称空间 VLX 发出命令时,vlax-add-cmd 将命令添加到组 VLC-Ddoc-ID:VLX-name。这里 VLX-name 是发出 vlax-add-cmd.的应用程序名。

6)不能使用 vlax-add-cmd 显露创建反应器对象的函数,也不能用它来显露反应器的回调函数。

7)参数 global-name 为字符串。

8)参数 func-sym 为符号,指定不带参数的 AutoLISP 函数。

9)参数 local-name 为字符串(默认值为 global-name)。

10)cmd-flags 为整数型(默认值为 ACRX_CMD_MODAL + ACRX_CMD_REDRAW)。

   主要标志有:

       ACRX_CMD_MODAL (0)  在使用其他命令时不能调用该命令。

       ACRX_CMD_TRANSPARENT (1)  在使用其他命令时可以调用该命令。

   二级标志有:

       ACRX_CMD_USEPICKSET (2)  检索选择优先集时,在 AutoCAD 中清除设置。命令能够获取             优先集,但不能检索或设置夹点。

       ACRX_CMD_REDRAW (4)  检索选择优先集或夹点集时,不将它们从 AutoCAD 中清除。命令可获取优先集和夹点集。

11)若同时设置了 ACRX_CMD_USEPICKSET 和 ACRX_CMD_REDRAW,那么效果和仅设置 ACRX_CMD_REDRAW 一样。

12)关于标志的详细信息,请参见 ObjectARX Reference 手册中的“Command Stack”。

返回值:

如果成功则返回 global-name 参数。如果 acedRegCmds->addCommand(...) 返回错误条件,则函数返回 nil。

范例

下例中的 hello-autocad 函数没有 c: 前缀,但 vlax-add-cmd 将其作为 ObjectARX 类型的命令显示在 AutoCAD 命令行提示:

_$ (defun hello-autocad () (princ "hello Visual LISP"))

HELLO-AUTOCAD

_$ (vlax-add-cmd "hello Visual LISP" 'hello Visual LISP)

"hello Visual LISP"

请参见 vlax-remove-cmd 函数。

 

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

本版积分规则

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

GMT+8, 2024-5-20 14:35 , Processed in 0.147015 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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