明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2956|回复: 17

请教各位大侠:自己做的LSP怎样能在别的命令中被透明调用?

  [复制链接]
发表于 2004-9-2 17:34:00 | 显示全部楼层 |阅读模式
比如我在执行PLINE命令时调用一个我自己开发的LSP程序进行一些操做,在这个LSP执行完后,使之可以接着执行刚才没有执行完的PLINE命令!


望不吝指教!!!当万分感激!
发表于 2004-9-2 18:16:00 | 显示全部楼层
看你的操作具体是什么?不是所有操作都可以的。
 楼主| 发表于 2004-9-2 18:42:00 | 显示全部楼层
其实我只是想缩放一下图形,但不是简单的缩放!


比如我的图中有很多个点和相应的点号,我的LSP就是给出点号并找到这一点的位置,我要做的就是用PLINE把找到的每一点都连起来!即我找到一个点之后要执行PLINE命令,再运行自己的LSP查找下一个点,之后接着画线!
发表于 2004-9-2 20:40:00 | 显示全部楼层
将你的LISP程序生成独立变量名空间的VLX程序,再用vlax-add-cmd导入命令,参数选择可以透明使用。注意LISP程序中不能调用command。
 楼主| 发表于 2004-9-3 08:58:00 | 显示全部楼层
请问版主:不能用command命令怎么才能在程序中完成缩放任务?有用ZOOM吗?


我只是初用LSP,你说的生成独立变量名空间的VLX程序,是怎么操做?
发表于 2004-9-3 09:06:00 | 显示全部楼层
To create VLX files with seperate namespace, in VLISPIDE, try         File->Build Application.... I am not sure it is necessary.





You should use ActiveX method to Zoom.


BTW, the best way to solve your problem is, paste you LISP here so others can help you.
发表于 2004-9-3 09:10:00 | 显示全部楼层
alin发表于2004-9-2 20:40:00将你的LISP程序生成独立变量名空间的VLX程序,再用vlax-add-cmd导入命令,参数选择可以透明使用。注意LISP程序中不能调用command。

好象不用这么麻烦吧??? 以下是帮助文件 ----------------------------------------------- 如果定义了名称格式为 C:XXX 的 AutoLISP 函数,则该函数可以象内置的 AutoCAD 命令一样在 AutoCAD 命令行提示中使用。无论任务是在 Visual LISP 中还是在 AutoCAD 命令提示下定义和加载此函数,情况都是一样。可以用这个功能为 AutoCAD 添加新命令或重定义现有的命令。
要将函数用作 AutoCAD 命令,必须确保它们遵循如下规则: 函数名必须使用格式 C:XXX 格式(大写或小写字符)。名称的 C: 部分必须存在;XXX 部分是用户选择的命令名。C:XXX 可以用来替代内置的 AutoCAD 命令。(详细信息请参见重定义 AutoCAD 命令。)
函数必须定义为不带参数。然而,允许使用局部变量,并且使用局部变量是一个很好的编程习惯。 可以在任何内置 AutoCAD 命令的提示中透明地调用按此方式定义的函数。透明调用的函数不能调用 command 函数。(command 函数是用来调用 AutoCAD 命令的 AutoLISP 函数,请参见 AutoLISP 参考中的 command。)当透明地发布 C:XXX 定义的命令时,必须在 XXX 部分前加上单引号 (')。
当通过前缀单引号 (') 激活某个 C:XXX 命令时,用户可以透明地发布内置命令,就象对所有透明发布的命令一样。但当某个 C:XXX 命令被激活时,用户不能透明地发布该 C:XXX 命令。
 楼主| 发表于 2004-9-3 10:06:00 | 显示全部楼层
我在用(’)号调用自己的LSP时显示error : Function cancelled
 楼主| 发表于 2004-9-3 10:14:00 | 显示全部楼层
(defun c:cz ()
(setq ptlist nil)
(setq pt22 (getstring "\n指定查询点号:"))
(setq pf (getfiled "指定坐标数据文件" "D:/观测数据" "txt" 2))
(if pf
(progn
(setq fp (open pf "r"))
(setq reco (read-line fp)
ii 1
)
(setq sxb (flz reco))
(while sxb
(setq sxb (flz reco)
n (length sxb)
)
(if (/= n 3)
(cwts)
)
(setq dh (nth 0 sxb)
pt (list (atof (nth 2 sxb)) (atof (nth 1 sxb)))
)
(setq ptlist (cons (list dh pt) ptlist))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq dh22 (car (nth 0 ptlist)))
(setq iii ii)
(if (= pt22 dh22)
(progn
(setq ii 1)
(setq pt33 (atof (nth (+ ii 1) sxb)))
(setq pt331 (atof (nth ii sxb)))
(setq pt333 (list (+ pt33 10 ) (+ pt331 10 )))
(setq pt3333 (list (- pt33 10 ) (- pt331 10 )))
(command "zoom" pt333 pt3333)
(setq ii iii)
)
)
(setq reco (read-line fp)
ii (1+ ii)
)
(setq sxb (flz reco))
)
(close fp)
)
)
(princ)
) ;;;;;;;;;;;;;;存入到表 char ;;;;;;
(defun flz(reco / i0 ii zc le char)
(setq char nil)
(if (and reco (/= reco ""))(progn
(setq i0 1 ii 1 zc (substr reco 1 1))
(while (/= zc "")
(while (= zc " ")
(setq i0 (1+ i0))
(setq zc (substr reco i0 1))
)
(if (/= zc "")(progn
(setq ii i0)
(while (and (/= zc " ") (/= zc ""))
(setq ii (1+ ii))
(setq zc (substr reco ii 1))
)
(setq le (- ii i0))
(setq str (substr reco i0 le))
(if (= str ".") (setq str ""))
(setq char (cons str char))
(setq i0 ii)
))
)
))
(if char (reverse char) char)
)
(defun cwts()
(alert (strcat "\n" pf "文件的第" (itoa ii) "行数据错误!"))
(close fp)
(exit)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 楼主| 发表于 2004-9-3 10:22:00 | 显示全部楼层
观测数据文件及格式: 100 100 200
a1 0 90
a2 90 90
a3 180 90
a4 270 90 程序以上传请各位指教!

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-9-30 16:26 , Processed in 0.202787 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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