明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1659|回复: 4

求助高手帮忙解决个用变量来代替要调用的子程序问题

  [复制链接]
发表于 2013-10-31 20:32:34 | 显示全部楼层 |阅读模式
本帖最后由 328302216 于 2013-11-1 09:04 编辑

(defun c:tt()
  (setq pt1(getpoint "点选一个点"))
  (setq pt2(getdist pt1 "输入距离"))
  (setq pt3(getfiled "选择子程序文件" "" "lsp" 8))
  (setq pt4(load pt3))
  (pt4)
)
(defun tt1()
  (if(= pt2 0)(setq pt2 50))
  (command "rectang"  pt1 "d" pt2 pt2 pt1)
)
(defun tt2()
  (command "line" pt1 '(0 0) "")
)
有这么两个子程序(主程序保存在一个文件,两个子程序也分别保存为两个lsp文件),我想执行主程序tt后选择子程序 tt1 或 tt2 中的一个并自动加载执行子程序内容,如上的程序解决不了!原因是返回的pt4是sym类型的。如果将子程序和主程序放在同一个程序并把 (setq pt4(load pt3))改成 (setq pt4 tt1)则能执行子程序tt1  改成(setq pt4 tt2)则能执行子程序tt2。且子程序和主程序在同一个文件下的话pt4的类型为USUBR(从LISP中加载的用户定义函数)!
不知道各位大大有没有办法将 sym类型或str类型的变量转换成usubr类型的呢!或者有其他办法直接实现更好!先说了不用(cond((判断选择为tt1)(tt1))((判断选择为tt2)(tt2)))的方法!
大概意思应该就是将要执行的子程序赋给一个变量调用并执行该子程序内容!

 楼主| 发表于 2013-10-31 22:20:01 | 显示全部楼层
高手们 你们是没想过这种调用子程序吗还是此路不通?这种的话如果有几千甚至更多的子程序的话就可以需要调用哪个就直接加载哪个来调用就够了,就不用每个都加载,还要判断用哪个!
求各位大神们出手相救啊   
 楼主| 发表于 2013-11-1 09:44:43 | 显示全部楼层
本帖最后由 328302216 于 2013-11-1 09:45 编辑

没人回答,我自己找到了答案,自己来回答一下!!
把 (setq pt4(load pt3))
改成 (setq pt4(eval(load pt3)))
就能达到目的了
发表于 2013-11-1 10:42:52 | 显示全部楼层
先这样试
((eval pt4))
发表于 2013-11-1 13:00:41 | 显示全部楼层
这样也可以  
(setq pt5 (eval ( read (vl-filename-base pt3))))
(pt5)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 03:42 , Processed in 0.135819 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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