autocad型源代码_autocad二次开发 数学表达式计算 源代码

本文介绍了如何在Autocad中进行二次开发,提供了一个源代码示例,允许用户直接在命令行输入数学表达式进行计算。通过加载LISP文件,用户可以使用命令【TT】执行计算,源代码详细解释了如何处理加、减、乘、除、括号和乘方等运算。
摘要由CSDN通过智能技术生成

简介:主要提供了autocad二次开发数学表达式技术的源代码,通过这个源代码,可以在autocad命令行直接输入数学表达式进行计算

代码使用方法:

第一步 将下载好代码解压后,将其中的“数学表达式计算.lsp”拖到autocad绘图窗口中(或者将下面的代码复制到一个txt文档当中,然后将扩展名该为lsp,并将其拖进autocad绘图区中)

第二步 输入命令【TT】回车,根据提示,输入数学表达式,回车就可以计算出结果了,

数学表达式计算源代码:

;;;==========================================================================

;|      (JS-STR-FG STR FUNX)

函数:分割公式字符串

例子:        _$  (JS-str-fg "1+2*3-(10/5-1)" "+")

("1" "+" "2*3-(10/5-1)")

_$  (JS-str-fg "1+2*3-(10/5-1)" "-")

("1+2*3" "-" "(10/5-1)")

日期:zml84 于 2007-07-26

|;

(defun JS-STR-FG (STR FUNX / LST I N TMP)

;;初始化

(setq LST '()          I   0 ;_ 变量 I 为进入括号的层数(0:括号外)

N   1

TMP ""

)

;;循环分解字符

(repeat (strlen STR)

(setq STRI (substr STR N 1))

(cond

;;分支一:在括号外部 遇到 运算符

((and (= I 0)

(= STRI FUNX)

)

(if (/= TMP "")

(setq LST (cons TMP LST)

TMP ""

)

)

(setq LST (cons FUNX LST))

)

;;

(t

(setq TMP (strcat TMP STRI))

(cond

((= STRI "(")

(setq I (1+ I))

)

((= STRI ")")

(setq I (1- I))

)

)

)

) ;_ 结束 cond

(setq N (1+ N))

) ;_ 结束 repeat

(if        (/= TMP "")

(setq LST (cons TMP LST))

)

;;;    ;;特殊处理

;;;    (cond

;;;        ;;若原子间无操作

;;;        ((= funx "*")

;;;

;;;         )

;;;

;;;

;;;

;;;

;;;        )

;;列表倒置

(reverse LST)

) ;_ 结束 defun

;;;=====================================================================

;;;  函数功能:数学表达式计算

;;;  日期:zml84 于 2007-07-26

(defun JS (STR / LST JG)

;;替换括号

;;(setq STR (vl-string-translate "()[]{}+-×÷" "()()()+-*/" STR))

(setq STR (vl-string-translate "[]{}" "()()" STR))

(cond

;;分支一:出错

((wcmatch STR "错误*")

(setq JG STR)

)

;;加法

((and (setq LST (JS-STR-FG STR "+"))

(member "+" LST)         )

(setq JG 0)

(foreach STRI LST

(if (= STRI "+")

()

(setq JG (+ JG (JS STRI)))

)

)

)

;;减法

((and (setq LST (JS-STR-FG STR "-"))

(member "-" LST)

)

(if (= (car LST) "-")

(setq JG 0)

(setq JG (JS (car LST)))

)

(foreach STRI (cdr LST)

(if (= STRI "-")

()

(setq JG (- JG (JS STRI)))

)

)

)

;;乘法

((and (setq LST (JS-STR-FG STR "*"))

(member "*" LST)

)

(setq JG 1)

(foreach STRI   LST

(if (= STRI "*")

()

(setq JG (* JG (JS STRI)))

)

)

)

;;除法

((and (setq LST (JS-STR-FG STR "/"))

(member "/" LST)

)

(if (= (car LST) "/")

(setq JG 1.0)

(setq JG (* (JS (car LST)) 1.0))

)

(foreach STRI (cdr LST)

(if (= STRI "/")

()

(setq JG (/ JG (JS STRI)))

)

)

)

;;乘方

((and (setq LST (JS-STR-FG STR "^"))

(member "^" LST)

)

(setq JG (JS (car LST)))

(foreach STRI (cdr LST)

(if (= STRI "^")

()

(setq JG (expt JG (JS STRI)))

)

)

)

;;括号

((and (wcmatch STR "(*")

(wcmatch STR "*)")

)

(setq JG (JS (substr STR 2 (- (strlen STR) 2))))

)

;;符号、数字

(t

(if (setq JG (eval (read STR)))

()

(setq JG 0.0)

)

)

)

JG) ;_结束 defun js

;;;=====================================================================

;;  (princ (JS "1+4+5*2+(5+5)/2+[(6+6)/2+(5+5)/2]"))

;;测试:

(defun C:TT (/ STR)

(while (/= (setq STR (getstring "\n请输入算术表达式: "))

""

)

(princ (JS STR))

)

(princ)

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值