找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2514|回复: 6

【函数】一个计算表达式的函数

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-4-7 15:09:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

  1. (defun XD:EvalVBExpression (expr / scr res)
  2.   (setq res (vl-catch-all-apply (function (lambda nil
  3.                                             (setq scr
  4.                                                   (vla-getinterfaceobject
  5.                                                                           (vlax-get-acad-object) "ScriptControl"
  6.                                                   )
  7.                                             )
  8.                                             (vlax-put-property scr 'language
  9.                                                                "VBScript"
  10.                                             )
  11.                                             (vlax-invoke scr 'eval expr)
  12.                                           )
  13.                                 )
  14.             )
  15.   )
  16.   (if scr
  17.     (vlax-release-object scr)
  18.   )
  19.   (if (not (vl-catch-all-error-p res))
  20.     res
  21.   )
  22. )

例子:

  1. 命令: (setq a (XD:EvalVBExpression "1*2-3/2.0+2^2"))
  2. 4.5

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 188个

财富等级: 日进斗金

发表于 2013-4-7 20:08:13 来自手机 | 显示全部楼层
向老大学习学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-7 22:44:37 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-4-7 22:45 编辑

整复杂了,CAD已有的咚咚就不要浪费时间写这个,表达式计算用C:CAL 就够了
in the example above, you could have replaced the vl-arx-import call with the following:cal (AutoLISP)

Invokes the on-line geometry calculator and returns the value of the evaluated expression (externally defined: geomcal ObjectARX application)

(c:cal expression)
Arguments
expression
A quoted string. See CAL in the Command Reference for a description of allowable expressions.

Return Values
The result of the expression.
Examples
The following example uses cal in an AutoLISP expression with the trans function:
(trans (c:cal "[1,2,3]+MID") 1 2)

(vl-arx-import "geomcal.arx")
This would import all functions defined in geomcal.arx, including c:cal .









评分

参与人数 1贡献 +1 收起 理由
XDSoft + 1 赞一个!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

 楼主| 发表于 2013-4-7 23:14:46 | 显示全部楼层

欢迎常来和大家交流,有句话“三人行,必有我师”。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-4-8 00:02:44 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-4-8 00:08 编辑

整理几个关于 Cal 的实用方法,CAL 的详细用法可以查看“命令参考”,
设定点和矢量的格式
点或矢量是以方括号 ([ ]) 括起的一组三个实数的表达式:[r1,r2,r3]
标记法 p1p2 等用来标明点。标记法 v1v2 等用来标明矢量。在图形中,点显示为圆点,矢量显示为带箭头的直线。
CAL 支持以所有格式表示的点。
点的格式
坐标系
点的格式
极轴
[距离<角度]
柱坐标
[距离<角度,z]
球坐标
[距离<角度 1<角度 2]
相对坐标
使用前缀 @ [@x,y,z]
世界坐标系(而不是用户坐标系)
使用前缀 * [*x,y,z]

可以省略点或矢量的下列组成部分:右方括号 (]) 前面紧邻的零坐标值和逗号。
下列点都是有效的点:
[1,2] 等同于 [1,2,0]
[,,3] 等同于 [0,0,3]
[ ] 等同于 [0,0,0]
下例中的点是按相对球坐标系(相对于世界坐标系)输入的。距离是 1+2=3,角度是 10+20=30 度和 45 度,20 分。
[ *1+2<10+20<45d20"]
下例中的点包含作为其分量的算术表达式,也是有效的:
[2*(1.0+3.3),0.4-1.1,2*1.4]
下例使用端点对象捕捉和矢量 [2,0,3] 计算一个偏离选定端点一定位移的点:
end + [2,,3]
计算得到的点相对选定的端点在 X 方向偏移两个单位,在 Z 方向偏移三个单位。


1 角度转换
(c:cal "d2r(30");十进制度化弧度
(c:cal "r2d(0.5*pi)");弧度转换为十进制度

2 点到直线的距离 dpl
(c:cal "dpl([1,1],[2,4],[4,5]");确定点[1,1]到直线(通过点 [2,4] 和 [4,5])的最短距离。

3 dpp(p,p1,p2,p3) 确定点 p 到平面(由三点 p1、p2、p3 定义)的距离。

4 rot 函数绕坐标轴旋转点并返回旋转得到的点。
rot(p,origin,ang)
以经过原点Z 轴为轴,旋转点 p,旋转角度为 ang ,如下例所示:

                               
登录/注册后可看大图


rot(p,AxP1,AxP2,ang)
以经过点 AxP1 和点 AxP2 的直线为轴旋转点 p,转角为 ang,如下例所示。轴的方向为从第一个点到第二个点。

lisp 程序中也可以直接使用变量


                               
登录/注册后可看大图


令: (setq p1 (getpoint)) (-0.897589 2.3808 0.0)

命令: (setq p2 (getpoint))
(5.30434 3.17949 0.0)

命令: cal
>> 表达式: rot('p1','p2',30)
错误:
AutoLISP 变量 'P1' 没有值
>> 表达式: rot(p1,p2,30)
0.332658069,-0.613160548,0

命令: (c:cal "rot(p1,p2,30)")==〉度数按当前格式设定,非默认弧度
(0.332658 -0.613161 0.0)


评分

参与人数 1贡献 +1 收起 理由
eachy + 1 赞一个!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8949个

财富等级: 富甲天下

发表于 2013-4-10 07:31:17 | 显示全部楼层
向老大学习学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 394个

财富等级: 日进斗金

发表于 2013-4-12 14:29:24 | 显示全部楼层
c:cal这个要学习,支持.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-5 16:27 , Processed in 0.225329 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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