[求助]lsp中怎样使用cal
<p>比如,我写的这个程序,如果在 (setq c_chamfer (getreal "Specify chamfer distant<0.000>"))<br/>要求输入倒角值时使用'cal后,cal的结果并不能自动赋给c_chamfer ,请教解决方法,我要像系统那样可以使用透明命令cal,然后结果自动被程序使用</p><p>(<br/> defun c:cf(/ c_chamfer)<br/> (initget 7)<br/> (setq c_chamfer (getreal "Specify chamfer distant<0.000>"))<br/> (setvar "trimmode" 1)<br/> (setvar "chamfera" c_chamfer)<br/> (setvar "chamferb" c_chamfer)<br/> (command "chamfer" "u")<br/> (princ)<br/>)</p><p>运行如下</p><p>Command: cf<br/>Specify chamfer distant<0.000>'cal<br/>>>>> Expression: 5-2<br/>3<br/>Specify chamfer distant<0.000>--------------------此处还要求输入值,可见cal的结果并不会自动被程序使用.</p> <p>;; ▓ (lt:expget <函数> <参数>)<br/>;; [功能] 通过计算表达式输入获取数值<br/>;; [参数] fun---(SYM)有效函数为 getint,getreal和getdist<br/>;; par---(LIST) fun 函数的参数列表<br/>;; [测试] (lt:expGet 'getint '("\n输入整数值: "))</p><p>;; (lt:expGet 'getreal '("\n输入实数值: "))<br/>(defun lt:expget (fun par / ex real)<br/> ;(princ "\n支持计算表达式输入...")<br/> (while (not ex)<br/> (initget 128)<br/> (if (setq ex (apply fun par))<br/> (progn<br/> (setq ex (vl-princ-to-string ex))<br/> (if (vl-every<br/> '(lambda (x)<br/> (member x '(40 41 42 43 45 46 47 48 49 50 51 52 53 54 55 56 57))<br/> )<br/> (vl-string->list ex)<br/> )<br/> (if (progn (if (not c:cal) (arxload "geomcal"))<br/> (setq ex (c:cal ex))<br/> )<br/> (cond ((and (/= (type ex) 'int) (= fun 'getint))<br/> (setq ex nil)<br/> (princ "\n需要整数值。")<br/> )<br/> ((member fun '(getreal getdist))<br/> (setq ex (float ex))<br/> )<br/> )<br/> (setq ex nil)<br/> )<br/> (progn<br/> (setq ex nil)<br/> (princ (cond ((member fun '(getreal getdist)) "\n需要数值。")<br/> ((= fun 'getint) "\n需要整数值。")<br/> )<br/> )<br/> )<br/> )<br/> )<br/> (setq ex T)<br/> )<br/> )<br/> (if (/= ex T) ex)<br/>)</p> <p>高手啊,能不能简单解释一下,还有,如何使用你的程序</p> <p>不是有测试程序吗</p><p>;; (lt:expGet 'getint '("\n输入整数值: "))</p><p>;; (lt:expGet 'getreal '("\n输入实数值: "))<br/></p> <p>还有一个疑问,就是我想把输入数值的直接用计算器来弄,这样不用有时去用'cal了,像下面的程序,为什么出错</p><p>(<br/> defun c:xa()<br/> (command "xline" "a" "\'cal")<br/>)</p><p>运行如下</p><p>Command: xa<br/>xline Specify a point or : a<br/>Enter angle of xline (0) or : 'cal<br/>Requires valid numeric angle, two points, or option keyword.<br/>; error: Function cancelled</p> <p>命令: (lt:expGet 'getreal '("Specify chamfer distant<0.000>"))<br/>Specify chamfer distant<0.000></p><p>输入:<font color="#f73809">1+5*8*(2+3)</font><br/>返回:201.0</p><p><br/></p> 本帖最后由 作者 于 2008-11-25 10:51:15 编辑 <br /><br /> <p>请教defun lt:...这是什么语言啊,第一次看到,我只学了autolisp,只看过和用过defun c:lt</p> <p>lt:expget是自定义函数名啊,你可以任意更改</p><p>c:开头的是可以当做命令来执行的特殊函数,而没有c:的一般作为子程序而被用来调动</p><p>(defun c:tt (/ a)<br/>(setq a (lt:expGet 'getreal '("\n输入实数值: ")))<br/>(if a (alert (strcat "你刚才输入的是 " (rtos a))))<br/>)</p><p><br/></p><p></p> 高手赐教,不胜感激.半年多没弄了,看来得重新温习啊.呵呵 05625lcc发表于2008-11-25 10:35:00static/image/common/back.gif还有一个疑问,就是我想把输入数值的直接用计算器来弄,这样不用有时去用'cal了,像下面的程序,为什么出错( defun c:xa() (command \"xline\" \"a\" \"\'cal\"))运行如下Command: xax<p></p>麻烦版主帮我解决这个问题,谢谢了
页:
[1]
2