
;;;已为你写好程序,功能比你要求的还要好
(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 小程序 求高手!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)