自学编写CAD的Lisp程序

王林
发布: 2024-01-08 14:02:12
转载
1299 人浏览过

CAD怎么自己编lisp程序

做了隐藏和显示两个命令.

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

复制下列代码,创建acad.lsp.放在在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)

)

CAD里面的lisp有什么作用啊怎么用要具体的能让我明白加分

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

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

加载LISP

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

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

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

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

有几个CAD中的LISP语言怎么编程

AutoLISP语言是在普通的LISP语言基础上,又扩充了许多适用于CAD应用的功能而形成的一种程序设计语言。它是一种解释性值语言,速度较慢,难以保密,可用任何文字编辑软件编辑,用纯文本的格式保存。例如:

(setq i 1);就是代码i值是1

(command "CIRCLE" '(0 0) 100);命令在坐标原点绘制半径100的圆。

AutoLISP语言中的一切成分都是以函数形式给出的,它没有语句概念或其他语法结构。执行AutoLISP程序就是执行一些函数,再调用其它函数。例如:

(setq pt1 (getpoint "n请选择圆心插入点"))

(command "CIRCLE" pt1 100);命令这个插入点绘制圆,半径为100

AutoLISP把数据和程序统一表达为表结构,故可把程序当作数据来处理,也可把数据当作程序来执行。

例如:一条直线,起点坐标'(0 0),端点坐标'(1000 0),图层为0层,颜色为1【红色】这个是一条直线的一些数据,怎么执行变为程序代码如下:

(entmake (list '(0 . "LINE") '(8 . "0") '(62 . 1) '(10 0 0) '(11 1000 0)))

以上可以直观的看数据,也可以粘贴到AutoCAD的命令行,就绘制出以上要的直线。

AutoLISP语言中程序运行过程就是对函数值的过程,是在对函数值的过程中实现函数的功能。在AutoCAD里面,所有的对象可以看成是由无数的点构成,每个点都有自己的坐标,函数的运行就是计算出这些点的数值,根据得到的数值进行判断。

AutoLISP语言的主要控制结构是采用递归方式。递归方式的使用,使得程序设计简单易懂。例如:

(setq &k1 (entsel));选择对象

(setq &k1 (car &k1));提取图元

(setq #g1 (entget &k1));取得属性列表

(setq c0 (cdr (assoc 0 #g1)));取得图元名称

以上是一个个的写下来,可以写成以下:

(setq c0 (cdr (assoc 0 (entget (car (entsel))))));简单易懂

由于autolisp简单,容易,所以上手很快。编写程序后,可以大大的提高绘图效率,有名的【天正】插件,就是绘图的好帮手。

autolisp程序也有不足的地方,如提取坐标,这个只能在图元属性里面提取,这样的话会有局限性,法向坐标1与-1的坐标值相同,但是图形的位置不同,造成计算坐标的困难,所以提取坐标值,最好使用VLAX函数来提取。

以上是自学编写CAD的Lisp程序的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:docexcel.net
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板