帮忙编写个lisp语言程序(简单的数字加减)

帮忙编写个lisp语言程序(简单的数字加减),第1张

;;;已为你写好程序,功能比你要求的还要好

(print "图号修改(型如GCGS2010-165-19,若为多行文字请先炸开),命令:thxg")

(defun c:thxg(/ all endno aa bb cc wz tha thh thq th srz)

(if (null xzz) (setq xzz 0))

(setq srz(getint (strcat "输入修正值<" (itoa xzz) ">:")))

(if (not (null srz)) (setq xzz srz))

(setq ALL (ssget(list (cons 0 "text"))))

(if all (SETQ nn (SSLENGTH ALL)))

(print (strcat "设定的修改值为:" (itoa xzz)))

(setq endno 0)

(WHILE (and (< endno nn) all)

(setq aa (ssname all endno))

(setq bb (entget aa))

(setq cc(cdr(assoc 1 bb)))

(setq wz(rinstr cc "-"))

(setq tha(substr cc (+ wz 1) ( - (strlen cc) wz -1)))

(setq thh(itoa (+ (atoi tha) xzz)))

(setq thq (substr cc 1 wz))

(setq th(strcat thq thh))

(setq bb (subst (cons 1 th) (assoc 1 bb) bb))

(entmod bb)

(print (strcat cc "已修改为" th))

(setq endno (+ endno 1))

)

(print)

)

;;;

(defun rinstr(str cset / len i aa)

(if (> (strlen str) 0)

(progn

(setq i (strlen str))

(setq aa(substr str (strlen str) 1))

(while (and (/= aa cset) (>= i 1))

(setq i(1- i))

(setq aa(substr str i 1))

)

)

)

(setq i i)

)

lisp本身就是cad所属的开发程序,他提供一些简单的函数计算,剩下的就全是针对autocad的绘图功能了。lisp程序类似与数据库中的存储过程,可以批量的处理绘制cad图形。

学习lisp是很简单的,只要掌握了几个主要命令的使用就行,就是对语句格式要求很研,本身lisp的函数相当多,不必去记。

加载LISP

1 可以使用APPLOAD命令,然后去找到要加载的LISP文件,加载即可。

2 可以自己从文件管理器把LISP文件拖动到ACAD的图形窗口,也可以加载

3 在命令行后用,(load "c:\\temp\\xxxlsp")也可以加载,路径名请输入实际的路径。

另:对于一个LSP程序,(defun 后面的既是命令或者函数,一般程序应该有提示,若没有,标志符c:后面的单词是可以在ACAD下使用的命令,既可以在COMMAND:后面直接输入,即可执行。

autocad2007的copy自身就是多次拷贝,就是你不用输入m就是多次拷贝,但在二次开发中一定要用m

下面的lisp程序是用于拷贝

(defun c:ccp1 ()

(prompt "选择要拷贝的目标:")

(setq en (ssget))

(prompt "输入基点:")

(setq p1 (getpoint))

(command "copy" en "" p1 )

(while (setq p2 (getpoint))

(command p2)

)

)

在上面的程序中应没输入"m"虽然copy在命令下是多次拷贝的在程序中给它了多次拷贝的条件,但只能拷贝一次。

(defun c:ccp ()

(prompt "选择要拷贝的目标:")

(setq en (ssget))

(prompt "输入基点:")

(setq p1 (getpoint))

(command "copy" en "" "m" p1 )

(while (setq p2 (getpoint))

(command p2)

)

(command "")

)

在程序ccp中在输入p1前加了"m" (command "copy" en "" "m" p1 )它就是多次拷贝

下面是一个循环只要p2有值它就要去拷贝,当你在(setq p2 (getpoint))输入回车,这时p2是空值,程序就退出。

做了隐藏和显示两个命令

我编写的简单,功能不太全你看着用吧

复制下列代码,创建acadlsp放在在CAD安装目录第一层文件夹下,可自动加载啊:

;在命令行输入该命令hidsel,然后选择图元,结果没选的被改到隐藏层

(defun C:hidsel(/ all;所有图元

xs;非隐藏图元

yc;隐藏图元

n nam dat)

(setvar "CMDECHO" 0);关闭命令回显

(command "_layer" "n" "临时隐藏图层" "")(command "_layer" "off" "临时隐藏图层" "")

(setvar "CMDECHO" 1)

(setq all (ssget "x"));选择所有

(setq xs (ssget));选择非隐藏图元

(setq n -1 yc all);运算隐藏图元

(repeat (sslength xs)

(setq n (+ n 1))

(setq nam (ssname xs n));返回第N个图元的名称

(setq yc (ssdel nam yc))

)

(setq N -1);隐藏

(repeat (sslength yc)

(setq N (+ n 1))

(setq nam (ssname yc n));返回第N个图元的名称

(setq dat (entget nam));DAT储存第N个图元数据

(entmod (subst (cons 8 "临时隐藏图层") (Assoc 8 dat) dat));将yc集合隐藏

)

(setq all nil xs nil yc nil n nil nam nil dat nil);清除数据占用内存

(princ)

)

;显示所有图元

(defun c:shoal(/ all n nam dat)

(setq all (ssget "x"));选择所有

(setq N -1);隐藏

(repeat (sslength all)

(setq N (+ n 1))

(setq nam (ssname all n));返回第N个图元的名称

(setq dat (entget nam));DAT储存第N个图元数据

(entmod (subst (cons 8 "0") (Assoc 8 dat) dat));将yc集合隐藏

)

(setvar "CMDECHO" 0)

(COMMAND "PURGE" "LA" "临时隐藏图层" "Y" "Y" "")

(setvar "CMDECHO" 1)

(setq all nil n nil nam nil dat nil);清除数据占用内存

(princ)

)

以上就是关于帮忙编写个lisp语言程序(简单的数字加减)全部的内容,包括:帮忙编写个lisp语言程序(简单的数字加减)、CAD里面的lisp有什么作用啊,怎么用,要具体的,能让我明白加分、CAD LISP 小程序 求高手!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9521955.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存