05625lcc 发表于 2008-11-25 10:06:00

[求助]lsp中怎样使用cal

<p>比如,我写的这个程序,如果在 (setq c_chamfer (getreal "Specify chamfer distant&lt;0.000&gt;"))<br/>要求输入倒角值时使用'cal后,cal的结果并不能自动赋给c_chamfer ,请教解决方法,我要像系统那样可以使用透明命令cal,然后结果自动被程序使用</p><p>(<br/>&nbsp; defun c:cf(/ c_chamfer)<br/>&nbsp; (initget 7)<br/>&nbsp; (setq c_chamfer (getreal "Specify chamfer distant&lt;0.000&gt;"))<br/>&nbsp; (setvar "trimmode" 1)<br/>&nbsp; (setvar "chamfera" c_chamfer)<br/>&nbsp; (setvar "chamferb" c_chamfer)<br/>&nbsp; (command "chamfer" "u")<br/>&nbsp; (princ)<br/>)</p><p>运行如下</p><p>Command: cf<br/>Specify chamfer distant&lt;0.000&gt;'cal<br/>&gt;&gt;&gt;&gt; Expression: 5-2<br/>3<br/>Specify chamfer distant&lt;0.000&gt;--------------------此处还要求输入值,可见cal的结果并不会自动被程序使用.</p>

caoyin 发表于 2008-11-25 10:16:00

<p>;; ▓ (lt:expget &lt;函数&gt; &lt;参数&gt;)<br/>;; [功能] 通过计算表达式输入获取数值<br/>;; [参数] fun---(SYM)有效函数为 getint,getreal和getdist<br/>;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; par---(LIST) fun 函数的参数列表<br/>;; [测试] (lt:expGet 'getint '("\n输入整数值: "))</p><p>;; (lt:expGet 'getreal '("\n输入实数值: "))<br/>(defun lt:expget (fun par / ex real)<br/>&nbsp;;(princ "\n支持计算表达式输入...")<br/>&nbsp; (while (not ex)<br/>&nbsp;&nbsp;&nbsp; (initget 128)<br/>&nbsp;&nbsp;&nbsp; (if (setq ex (apply fun par))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex (vl-princ-to-string ex))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (vl-every<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(lambda (x)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (member x '(40 41 42 43 45 46 47 48 49 50 51 52 53 54 55 56 57))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vl-string-&gt;list ex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (progn (if (not c:cal) (arxload "geomcal"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex (c:cal ex))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond ((and (/= (type ex) 'int) (= fun 'getint))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ "\n需要整数值。")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((member fun '(getreal getdist))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex (float ex))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ (cond ((member fun '(getreal getdist)) "\n需要数值。")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((= fun 'getint)&nbsp; "\n需要整数值。")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ex T)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (if (/= ex T) ex)<br/>)</p>

05625lcc 发表于 2008-11-25 10:32:00

<p>高手啊,能不能简单解释一下,还有,如何使用你的程序</p>

caoyin 发表于 2008-11-25 10:34:00

<p>不是有测试程序吗</p><p>;;&nbsp;(lt:expGet 'getint '("\n输入整数值: "))</p><p>;; (lt:expGet 'getreal '("\n输入实数值: "))<br/></p>

05625lcc 发表于 2008-11-25 10:35:00

<p>还有一个疑问,就是我想把输入数值的直接用计算器来弄,这样不用有时去用'cal了,像下面的程序,为什么出错</p><p>(<br/>&nbsp; defun c:xa()<br/>&nbsp; (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 :&nbsp; 'cal<br/>Requires valid numeric angle, two points, or option keyword.<br/>; error: Function cancelled</p>

caoyin 发表于 2008-11-25 10:46:00

<p>命令: (lt:expGet 'getreal '("Specify chamfer distant&lt;0.000&gt;"))<br/>Specify chamfer distant&lt;0.000&gt;</p><p>输入:<font color="#f73809">1+5*8*(2+3)</font><br/>返回:201.0</p><p><br/></p>

05625lcc 发表于 2008-11-25 10:49:00

本帖最后由 作者 于 2008-11-25 10:51:15 编辑 <br /><br /> <p>请教defun lt:...这是什么语言啊,第一次看到,我只学了autolisp,只看过和用过defun c:lt</p>

caoyin 发表于 2008-11-25 11:03:00

<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 13:18:00

高手赐教,不胜感激.半年多没弄了,看来得重新温习啊.呵呵

05625lcc 发表于 2008-11-25 14:08:00

05625lcc发表于2008-11-25 10:35:00static/image/common/back.gif还有一个疑问,就是我想把输入数值的直接用计算器来弄,这样不用有时去用'cal了,像下面的程序,为什么出错(&nbsp; defun c:xa()&nbsp; (command \"xline\" \"a\" \"\'cal\"))运行如下Command: xax

<p></p>麻烦版主帮我解决这个问题,谢谢了
页: [1] 2
查看完整版本: [求助]lsp中怎样使用cal